From 39b39e29646cc83eff26aa78cf208dc6c3cab462 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 26 Mar 2026 12:07:55 +0000 Subject: [PATCH] Simply Schedule Appointments --- .htaccess | 5 + wp-content/mu-plugins/coaching-mvp.php | 163 +- .../simply-schedule-appointments/CHANGELOG.md | 2342 ++++ .../admin-app/babel.config.js | 5 + .../admin-app/dist/favicon.ico | Bin 0 -> 4286 bytes .../admin-app/dist/index.html | 1 + .../admin-app/dist/static/css/app.css | 1 + .../dist/static/css/chunk-vendors.css | 1390 +++ .../images/foxes/fox-sitting-eyes-closed.svg | 1 + .../images/foxes/fox-sitting-tail-down.svg | 1 + .../images/foxes/fox-sitting-tail-up.svg | 1 + .../dist/static/images/foxes/fox-sleeping.svg | 1 + .../dist/static/images/foxes/fox-standing.svg | 1 + .../btn_google_dark_normal_ios.svg | 50 + .../images/google-calendar-steps/step1.jpg | Bin 0 -> 21456 bytes .../images/google-calendar-steps/step10.jpg | Bin 0 -> 23180 bytes .../images/google-calendar-steps/step2.jpg | Bin 0 -> 32661 bytes .../images/google-calendar-steps/step3.jpg | Bin 0 -> 34552 bytes .../images/google-calendar-steps/step4.jpg | Bin 0 -> 31264 bytes .../images/google-calendar-steps/step5.jpg | Bin 0 -> 24009 bytes .../images/google-calendar-steps/step6.jpg | Bin 0 -> 29517 bytes .../images/google-calendar-steps/step7.jpg | Bin 0 -> 43035 bytes .../images/google-calendar-steps/step8.jpg | Bin 0 -> 38138 bytes .../images/google-calendar-steps/step9.jpg | Bin 0 -> 38623 bytes .../dist/static/images/icon-face.svg | 1 + .../dist/static/images/logo-paypal.svg | 9 + .../admin-app/dist/static/images/logo-ssa.svg | 1 + .../dist/static/images/logo-stripe.svg | 5 + .../dist/static/images/logo-woocommerce.svg | 7 + .../dist/static/images/no-appointments.svg | 77 + .../static/images/promo-booking-flows.svg | 344 + .../images/promo-gravity-forms-info.svg | 1 + .../images/promo-gravity-forms-upsell.svg | 1 + .../static/images/promo-new-booking-app.svg | 833 ++ .../dist/static/images/promo-sms.svg | 1 + .../images/review-plugin-card-congrats.svg | 1 + .../images/settings-advanced-scheduling.svg | 27 + .../dist/static/images/settings-blackout.svg | 141 + .../images/settings-calendar-events.svg | 74 + .../dist/static/images/settings-general.svg | 58 + .../images/settings-google-calendar.svg | 87 + .../dist/static/images/settings-locations.svg | 190 + .../dist/static/images/settings-mailchimp.svg | 15 + .../images/settings-notifications-sms.svg | 88 + .../static/images/settings-notifications.svg | 88 + .../dist/static/images/settings-payments.svg | 107 + .../dist/static/images/settings-resources.svg | 72 + .../dist/static/images/settings-sms.svg | 56 + .../dist/static/images/settings-staff.svg | 232 + .../dist/static/images/settings-styles.svg | 64 + .../dist/static/images/settings-tracking.svg | 79 + .../static/images/settings-translation.svg | 306 + .../static/images/settings-translations.svg | 138 + .../dist/static/images/settings-webex.svg | 312 + .../dist/static/images/settings-webhooks.svg | 94 + .../dist/static/images/settings-zoom.svg | 6 + .../static/images/upgrade-promo-business.svg | 1 + .../dist/static/images/upgrade-promo-plus.svg | 1 + .../dist/static/images/upgrade-promo-pro.svg | 140 + .../dist/static/images/upgrade-zoom.svg | 1 + .../static/images/upsell-card-payments.svg | 1 + .../static/images/upsell-google-calendar.svg | 1 + .../static/images/upsell-promo-business.svg | 1 + .../dist/static/images/upsell-promo-plus.svg | 1 + .../dist/static/images/upsell-promo-pro.svg | 1 + .../dist/static/img/brown-papersq.png | Bin 0 -> 18198 bytes .../admin-app/dist/static/js/app.js | 2 + .../admin-app/dist/static/js/chunk-vendors.js | 725 ++ .../admin-app/dist/static/js/manifest.js | 2 + .../admin-app/iframe-inner.php | 105 + .../admin-app/jsconfig.json | 19 + .../admin-app/public/favicon.ico | Bin 0 -> 4286 bytes .../admin-app/public/index.html | 31 + .../images/foxes/fox-sitting-eyes-closed.svg | 1 + .../images/foxes/fox-sitting-tail-down.svg | 1 + .../images/foxes/fox-sitting-tail-up.svg | 1 + .../static/images/foxes/fox-sleeping.svg | 1 + .../static/images/foxes/fox-standing.svg | 1 + .../btn_google_dark_normal_ios.svg | 50 + .../images/google-calendar-steps/step1.jpg | Bin 0 -> 21456 bytes .../images/google-calendar-steps/step10.jpg | Bin 0 -> 23180 bytes .../images/google-calendar-steps/step2.jpg | Bin 0 -> 32661 bytes .../images/google-calendar-steps/step3.jpg | Bin 0 -> 34552 bytes .../images/google-calendar-steps/step4.jpg | Bin 0 -> 31264 bytes .../images/google-calendar-steps/step5.jpg | Bin 0 -> 24009 bytes .../images/google-calendar-steps/step6.jpg | Bin 0 -> 29517 bytes .../images/google-calendar-steps/step7.jpg | Bin 0 -> 43035 bytes .../images/google-calendar-steps/step8.jpg | Bin 0 -> 38138 bytes .../images/google-calendar-steps/step9.jpg | Bin 0 -> 38623 bytes .../public/static/images/icon-face.svg | 1 + .../public/static/images/logo-paypal.svg | 9 + .../public/static/images/logo-ssa.svg | 1 + .../public/static/images/logo-stripe.svg | 5 + .../public/static/images/logo-woocommerce.svg | 7 + .../public/static/images/no-appointments.svg | 77 + .../static/images/promo-booking-flows.svg | 344 + .../images/promo-gravity-forms-info.svg | 1 + .../images/promo-gravity-forms-upsell.svg | 1 + .../static/images/promo-new-booking-app.svg | 833 ++ .../public/static/images/promo-sms.svg | 1 + .../images/review-plugin-card-congrats.svg | 1 + .../images/settings-advanced-scheduling.svg | 27 + .../static/images/settings-blackout.svg | 141 + .../images/settings-calendar-events.svg | 74 + .../public/static/images/settings-general.svg | 58 + .../images/settings-google-calendar.svg | 87 + .../static/images/settings-locations.svg | 190 + .../static/images/settings-mailchimp.svg | 15 + .../images/settings-notifications-sms.svg | 88 + .../static/images/settings-notifications.svg | 88 + .../static/images/settings-payments.svg | 107 + .../static/images/settings-resources.svg | 72 + .../public/static/images/settings-sms.svg | 56 + .../public/static/images/settings-staff.svg | 232 + .../public/static/images/settings-styles.svg | 64 + .../static/images/settings-tracking.svg | 79 + .../static/images/settings-translation.svg | 306 + .../static/images/settings-translations.svg | 138 + .../public/static/images/settings-webex.svg | 312 + .../static/images/settings-webhooks.svg | 94 + .../public/static/images/settings-zoom.svg | 6 + .../static/images/upgrade-promo-business.svg | 1 + .../static/images/upgrade-promo-plus.svg | 1 + .../static/images/upgrade-promo-pro.svg | 140 + .../public/static/images/upgrade-zoom.svg | 1 + .../static/images/upsell-card-payments.svg | 1 + .../static/images/upsell-google-calendar.svg | 1 + .../static/images/upsell-promo-business.svg | 1 + .../static/images/upsell-promo-plus.svg | 1 + .../public/static/images/upsell-promo-pro.svg | 1 + .../admin-app/public/static/js/manifest.js | 2 + .../admin-app/vue.config.js | 39 + .../admin-app/yarn.lock | 9744 +++++++++++++++++ .../assets/css/block-booking.css | 83 + ...dashboard-upcoming-appointments-widget.css | 125 + .../assets/css/iframe-inner.css | 30 + .../assets/css/material-icons.css | 27 + .../assets/css/roboto-font.css | 40 + .../css/ssa-gravity-forms-editor-styles.css | 51 + .../css/ssa-memberpress-account-styles.css | 114 + .../assets/css/ssa-memberpress-styles.css | 112 + .../assets/css/ssa-styles.css | 15 + .../assets/css/unsupported.css | 42 + .../assets/css/upcoming-appointments.css | 180 + .../assets/fonts/MaterialIcons-Regular.eot | Bin 0 -> 147138 bytes .../assets/fonts/MaterialIcons-Regular.ttf | Bin 0 -> 356840 bytes .../assets/fonts/MaterialIcons-Regular.woff | Bin 0 -> 164912 bytes .../assets/fonts/MaterialIcons-Regular.woff2 | Bin 0 -> 128352 bytes .../assets/fonts/roboto-bold-webfont.woff | Bin 0 -> 26560 bytes .../assets/fonts/roboto-bold-webfont.woff2 | Bin 0 -> 19668 bytes .../assets/fonts/roboto-italic-webfont.woff | Bin 0 -> 31052 bytes .../assets/fonts/roboto-italic-webfont.woff2 | Bin 0 -> 23596 bytes .../assets/fonts/roboto-light-webfont.woff | Bin 0 -> 25812 bytes .../assets/fonts/roboto-light-webfont.woff2 | Bin 0 -> 19112 bytes .../assets/fonts/roboto-medium-webfont.woff | Bin 0 -> 26432 bytes .../assets/fonts/roboto-medium-webfont.woff2 | Bin 0 -> 19492 bytes .../assets/fonts/roboto-regular-webfont.woff | Bin 0 -> 26148 bytes .../assets/fonts/roboto-regular-webfont.woff2 | Bin 0 -> 19344 bytes .../assets/images/foxes/logo-ssa.svg | 23 + .../assets/js/block-booking.js | 360 + .../assets/js/block-upcoming-appointments.js | 264 + .../assets/js/iframe-inner.js | 9 + .../assets/js/iframe-outer.js | 1615 +++ .../assets/js/ssa-form-embed.js | 55 + .../assets/js/ssa-memberpress-account.js | 432 + .../assets/js/ssa-memberpress.js | 532 + .../assets/js/ssa-tracking.js | 147 + .../assets/js/unsupported-min.js | 1 + .../assets/js/unsupported.js | 58 + .../booking-app-new/babel.config.js | 5 + .../booking-app-new/dist/favicon.ico | Bin 0 -> 4286 bytes .../booking-app-new/dist/index.html | 1 + .../booking-app-new/dist/static/css/app.css | 1 + .../dist/static/css/chunk-vendors.css | 1 + .../dist/static/images/icons/afternoon.svg | 1 + .../dist/static/images/icons/evening.svg | 1 + .../dist/static/images/icons/morning.svg | 1 + .../dist/static/images/icons/night.svg | 1 + .../dist/static/images/logo-ssa.svg | 1 + .../dist/static/images/payments/stripe.png | Bin 0 -> 1511 bytes .../booking-app-new/dist/static/js/app.js | 2 + .../dist/static/js/chunk-vendors.js | 1129 ++ .../dist/static/js/manifest.js | 2 + .../booking-app-new/fullscreen-page.php | 15 + .../booking-app-new/iframe-inner.php | 468 + .../booking-app-new/page-appointment-edit.php | 42 + .../booking-app-new/public/favicon.ico | Bin 0 -> 4286 bytes .../booking-app-new/public/index.html | 34 + .../public/static/images/icons/afternoon.svg | 1 + .../public/static/images/icons/evening.svg | 1 + .../public/static/images/icons/morning.svg | 1 + .../public/static/images/icons/night.svg | 1 + .../public/static/images/logo-ssa.svg | 1 + .../public/static/images/payments/stripe.png | Bin 0 -> 1511 bytes .../public/static/js/manifest.js | 2 + .../booking-app-new/vue.config.js | 33 + .../modules/booking/booking.php | 89 + .../modules/booking/includes/frontend.php | 41 + .../includes/frontend.php | 21 + .../upcoming-appointments.php | 50 + .../includes/class-action-scheduler.php | 247 + ...class-advanced-scheduling-availability.php | 110 + .../class-advanced-scheduling-settings.php | 66 + .../includes/class-appointment-factory.php | 99 + .../includes/class-appointment-meta-model.php | 161 + .../includes/class-appointment-model.php | 2035 ++++ .../includes/class-appointment-object.php | 990 ++ .../class-appointment-type-label-model.php | 141 + .../includes/class-appointment-type-model.php | 1474 +++ .../class-appointment-type-object-factory.php | 193 + .../class-appointment-type-object.php | 828 ++ .../includes/class-appointment-types-db.php | 125 + .../includes/class-async-action-model.php | 209 + .../class-availability-block-factory.php | 220 + .../includes/class-availability-block.php | 246 + .../class-availability-cache-invalidation.php | 357 + .../includes/class-availability-cache.php | 503 + .../includes/class-availability-default.php | 166 + .../class-availability-detective-case.php | 286 + .../class-availability-external-model.php | 390 + .../includes/class-availability-functions.php | 586 + .../includes/class-availability-model.php | 805 ++ .../includes/class-availability-query.php | 618 ++ .../class-availability-schedule-factory.php | 117 + .../includes/class-availability-schedule.php | 843 ++ .../includes/class-beaver-builder.php | 58 + .../class-blackout-dates-settings.php | 72 + .../includes/class-blackout-dates.php | 188 + .../includes/class-block-booking.php | 405 + .../class-block-upcoming-appointments.php | 286 + .../includes/class-bootstrap.php | 229 + .../includes/class-cache.php | 91 + .../includes/class-calendar-events-object.php | 90 + .../class-calendar-events-settings.php | 150 + .../includes/class-capabilities.php | 247 + .../includes/class-capacity-settings.php | 64 + .../includes/class-cli.php | 78 + .../includes/class-constants.php | 28 + .../includes/class-csv-exporter.php | 126 + .../includes/class-customer-information.php | 103 + .../includes/class-customers.php | 112 + ...dashboard-upcoming-appointments-widget.php | 66 + .../includes/class-db-model.php | 359 + .../includes/class-db.php | 203 + .../includes/class-debug.php | 179 + .../includes/class-developer-settings.php | 221 + .../includes/class-divi.php | 265 + .../includes/class-elementor.php | 291 + .../includes/class-embed-booking-app-api.php | 112 + .../includes/class-encryption.php | 82 + .../includes/class-error-notices.php | 849 ++ .../includes/class-exception.php | 25 + .../includes/class-external-api.php | 27 + .../includes/class-external-calendar-api.php | 16 + .../class-external-google-calendar-api.php | 201 + .../includes/class-filesystem.php | 65 + .../includes/class-forms.php | 94 + .../includes/class-gcal-exporter.php | 69 + .../includes/class-google-calendar-client.php | 734 ++ .../includes/class-hooks.php | 300 + .../includes/class-ics-exporter.php | 272 + .../includes/class-locale.php | 101 + .../includes/class-locales.php | 2343 ++++ .../includes/class-missing.php | 56 + .../includes/class-notices-api.php | 395 + .../includes/class-notices-data.php | 353 + .../includes/class-notices.php | 772 ++ .../includes/class-notification-model.php | 114 + .../includes/class-notifications-api.php | 234 + .../includes/class-notifications-settings.php | 122 + .../includes/class-notifications.php | 781 ++ .../includes/class-payment-object.php | 151 + .../includes/class-paypal-ipn-listener.php | 311 + .../includes/class-period.php | 290 + .../includes/class-recipient-admin.php | 26 + .../includes/class-recipient-customer.php | 26 + .../includes/class-recipient-shared.php | 26 + .../includes/class-recipient-staff.php | 26 + .../includes/class-recipient.php | 16 + .../class-resource-group-object-factory.php | 70 + .../includes/class-revision-meta-model.php | 165 + .../includes/class-revision-model.php | 1381 +++ .../includes/class-scheduling-max-per-day.php | 88 + .../includes/class-sequence-factory.php | 38 + .../includes/class-sequence.php | 207 + .../includes/class-settings-api.php | 299 + .../includes/class-settings-global.php | 266 + .../includes/class-settings-installed.php | 292 + .../includes/class-settings.php | 477 + .../includes/class-shortcodes.php | 1203 ++ .../includes/class-staff-settings.php | 66 + .../includes/class-styles-settings.php | 95 + .../includes/class-styles.php | 152 + .../includes/class-support-status-api.php | 607 + .../includes/class-support-status.php | 596 + .../includes/class-support.php | 1034 ++ .../includes/class-templates-api.php | 136 + .../includes/class-templates.php | 844 ++ .../includes/class-translation-settings.php | 72 + .../includes/class-translation.php | 343 + .../includes/class-twig-extension.php | 142 + .../includes/class-upgrade.php | 1395 +++ .../includes/class-users.php | 115 + .../includes/class-utils.php | 1312 +++ .../includes/class-validation.php | 64 + .../includes/class-web-meetings.php | 157 + .../includes/class-wp-admin.php | 463 + .../includes/divi/includes/SsaDiviModule.php | 50 + .../includes/divi/includes/loader.js | 9 + .../includes/divi/includes/loader.php | 14 + .../SSADiviBookingModule.jsx | 106 + .../SSADiviBookingModule.php | 184 + .../includes/divi/includes/modules/index.js | 3 + .../divi/scripts/builder-bundle.min.js | 1 + .../divi/scripts/frontend-bundle.min.js | 1 + .../includes/divi/scripts/frontend.js | 3 + .../includes/divi/styles/style-dbp.min.css | 0 .../includes/divi/styles/style.min.css | 0 .../divi5/build/ssa-booking-module.js | 2 + .../divi5/module/SsaBookingModule.php | 151 + .../divi5/module/conversion-outline.js | 68 + .../divi5/module/conversion-outline.json | 46 + .../includes/divi5/module/module.json | 50 + .../includes/divi5/server/Modules.php | 33 + .../divi5/visual-builder/SSABookingModule.jsx | 100 + .../includes/divi5/visual-builder/index.js | 32 + .../divi5/visual-builder/settings-content.js | 51 + .../includes/divi5/webpack.config.js | 39 + .../includes/elementor/widgets/booking.php | 700 ++ .../widgets/upcoming-appointments.php | 443 + .../assets/css/health-check.css | 271 + .../assets/javascript/health-check.js | 296 + .../health-check-troubleshooting-mode.php | 1087 ++ .../lib/td-health-check/changelog.txt | 120 + .../lib/td-health-check/health-check.php | 63 + .../class-health-check-auto-updates.php | 531 + .../class-health-check-debug-data.php | 843 ++ .../class-health-check-files-integrity.php | 183 + .../includes/class-health-check-loopback.php | 323 + .../class-health-check-mail-check.php | 122 + .../class-health-check-site-status.php | 869 ++ .../class-health-check-troubleshoot.php | 320 + .../includes/class-health-check-wp-cron.php | 100 + .../includes/class-health-check.php | 435 + .../td-health-check/modals/backup-warning.php | 45 + .../lib/td-health-check/modals/diff.php | 9 + .../modals/js-result-warnings.php | 8 + .../lib/td-health-check/pages/debug-data.php | 222 + .../lib/td-health-check/pages/phpinfo.php | 55 + .../lib/td-health-check/pages/site-status.php | 118 + .../lib/td-health-check/pages/tools.php | 58 + .../td-health-check/pages/troubleshoot.php | 38 + .../includes/lib/td-health-check/readme.txt | 55 + .../lib/td-health-check/uninstall.php | 40 + .../lib/td-util/class-td-api-model.php | 500 + .../td-util/class-td-async-action-model.php | 454 + .../lib/td-util/class-td-db-model.php | 1328 +++ .../lib/td-util/class-td-hooks-model.php | 200 + .../includes/lib/td-util/class-td-model.php | 380 + .../includes/lib/td-util/td-util-init.php | 15 + .../lib/wp-cli/wp-config-transformer/LICENSE | 21 + .../src/WPConfigTransformer.php | 357 + .../google/google/apiclient/src/aliases.php | 0 .../guzzlehttp/guzzle/src/functions.php | 0 .../promises/src/functions_include.php | 0 .../guzzlehttp/psr7/src/functions_include.php | 0 .../languages/admin-app-translations.php | 2305 ++++ .../booking-app-new-translations.php | 223 + .../languages/booking-app-translations.php | 157 + .../simply-schedule-appointments/readme.txt | 309 + .../simply-schedule-appointments.php | 937 ++ .../templates/admin-app/custom.css | 6 + .../templates/booking-app/custom.css | 6 + .../templates/calendar-events/customer.php | 33 + .../templates/calendar-events/group-admin.php | 25 + .../calendar-events/group-shared.php | 25 + .../calendar-events/individual-admin.php | 28 + .../calendar-events/individual-shared.php | 28 + .../templates/customer/past-appointments.php | 53 + .../customer/upcoming-appointments.php | 196 + ...dashboard-upcoming-appointments-widget.php | 106 + .../admin-dashboard-appointments-content.php | 174 + .../user-account-booking-iframes.php | 25 + .../user-account-past-appointments-filter.php | 91 + .../user-account-past-appointments-table.php | 16 + ...er-account-upcoming-appointments-table.php | 17 + .../email/text/booked-customer.php | 39 + .../notifications/email/text/booked-staff.php | 35 + .../email/text/canceled-customer.php | 21 + .../email/text/canceled-staff.php | 28 + .../templates/ssa-logs/revisions-meta.php | 74 + .../templates/ssa-logs/revisions.php | 73 + .../vendor/autoload.php | 22 + .../vendor/composer/ClassLoader.php | 579 + .../vendor/composer/InstalledVersions.php | 396 + .../vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 17 + .../vendor/composer/autoload_files.php | 19 + .../vendor/composer/autoload_namespaces.php | 10 + .../vendor/composer/autoload_psr4.php | 15 + .../vendor/composer/autoload_real.php | 50 + .../vendor/composer/autoload_static.php | 98 + .../vendor/composer/installed.json | 637 ++ .../vendor/composer/installed.php | 95 + .../vendor/composer/platform_check.php | 25 + .../vendor/league/period/LICENSE | 20 + .../vendor/league/period/autoload.php | 18 + .../vendor/league/period/phpstan.neon | 37 + .../league/period/src/Chart/AffixLabel.php | 121 + .../vendor/league/period/src/Chart/Chart.php | 25 + .../league/period/src/Chart/ConsoleOutput.php | 124 + .../vendor/league/period/src/Chart/Data.php | 77 + .../league/period/src/Chart/Dataset.php | 215 + .../league/period/src/Chart/DecimalNumber.php | 92 + .../league/period/src/Chart/GanttChart.php | 122 + .../period/src/Chart/GanttChartConfig.php | 516 + .../period/src/Chart/LabelGenerator.php | 29 + .../league/period/src/Chart/LatinLetter.php | 100 + .../vendor/league/period/src/Chart/Output.php | 40 + .../league/period/src/Chart/ReverseLabel.php | 53 + .../league/period/src/Chart/RomanNumber.php | 171 + .../vendor/league/period/src/Datepoint.php | 474 + .../vendor/league/period/src/Duration.php | 435 + .../vendor/league/period/src/Exception.php | 25 + .../vendor/league/period/src/InvalidIndex.php | 25 + .../vendor/league/period/src/Period.php | 1299 +++ .../vendor/league/period/src/Sequence.php | 727 ++ .../vendor/league/period/src/functions.php | 374 + .../league/period/src/functions_include.php | 16 + .../deprecation-contracts/CHANGELOG.md | 5 + .../symfony/deprecation-contracts/LICENSE | 19 + .../deprecation-contracts/function.php | 27 + .../vendor/symfony/polyfill-ctype/Ctype.php | 232 + .../vendor/symfony/polyfill-ctype/LICENSE | 19 + .../symfony/polyfill-ctype/bootstrap.php | 50 + .../symfony/polyfill-ctype/bootstrap80.php | 46 + .../vendor/symfony/polyfill-mbstring/LICENSE | 19 + .../symfony/polyfill-mbstring/Mbstring.php | 1045 ++ .../Resources/unidata/caseFolding.php | 119 + .../Resources/unidata/lowerCase.php | 1397 +++ .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1489 +++ .../symfony/polyfill-mbstring/bootstrap.php | 172 + .../symfony/polyfill-mbstring/bootstrap80.php | 167 + .../vendor/symfony/polyfill-php80/LICENSE | 19 + .../vendor/symfony/polyfill-php80/Php80.php | 115 + .../symfony/polyfill-php80/PhpToken.php | 106 + .../Resources/stubs/Attribute.php | 31 + .../Resources/stubs/PhpToken.php | 16 + .../Resources/stubs/Stringable.php | 20 + .../Resources/stubs/UnhandledMatchError.php | 16 + .../Resources/stubs/ValueError.php | 16 + .../symfony/polyfill-php80/bootstrap.php | 42 + .../vendor/symfony/polyfill-php81/LICENSE | 19 + .../vendor/symfony/polyfill-php81/Php81.php | 37 + .../Resources/stubs/CURLStringFile.php | 51 + .../Resources/stubs/ReturnTypeWillChange.php | 20 + .../symfony/polyfill-php81/bootstrap.php | 28 + .../vendor/twig/twig/CHANGELOG | 293 + .../vendor/twig/twig/LICENSE | 27 + .../vendor/twig/twig/README.rst | 23 + .../twig/twig/src/Attribute/YieldReady.php | 20 + .../twig/twig/src/Cache/CacheInterface.php | 46 + .../vendor/twig/twig/src/Cache/ChainCache.php | 81 + .../twig/twig/src/Cache/FilesystemCache.php | 87 + .../vendor/twig/twig/src/Cache/NullCache.php | 38 + .../src/Cache/ReadOnlyFilesystemCache.php | 25 + .../vendor/twig/twig/src/Compiler.php | 258 + .../vendor/twig/twig/src/Environment.php | 878 ++ .../vendor/twig/twig/src/Error/Error.php | 227 + .../twig/twig/src/Error/LoaderError.php | 21 + .../twig/twig/src/Error/RuntimeError.php | 22 + .../twig/twig/src/Error/SyntaxError.php | 46 + .../vendor/twig/twig/src/ExpressionParser.php | 852 ++ .../twig/src/Extension/AbstractExtension.php | 45 + .../twig/twig/src/Extension/CoreExtension.php | 1946 ++++ .../twig/src/Extension/DebugExtension.php | 64 + .../twig/src/Extension/EscaperExtension.php | 199 + .../twig/src/Extension/ExtensionInterface.php | 75 + .../twig/src/Extension/GlobalsInterface.php | 28 + .../twig/src/Extension/OptimizerExtension.php | 29 + .../twig/src/Extension/ProfilerExtension.php | 52 + .../Extension/RuntimeExtensionInterface.php | 19 + .../twig/src/Extension/SandboxExtension.php | 182 + .../twig/src/Extension/StagingExtension.php | 100 + .../src/Extension/StringLoaderExtension.php | 41 + .../src/Extension/YieldNotReadyExtension.php | 32 + .../vendor/twig/twig/src/ExtensionSet.php | 481 + .../src/FileExtensionEscapingStrategy.php | 60 + .../vendor/twig/twig/src/Lexer.php | 519 + .../twig/twig/src/Loader/ArrayLoader.php | 77 + .../twig/twig/src/Loader/ChainLoader.php | 119 + .../twig/twig/src/Loader/FilesystemLoader.php | 283 + .../twig/twig/src/Loader/LoaderInterface.php | 49 + .../vendor/twig/twig/src/Markup.php | 52 + .../twig/twig/src/Node/AutoEscapeNode.php | 40 + .../vendor/twig/twig/src/Node/BlockNode.php | 47 + .../twig/twig/src/Node/BlockReferenceNode.php | 38 + .../vendor/twig/twig/src/Node/BodyNode.php | 24 + .../vendor/twig/twig/src/Node/CaptureNode.php | 57 + .../twig/src/Node/CheckSecurityCallNode.php | 30 + .../twig/twig/src/Node/CheckSecurityNode.php | 85 + .../twig/twig/src/Node/CheckToStringNode.php | 47 + .../twig/twig/src/Node/DeprecatedNode.php | 73 + .../vendor/twig/twig/src/Node/DoNode.php | 40 + .../vendor/twig/twig/src/Node/EmbedNode.php | 50 + .../Node/Expression/AbstractExpression.php | 28 + .../src/Node/Expression/ArrayExpression.php | 135 + .../Expression/ArrowFunctionExpression.php | 64 + .../Node/Expression/AssignNameExpression.php | 27 + .../Node/Expression/Binary/AbstractBinary.php | 42 + .../src/Node/Expression/Binary/AddBinary.php | 23 + .../src/Node/Expression/Binary/AndBinary.php | 23 + .../Expression/Binary/BitwiseAndBinary.php | 23 + .../Expression/Binary/BitwiseOrBinary.php | 23 + .../Expression/Binary/BitwiseXorBinary.php | 23 + .../Node/Expression/Binary/ConcatBinary.php | 23 + .../src/Node/Expression/Binary/DivBinary.php | 23 + .../Node/Expression/Binary/EndsWithBinary.php | 35 + .../Node/Expression/Binary/EqualBinary.php | 39 + .../Node/Expression/Binary/FloorDivBinary.php | 29 + .../Node/Expression/Binary/GreaterBinary.php | 39 + .../Expression/Binary/GreaterEqualBinary.php | 39 + .../Node/Expression/Binary/HasEveryBinary.php | 33 + .../Node/Expression/Binary/HasSomeBinary.php | 33 + .../src/Node/Expression/Binary/InBinary.php | 33 + .../src/Node/Expression/Binary/LessBinary.php | 39 + .../Expression/Binary/LessEqualBinary.php | 39 + .../Node/Expression/Binary/MatchesBinary.php | 33 + .../src/Node/Expression/Binary/ModBinary.php | 23 + .../src/Node/Expression/Binary/MulBinary.php | 23 + .../Node/Expression/Binary/NotEqualBinary.php | 39 + .../Node/Expression/Binary/NotInBinary.php | 33 + .../src/Node/Expression/Binary/OrBinary.php | 23 + .../Node/Expression/Binary/PowerBinary.php | 22 + .../Node/Expression/Binary/RangeBinary.php | 33 + .../Expression/Binary/SpaceshipBinary.php | 22 + .../Expression/Binary/StartsWithBinary.php | 35 + .../src/Node/Expression/Binary/SubBinary.php | 23 + .../Expression/BlockReferenceExpression.php | 87 + .../src/Node/Expression/CallExpression.php | 304 + .../Node/Expression/ConditionalExpression.php | 45 + .../Node/Expression/ConstantExpression.php | 31 + .../Node/Expression/Filter/DefaultFilter.php | 52 + .../src/Node/Expression/Filter/RawFilter.php | 40 + .../src/Node/Expression/FilterExpression.php | 50 + .../Node/Expression/FunctionExpression.php | 43 + .../src/Node/Expression/GetAttrExpression.php | 110 + .../twig/src/Node/Expression/InlinePrint.php | 34 + .../Node/Expression/MethodCallExpression.php | 64 + .../src/Node/Expression/NameExpression.php | 107 + .../Expression/NullCoalesceExpression.php | 60 + .../src/Node/Expression/ParentExpression.php | 46 + .../Node/Expression/TempNameExpression.php | 31 + .../src/Node/Expression/Test/ConstantTest.php | 49 + .../src/Node/Expression/Test/DefinedTest.php | 74 + .../Node/Expression/Test/DivisiblebyTest.php | 36 + .../src/Node/Expression/Test/EvenTest.php | 35 + .../src/Node/Expression/Test/NullTest.php | 34 + .../twig/src/Node/Expression/Test/OddTest.php | 35 + .../src/Node/Expression/Test/SameasTest.php | 34 + .../src/Node/Expression/TestExpression.php | 39 + .../Node/Expression/Unary/AbstractUnary.php | 34 + .../src/Node/Expression/Unary/NegUnary.php | 23 + .../src/Node/Expression/Unary/NotUnary.php | 23 + .../src/Node/Expression/Unary/PosUnary.php | 23 + .../Node/Expression/VariadicExpression.php | 24 + .../vendor/twig/twig/src/Node/FlushNode.php | 37 + .../vendor/twig/twig/src/Node/ForLoopNode.php | 51 + .../vendor/twig/twig/src/Node/ForNode.php | 109 + .../vendor/twig/twig/src/Node/IfNode.php | 75 + .../vendor/twig/twig/src/Node/ImportNode.php | 65 + .../vendor/twig/twig/src/Node/IncludeNode.php | 110 + .../vendor/twig/twig/src/Node/MacroNode.php | 99 + .../vendor/twig/twig/src/Node/ModuleNode.php | 500 + .../twig/twig/src/Node/NameDeprecation.php | 46 + .../vendor/twig/twig/src/Node/Node.php | 237 + .../twig/src/Node/NodeCaptureInterface.php | 21 + .../twig/src/Node/NodeOutputInterface.php | 21 + .../vendor/twig/twig/src/Node/PrintNode.php | 44 + .../vendor/twig/twig/src/Node/SandboxNode.php | 54 + .../vendor/twig/twig/src/Node/SetNode.php | 96 + .../vendor/twig/twig/src/Node/TextNode.php | 41 + .../vendor/twig/twig/src/Node/WithNode.php | 72 + .../vendor/twig/twig/src/NodeTraverser.php | 76 + .../src/NodeVisitor/AbstractNodeVisitor.php | 49 + .../src/NodeVisitor/EscaperNodeVisitor.php | 204 + .../MacroAutoImportNodeVisitor.php | 74 + .../src/NodeVisitor/NodeVisitorInterface.php | 46 + .../src/NodeVisitor/OptimizerNodeVisitor.php | 247 + .../NodeVisitor/SafeAnalysisNodeVisitor.php | 160 + .../src/NodeVisitor/SandboxNodeVisitor.php | 152 + .../NodeVisitor/YieldNotReadyNodeVisitor.php | 60 + .../vendor/twig/twig/src/Parser.php | 352 + .../twig/src/Profiler/Dumper/BaseDumper.php | 63 + .../src/Profiler/Dumper/BlackfireDumper.php | 72 + .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 + .../twig/src/Profiler/Dumper/TextDumper.php | 35 + .../src/Profiler/Node/EnterProfileNode.php | 44 + .../src/Profiler/Node/LeaveProfileNode.php | 38 + .../NodeVisitor/ProfilerNodeVisitor.php | 70 + .../vendor/twig/twig/src/Profiler/Profile.php | 181 + .../vendor/twig/twig/src/Resources/core.php | 541 + .../vendor/twig/twig/src/Resources/debug.php | 25 + .../twig/twig/src/Resources/escaper.php | 51 + .../twig/twig/src/Resources/string_loader.php | 26 + .../twig/twig/src/Runtime/EscaperRuntime.php | 329 + .../RuntimeLoader/ContainerRuntimeLoader.php | 37 + .../RuntimeLoader/FactoryRuntimeLoader.php | 41 + .../RuntimeLoader/RuntimeLoaderInterface.php | 27 + .../twig/twig/src/Sandbox/SecurityError.php | 23 + .../Sandbox/SecurityNotAllowedFilterError.php | 33 + .../SecurityNotAllowedFunctionError.php | 33 + .../Sandbox/SecurityNotAllowedMethodError.php | 40 + .../SecurityNotAllowedPropertyError.php | 40 + .../Sandbox/SecurityNotAllowedTagError.php | 33 + .../twig/twig/src/Sandbox/SecurityPolicy.php | 124 + .../src/Sandbox/SecurityPolicyInterface.php | 45 + .../src/Sandbox/SourcePolicyInterface.php | 24 + .../vendor/twig/twig/src/Source.php | 51 + .../vendor/twig/twig/src/Template.php | 505 + .../vendor/twig/twig/src/TemplateWrapper.php | 93 + .../twig/src/Test/IntegrationTestCase.php | 262 + .../twig/twig/src/Test/NodeTestCase.php | 74 + .../vendor/twig/twig/src/Token.php | 184 + .../src/TokenParser/AbstractTokenParser.php | 32 + .../twig/src/TokenParser/ApplyTokenParser.php | 60 + .../src/TokenParser/AutoEscapeTokenParser.php | 58 + .../twig/src/TokenParser/BlockTokenParser.php | 78 + .../src/TokenParser/DeprecatedTokenParser.php | 66 + .../twig/src/TokenParser/DoTokenParser.php | 38 + .../twig/src/TokenParser/EmbedTokenParser.php | 73 + .../src/TokenParser/ExtendsTokenParser.php | 52 + .../twig/src/TokenParser/FlushTokenParser.php | 38 + .../twig/src/TokenParser/ForTokenParser.php | 78 + .../twig/src/TokenParser/FromTokenParser.php | 66 + .../twig/src/TokenParser/IfTokenParser.php | 89 + .../src/TokenParser/ImportTokenParser.php | 44 + .../src/TokenParser/IncludeTokenParser.php | 69 + .../twig/src/TokenParser/MacroTokenParser.php | 66 + .../src/TokenParser/SandboxTokenParser.php | 66 + .../twig/src/TokenParser/SetTokenParser.php | 73 + .../src/TokenParser/TokenParserInterface.php | 46 + .../twig/src/TokenParser/UseTokenParser.php | 73 + .../twig/src/TokenParser/WithTokenParser.php | 56 + .../vendor/twig/twig/src/TokenStream.php | 130 + .../vendor/twig/twig/src/TwigFilter.php | 146 + .../vendor/twig/twig/src/TwigFunction.php | 134 + .../vendor/twig/twig/src/TwigTest.php | 106 + .../twig/src/Util/DeprecationCollector.php | 79 + .../twig/twig/src/Util/ReflectionCallable.php | 88 + .../twig/src/Util/TemplateDirIterator.php | 36 + .../action-scheduler/action-scheduler.php | 70 + .../action-scheduler/changelog.txt | 200 + .../classes/ActionScheduler_ActionClaim.php | 45 + .../classes/ActionScheduler_ActionFactory.php | 378 + .../classes/ActionScheduler_AdminView.php | 311 + ...tionScheduler_AsyncRequest_QueueRunner.php | 93 + .../classes/ActionScheduler_Compatibility.php | 111 + .../ActionScheduler_DataController.php | 210 + .../classes/ActionScheduler_DateTime.php | 79 + .../classes/ActionScheduler_Exception.php | 11 + .../ActionScheduler_FatalErrorMonitor.php | 98 + ...ActionScheduler_InvalidActionException.php | 47 + .../classes/ActionScheduler_ListTable.php | 675 ++ .../classes/ActionScheduler_LogEntry.php | 78 + .../classes/ActionScheduler_NullLogEntry.php | 18 + .../classes/ActionScheduler_OptionLock.php | 136 + .../classes/ActionScheduler_QueueCleaner.php | 254 + .../classes/ActionScheduler_QueueRunner.php | 254 + ...tionScheduler_RecurringActionScheduler.php | 81 + .../ActionScheduler_SystemInformation.php | 93 + .../classes/ActionScheduler_Versions.php | 151 + .../ActionScheduler_WPCommentCleaner.php | 133 + .../ActionScheduler_wcSystemStatus.php | 165 + .../classes/WP_CLI/Action/Cancel_Command.php | 120 + .../classes/WP_CLI/Action/Create_Command.php | 153 + .../classes/WP_CLI/Action/Delete_Command.php | 108 + .../WP_CLI/Action/Generate_Command.php | 121 + .../classes/WP_CLI/Action/Get_Command.php | 75 + .../classes/WP_CLI/Action/List_Command.php | 133 + .../classes/WP_CLI/Action/Next_Command.php | 71 + .../classes/WP_CLI/Action/Run_Command.php | 194 + .../ActionScheduler_WPCLI_Clean_Command.php | 123 + .../ActionScheduler_WPCLI_QueueRunner.php | 195 + ...ctionScheduler_WPCLI_Scheduler_command.php | 202 + .../classes/WP_CLI/Action_Command.php | 353 + .../classes/WP_CLI/Migration_Command.php | 190 + .../classes/WP_CLI/ProgressBar.php | 139 + .../classes/WP_CLI/System_Command.php | 282 + .../classes/abstracts/ActionScheduler.php | 403 + .../ActionScheduler_Abstract_ListTable.php | 797 ++ .../ActionScheduler_Abstract_QueueRunner.php | 384 + ...onScheduler_Abstract_RecurringSchedule.php | 112 + .../ActionScheduler_Abstract_Schedule.php | 89 + .../ActionScheduler_Abstract_Schema.php | 187 + .../abstracts/ActionScheduler_Lock.php | 74 + .../abstracts/ActionScheduler_Logger.php | 258 + .../abstracts/ActionScheduler_Store.php | 506 + .../ActionScheduler_TimezoneHelper.php | 162 + .../ActionScheduler_WPCLI_Command.php | 83 + .../actions/ActionScheduler_Action.php | 191 + .../ActionScheduler_CanceledAction.php | 25 + .../ActionScheduler_FinishedAction.php | 21 + .../actions/ActionScheduler_NullAction.php | 25 + .../data-stores/ActionScheduler_DBLogger.php | 154 + .../data-stores/ActionScheduler_DBStore.php | 1342 +++ .../ActionScheduler_HybridStore.php | 460 + .../ActionScheduler_wpCommentLogger.php | 282 + .../ActionScheduler_wpPostStore.php | 1105 ++ ...eduler_wpPostStore_PostStatusRegistrar.php | 63 + ...cheduler_wpPostStore_PostTypeRegistrar.php | 53 + ...cheduler_wpPostStore_TaxonomyRegistrar.php | 33 + .../classes/migration/ActionMigrator.php | 126 + .../ActionScheduler_DBStoreMigrator.php | 52 + .../classes/migration/BatchFetcher.php | 95 + .../classes/migration/Config.php | 196 + .../classes/migration/Controller.php | 245 + .../migration/DryRun_ActionMigrator.php | 28 + .../classes/migration/DryRun_LogMigrator.php | 23 + .../classes/migration/LogMigrator.php | 58 + .../classes/migration/Runner.php | 171 + .../classes/migration/Scheduler.php | 128 + .../ActionScheduler_CanceledSchedule.php | 63 + .../ActionScheduler_CronSchedule.php | 111 + .../ActionScheduler_IntervalSchedule.php | 90 + .../ActionScheduler_NullSchedule.php | 39 + .../schedules/ActionScheduler_Schedule.php | 22 + .../ActionScheduler_SimpleSchedule.php | 81 + .../schema/ActionScheduler_LoggerSchema.php | 101 + .../schema/ActionScheduler_StoreSchema.php | 145 + ...eduler_Abstract_QueueRunner_Deprecated.php | 27 + .../ActionScheduler_AdminView_Deprecated.php | 153 + .../ActionScheduler_Schedule_Deprecated.php | 29 + .../ActionScheduler_Store_Deprecated.php | 50 + .../action-scheduler/deprecated/functions.php | 129 + .../action-scheduler/functions.php | 513 + .../action-scheduler/lib/WP_Async_Request.php | 188 + .../lib/cron-expression/CronExpression.php | 318 + .../CronExpression_AbstractField.php | 100 + .../CronExpression_DayOfMonthField.php | 110 + .../CronExpression_DayOfWeekField.php | 124 + .../CronExpression_FieldFactory.php | 55 + .../CronExpression_FieldInterface.php | 39 + .../CronExpression_HoursField.php | 47 + .../CronExpression_MinutesField.php | 39 + .../CronExpression_MonthField.php | 55 + .../CronExpression_YearField.php | 43 + .../lib/cron-expression/LICENSE | 19 + .../woocommerce/action-scheduler/license.txt | 674 ++ .../woocommerce/action-scheduler/readme.txt | 244 + 751 files changed, 130635 insertions(+), 16 deletions(-) create mode 100644 wp-content/plugins/simply-schedule-appointments/CHANGELOG.md create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/babel.config.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/favicon.ico create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/index.html create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/app.css create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/chunk-vendors.css create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-eyes-closed.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-down.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-up.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sleeping.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-standing.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step1.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step10.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step2.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step3.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step4.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step5.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step6.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step7.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step8.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step9.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/icon-face.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-paypal.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-ssa.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-stripe.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-woocommerce.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/no-appointments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-booking-flows.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-info.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-upsell.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-new-booking-app.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/review-plugin-card-congrats.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-advanced-scheduling.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-blackout.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-calendar-events.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-general.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-google-calendar.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-locations.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-mailchimp.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-payments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-resources.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-staff.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-styles.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-tracking.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translation.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translations.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webex.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webhooks.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-zoom.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-business.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-plus.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-pro.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-zoom.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-card-payments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-google-calendar.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-business.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-plus.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-pro.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/img/brown-papersq.png create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/app.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/chunk-vendors.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/manifest.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/iframe-inner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/jsconfig.json create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/favicon.ico create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/index.html create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-eyes-closed.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-down.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-up.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sleeping.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-standing.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step1.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step10.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step2.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step3.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step4.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step5.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step6.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step7.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step8.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step9.jpg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/icon-face.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-paypal.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-ssa.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-stripe.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-woocommerce.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/no-appointments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-booking-flows.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-info.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-upsell.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-new-booking-app.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/review-plugin-card-congrats.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-advanced-scheduling.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-blackout.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-calendar-events.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-general.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-google-calendar.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-locations.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-mailchimp.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-payments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-resources.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-sms.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-staff.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-styles.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-tracking.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translation.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translations.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webex.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webhooks.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-zoom.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-business.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-plus.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-pro.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-zoom.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-card-payments.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-google-calendar.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-business.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-plus.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-pro.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/public/static/js/manifest.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/vue.config.js create mode 100644 wp-content/plugins/simply-schedule-appointments/admin-app/yarn.lock create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/block-booking.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/dashboard-upcoming-appointments-widget.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/iframe-inner.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/material-icons.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/roboto-font.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/ssa-gravity-forms-editor-styles.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-account-styles.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-styles.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/ssa-styles.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/unsupported.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/css/upcoming-appointments.css create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.eot create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.ttf create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-bold-webfont.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-bold-webfont.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-medium-webfont.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-medium-webfont.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-regular-webfont.woff create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-regular-webfont.woff2 create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/images/foxes/logo-ssa.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/block-booking.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/block-upcoming-appointments.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/iframe-inner.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/iframe-outer.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/ssa-form-embed.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/ssa-memberpress-account.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/ssa-memberpress.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/ssa-tracking.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/unsupported-min.js create mode 100644 wp-content/plugins/simply-schedule-appointments/assets/js/unsupported.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/babel.config.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/favicon.ico create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/index.html create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/css/app.css create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/css/chunk-vendors.css create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/icons/afternoon.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/icons/evening.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/icons/morning.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/icons/night.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/logo-ssa.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/images/payments/stripe.png create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/js/app.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/js/chunk-vendors.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/dist/static/js/manifest.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/fullscreen-page.php create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/iframe-inner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/page-appointment-edit.php create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/favicon.ico create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/index.html create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/icons/afternoon.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/icons/evening.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/icons/morning.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/icons/night.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/logo-ssa.svg create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/images/payments/stripe.png create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/public/static/js/manifest.js create mode 100644 wp-content/plugins/simply-schedule-appointments/booking-app-new/vue.config.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/beaver-builder/modules/booking/booking.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/beaver-builder/modules/booking/includes/frontend.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/beaver-builder/modules/upcoming-appointments/includes/frontend.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/beaver-builder/modules/upcoming-appointments/upcoming-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-action-scheduler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-advanced-scheduling-availability.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-advanced-scheduling-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-meta-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-object.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-type-label-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-type-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-type-object-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-type-object.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-appointment-types-db.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-async-action-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-block-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-block.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-cache-invalidation.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-cache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-default.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-detective-case.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-external-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-functions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-query.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-schedule-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-availability-schedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-beaver-builder.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-blackout-dates-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-blackout-dates.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-block-booking.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-block-upcoming-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-bootstrap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-cache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-calendar-events-object.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-calendar-events-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-capabilities.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-capacity-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-cli.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-constants.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-csv-exporter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-customer-information.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-customers.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-dashboard-upcoming-appointments-widget.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-db-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-db.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-debug.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-developer-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-divi.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-elementor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-embed-booking-app-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-encryption.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-error-notices.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-exception.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-external-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-external-calendar-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-external-google-calendar-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-filesystem.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-forms.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-gcal-exporter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-google-calendar-client.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-hooks.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-ics-exporter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-locale.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-locales.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-missing.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notices-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notices-data.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notices.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notification-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notifications-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notifications-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-notifications.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-payment-object.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-paypal-ipn-listener.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-period.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-recipient-admin.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-recipient-customer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-recipient-shared.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-recipient-staff.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-recipient.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-resource-group-object-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-revision-meta-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-revision-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-scheduling-max-per-day.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-sequence-factory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-sequence.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-settings-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-settings-global.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-settings-installed.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-shortcodes.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-staff-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-styles-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-styles.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-support-status-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-support-status.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-support.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-templates-api.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-templates.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-translation-settings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-translation.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-twig-extension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-upgrade.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-users.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-utils.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-validation.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-web-meetings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/class-wp-admin.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/SsaDiviModule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/SSADiviBookingModule/SSADiviBookingModule.jsx create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/SSADiviBookingModule/SSADiviBookingModule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/index.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/builder-bundle.min.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend-bundle.min.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style-dbp.min.css create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style.min.css create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/build/ssa-booking-module.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/module/SsaBookingModule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.json create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/module/module.json create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/server/Modules.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/SSABookingModule.jsx create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/index.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/settings-content.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/divi5/webpack.config.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/booking.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/upcoming-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/css/health-check.css create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/javascript/health-check.js create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/mu-plugin/health-check-troubleshooting-mode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/changelog.txt create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/health-check.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-auto-updates.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-debug-data.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-files-integrity.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-loopback.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-mail-check.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-site-status.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-troubleshoot.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-wp-cron.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/backup-warning.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/diff.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/js-result-warnings.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/debug-data.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/phpinfo.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/site-status.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/tools.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/troubleshoot.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/readme.txt create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/uninstall.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-api-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-async-action-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-db-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-hooks-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-model.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/td-util-init.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/src/WPConfigTransformer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/third-party/google/google/apiclient/src/aliases.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/guzzle/src/functions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/promises/src/functions_include.php create mode 100644 wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/psr7/src/functions_include.php create mode 100644 wp-content/plugins/simply-schedule-appointments/languages/admin-app-translations.php create mode 100644 wp-content/plugins/simply-schedule-appointments/languages/booking-app-new-translations.php create mode 100644 wp-content/plugins/simply-schedule-appointments/languages/booking-app-translations.php create mode 100644 wp-content/plugins/simply-schedule-appointments/readme.txt create mode 100644 wp-content/plugins/simply-schedule-appointments/simply-schedule-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/admin-app/custom.css create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/booking-app/custom.css create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/calendar-events/customer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-admin.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-shared.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-admin.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-shared.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/customer/past-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/customer/upcoming-appointments.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/dashboard/dashboard-upcoming-appointments-widget.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/memberpress/admin-dashboard-appointments-content.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-booking-iframes.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-filter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-table.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-upcoming-appointments-table.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-customer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-staff.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-customer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-staff.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions-meta.php create mode 100644 wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/autoload.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/ClassLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/InstalledVersions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_classmap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_files.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_namespaces.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_psr4.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_real.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_static.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.json create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/composer/platform_check.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/autoload.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/phpstan.neon create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/AffixLabel.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Chart.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ConsoleOutput.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Data.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Dataset.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/DecimalNumber.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChart.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChartConfig.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LabelGenerator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LatinLetter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Output.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ReverseLabel.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/RomanNumber.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Datepoint.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Duration.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Exception.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/InvalidIndex.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Period.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Sequence.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions_include.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/function.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Php80.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/PhpToken.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/bootstrap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Php81.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/bootstrap.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/CHANGELOG create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/README.rst create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Attribute/YieldReady.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/CacheInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ChainCache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/FilesystemCache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/NullCache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Compiler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Environment.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/Error.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/LoaderError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/RuntimeError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/SyntaxError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExpressionParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/AbstractExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/CoreExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/DebugExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/EscaperExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ExtensionInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/GlobalsInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/OptimizerExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ProfilerExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/SandboxExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StagingExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StringLoaderExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/YieldNotReadyExtension.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExtensionSet.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/FileExtensionEscapingStrategy.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Lexer.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ArrayLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ChainLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/FilesystemLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/LoaderInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Markup.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/AutoEscapeNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockReferenceNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BodyNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CaptureNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityCallNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckToStringNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DeprecatedNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DoNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/EmbedNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AbstractExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrayExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/CallExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConstantExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FilterExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FunctionExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/InlinePrint.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NameExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ParentExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TempNameExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/NullTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/OddTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TestExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/VariadicExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/FlushNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForLoopNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IfNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ImportNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IncludeNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/MacroNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ModuleNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NameDeprecation.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Node.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeCaptureInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeOutputInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/PrintNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SandboxNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SetNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/TextNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/WithNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeTraverser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Parser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Profile.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/core.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/debug.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/escaper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/string_loader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Runtime/EscaperRuntime.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicy.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Source.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Template.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TemplateWrapper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/IntegrationTestCase.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/NodeTestCase.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Token.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/BlockTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DoTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FlushTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ForTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FromTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IfTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ImportTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/MacroTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SetTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/TokenParserInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/UseTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/WithTokenParser.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenStream.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFilter.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFunction.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigTest.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/DeprecationCollector.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/ReflectionCallable.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/TemplateDirIterator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/action-scheduler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/changelog.txt create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ListTable.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_OptionLock.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_SystemInformation.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Cancel_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_NullAction.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Config.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Controller.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/DryRun_LogMigrator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/LogMigrator.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Runner.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Scheduler.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/functions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/functions.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/WP_Async_Request.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.php create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSE create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/license.txt create mode 100644 wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/readme.txt diff --git a/.htaccess b/.htaccess index 77e1e87..2130d24 100644 --- a/.htaccess +++ b/.htaccess @@ -1,10 +1,15 @@ # BEGIN WordPress +# The directives (lines) between "BEGIN WordPress" and "END WordPress" are +# dynamically generated, and should only be modified via WordPress filters. +# Any changes to the directives between these markers will be overwritten. RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] + # END WordPress diff --git a/wp-content/mu-plugins/coaching-mvp.php b/wp-content/mu-plugins/coaching-mvp.php index 7f9015d..b939384 100644 --- a/wp-content/mu-plugins/coaching-mvp.php +++ b/wp-content/mu-plugins/coaching-mvp.php @@ -8,7 +8,7 @@ if (!defined('ABSPATH')) { exit; } -const COACHING_MVP_TEMPLATE_VERSION = '2.0.21'; +const COACHING_MVP_TEMPLATE_VERSION = '2.0.22'; function coaching_mvp_service_catalog() { return [ @@ -481,6 +481,19 @@ body.coaching-mvp-active.archive .wp-block-query .entry-content.alignfull.wp-blo } .coach-grid-2, .coach-booking-layout { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); } +.coach-ssa-card { + padding: 0; + overflow: hidden; +} +.coach-ssa-card iframe.ssa_booking_iframe { + width: 100%; + min-height: 760px; + border: 0; + display: block; +} +.coach-ssa-fallback { + padding: 1.35rem; +} .coach-grid-3, .coach-card-grid, .coach-testimonial-grid, @@ -5181,21 +5194,11 @@ function coaching_mvp_booking_content() {

Book a session

Book a 30-minute meeting

-

Choose a time directly in the calendar below. Once confirmed, you will receive the meeting details from Calendly.

-

This Calendly link is currently a placeholder and can be replaced with your own scheduling link.

- -
-
-
-
-
-

What happens next

After you pick a slot, Calendly will confirm the booking and send the meeting details automatically.

-

Meeting format

This page is now set up for a direct 30-minute Calendly booking flow instead of the internal WordPress request form.

-

Need something else?

If you want to ask a question before booking, you can still use the contact page.

Go to contact

-
-
- - +

Choose a time directly in the scheduler below. Once confirmed, you will receive a booking confirmation by email.

+

Booking is now handled directly on this WordPress site through Simply Schedule Appointments.

+ +[coaching_ssa_booking] +
HTML; @@ -5570,6 +5573,134 @@ function coaching_mvp_handle_forms() { } add_action('template_redirect', 'coaching_mvp_handle_forms', 1); +function coaching_mvp_ssa_default_appointment_type_slug() { + return '30-minute-meeting'; +} + +function coaching_mvp_ssa_default_appointment_type_data() { + return [ + 'author_id' => 1, + 'title' => '30-Minute Meeting', + 'slug' => coaching_mvp_ssa_default_appointment_type_slug(), + 'description' => 'A focused 30-minute coaching conversation.', + 'instructions' => '', + 'label' => 'light-green', + 'label_id' => 1, + 'capacity_type' => 'individual', + 'capacity' => 1, + 'buffer_before' => 0, + 'duration' => 30, + 'buffer_after' => 0, + 'min_booking_notice' => 0, + 'max_booking_notice' => 0, + 'availability_type' => 'available_blocks', + 'availability' => [ + 'Monday' => [['time_start' => '09:00:00', 'time_end' => '17:00:00']], + 'Tuesday' => [['time_start' => '09:00:00', 'time_end' => '17:00:00']], + 'Wednesday' => [['time_start' => '09:00:00', 'time_end' => '17:00:00']], + 'Thursday' => [['time_start' => '09:00:00', 'time_end' => '17:00:00']], + 'Friday' => [['time_start' => '09:00:00', 'time_end' => '17:00:00']], + 'Saturday' => [], + 'Sunday' => [], + ], + 'availability_increment' => 30, + 'timezone_style' => 'localized', + 'booking_layout' => 'week', + 'customer_information' => [], + 'custom_customer_information' => [ + [ + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'face', + 'values' => '', + ], + [ + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'email', + 'values' => '', + ], + ], + 'notifications' => [ + 'fields' => [ + ['field' => 'admin', 'send' => true], + ['field' => 'customer', 'send' => true], + ], + 'notifications_opt_in' => [ + 'enabled' => false, + 'label' => 'Receive notifications', + 'description' => 'Check this box to receive appointment notifications.', + ], + ], + 'status' => 'publish', + 'display_order' => 1, + ]; +} + +function coaching_mvp_get_ssa_appointment_type_by_slug($slug) { + if (!function_exists('ssa') || !isset(ssa()->appointment_type_model)) { + return []; + } + + $appointment_types = ssa()->appointment_type_model->query([ + 'number' => -1, + 'status' => 'publish', + ]); + + foreach ($appointment_types as $appointment_type) { + if (($appointment_type['slug'] ?? '') === $slug) { + return $appointment_type; + } + } + + return []; +} + +function coaching_mvp_ensure_ssa_booking_setup() { + if (!function_exists('ssa') || !isset(ssa()->appointment_type_model)) { + return; + } + + $slug = coaching_mvp_ssa_default_appointment_type_slug(); + if (coaching_mvp_get_ssa_appointment_type_by_slug($slug)) { + return; + } + + ssa()->appointment_type_model->insert(coaching_mvp_ssa_default_appointment_type_data()); +} +add_action('init', 'coaching_mvp_ensure_ssa_booking_setup', 45); + +function coaching_mvp_ssa_booking_shortcode() { + $slug = coaching_mvp_ssa_default_appointment_type_slug(); + $appointment_type = coaching_mvp_get_ssa_appointment_type_by_slug($slug); + + ob_start(); + ?> +
+
+

Booking will be available here shortly.

Please use the contact page if you need help before the scheduler is configured.

Go to contact

'; + } + ?> +
+
+

What happens next

After you choose a slot, the site will confirm the booking and send the details by email.

+

Meeting format

This page now uses a native WordPress booking flow powered by Simply Schedule Appointments.

+

Need something else?

If you want to ask a question before booking, you can still use the contact page.

Go to contact

+
+ + characters displayed as text in SSA's appointment details and reschedule screen +- Bug-Fix: allow translating the placeholder of the phone input +- Fix undefined index notice (stripe_payment) +- Changed id var to str + +### Features and Improvements + +- Gravity Forms Integration: Allow selecting booking flow in the editor + +## SSA-VERSION-PREFIX.6.5.14 - 2023-07-14 + +### Fixes + +- Fix deprecated update_metas() function + +## SSA-VERSION-PREFIX.6.5.13 - 2023-07-04 + +### Fixes + +- Fix availability bug on appointments with multiple team members + +### Features and Improvements + +- Improve WP block editor to allow booking flow customizations +- +- Associate gravity form bookings with appropriate WP user +- + +## SSA-VERSION-PREFIX.6.5.12 - 2023-06-26 + +### Fixes + +- Fixed: unwanted redirects after booking due to conflict with Jevelin theme + +### Features and Improvements + +- Add filters for excluding Gravity Forms fields of certain type or certain id +- +- Add CSS classes to admin app for more styling customization +- + +## SSA-VERSION-PREFIX.6.5.11 - 2023-06-21 + +### Fixes + +- Fixed issue loading booking app when using availability window + +### Features and Improvements + +- Gravity Forms integration now allows filtering by appointment type label + +## SSA-VERSION-PREFIX.6.5.9 - 2023-06-15 + +### Fixes + +- Reintroduced deprecated add_meta() function to avoid fatal errors on sites using it +- +- Fixed: iframe Appointment field preview disappears in GravityForms editor +- + +### Features and Improvements + +- Improved internationalization to add context for label string + +## SSA-VERSION-PREFIX.6.4.17 + +- Added: Ability to dynamically export to ICS subscription feed +- Added: Gravity Forms merge tags for time/date formats +- Fixed: iFrame resizing incorrectly within Gravity Forms +- Fixed: Booking form cut off in some themes + +## SSA-VERSION-PREFIX.6.4.16 + +- Added: Admins can now leave a note when canceling an appointment +- Fixed: Edge case where user could accidentally select a much longer duration than intended + +## SSA-VERSION-PREFIX.6.4.15 + +- Fixed: Database issue affecting appointment types on some servers + +## SSA-VERSION-PREFIX.6.4.14 + +- Improved: Performance of Appointment Types and fixed label_ids on databases with low memory limits +- Improved: Added team members to upcoming appointments wp-admin dashboard widget +- Fixed: Formidable forms without AJAX not running SSA script properly + +## SSA-VERSION-PREFIX.6.4.11 + +- Added: Web_meeting_password field to list of notification variables +- Added: Automatically detect/set contrast mode for dark background colors +- Added: Submenu to directly jump to Team management +- Improved: Appointment Booking block UX +- Fixed: Navigating monthly view in some situations +- Fixed: Appointment.payment_status not rendering accurately in notifications +- Fixed: Availability calculations affecting appointment types with capacity 2 and before/after buffers + +## SSA-VERSION-PREFIX.6.4.10 + +- Added: Team submenu to the Appointment menu in wp-admin +- Improved: Handling of Gravity/Formidable forms submitted after a long delay +- Fixed: label_id error affecting some servers +- Fixed: Changing business timezone was not clearing availability cache + +## SSA-VERSION-PREFIX.6.4.6 + +- Fixed: Performance issue on sites with large number of WP users +- Fixed: Stripe payment information not showing up after new Stripe API changes + +## SSA-VERSION-PREFIX.6.4.4 + +- Added: Support for Japanese Yen as a payment method +- Improved: Notifications and Webhooks properly display generated Zoom and Webex meetings +- Improved: Clear appointment information after an appointment type has been updated +- Improved: Warn about conflict with All-In-One Security conflicts +- Improved: Mailchimp integration +- Improved: Text color accessibility +- Improved: Export/Import handling of edge cases +- Fixed: Instructions field label missing in appointment type editor +- Fixed: Embedding with label shortcode breaking Stripe payment return URL +- Fixed: Stripe payment errors in some regions + +## SSA-VERSION-PREFIX.6.4.3 + +- Improved: Filter appointments by label +- Improved: Critical errors are now highlighted in the admin app +- Improved: Formidable Forms conditional logic involving SSA fields +- Fixed: Alignment of pending status in admin app +- Fixed: Handling of id 0 database records on MS SQL Server +- Fixed: Unable to load appointment details in admin app on some appointments booked through Gravity Forms +- Fixed: Stripe compatibility with 2022-11-15 API changes (causing successful payments, but abandoned appointments) +- Fixed: Error with Formidable Forms field values mapping to SSA incorrectly +- Fixed: Conflict with ssa_locale and TranslatePress + +## SSA-VERSION-PREFIX.6.4.2 + +- Improved: Payment details now show on the booking confirmation screen +- Fixed: Error affecting a few users loading appointment types in the admin + +## SSA-VERSION-PREFIX.6.4.1 + +- Improved: Downloading translations also fetch missing strings for easier manual translation +- Fixed: Rescheduling not working on some sites with custom front page + +## SSA-VERSION-PREFIX.6.4.0 + +- Added: Custom labels for managing appointment types +- Added: Admin can now specify a custom page to be used for rescheduling +- Added: Gravity Forms redirects work with new ssa_confirmation shortcode +- Improved: Automatically refresh appointment list in admin app +- Improved: Interface for managing team members +- Improved: Hide team members filter when no team members are found +- Improved: Better handling of Paypal Return to Merchant button +- Fixed: Blue links on iOS Mobile Safari +- Fixed: Some broken "improve this translation" links + +## SSA-VERSION-PREFIX.6.3.0 + +- Added: Webhooks now contain web meeting details +- Added: Calendar Event settings to customize the event that gets added to customer/admin calendars +- Improved: Hid beta features section when none are available +- Improved: Gravity Forms with Stripe Checkout or Paypal handle pending payments better +- Improved: SSA's Gravity Forms field is easier to select when creating your form +- Fixed: Preview mode broken when editing notifications for appointment types with no bookings +- Fixed: Notifications not saving template variables inserted from the dropdown menu + +## SSA-VERSION-PREFIX.6.2.2 + +- Improved: Time-triggered reminders now available in plus +- Improved: Show warning if SSA plugin directory is renamed +- Fixed: 3 misspelled strings of text in admin-app + +## SSA-VERSION-PREFIX.6.2.1 + +- Improved: Calendar styling on mobile Safari browser +- Fixed: Zoom links not generating for appointments with very long customer submissions +- Fixed: Google Calendar sync errors for some Gravity/Formidable Forms customers +- Fixed: Team member associated with appointments they book on behalf of customers + +## SSA-VERSION-PREFIX.6.2.0 + +- Added: Redirect parameter to ssa_booking shortcode +- Improved: SSA Gravity Forms field allows multiple appointment types to be set by admin +- Improved: SSA Gravity Forms field bubbles change event +- Fixed: Google Calendar sync issues on some older PHP environments + +## SSA-VERSION-PREFIX.6.1.2 + +- Improved: Gravity Forms integration supports conditional logic when an appointment time is selected +- Improved: Abandoned appointments can no longer be marked as canceled +- Improved: Translations and support for formal German +- Fixed: Conflict with Thrive Themes and URL for editing appointments + +## SSA-VERSION-PREFIX.6.1.1 + +- Fixed: Dashboard widget showing appointment details to subscriber-level users +- Fixed: Large action scheduler database size +- Fixed: Rescheduled Paypal bookings marked as pending_payment + +## SSA-VERSION-PREFIX.6.1.0 + +- Added: Developer setting to delete SSA data after plugin is deleted +- Added: Ability to search appointments by customer information +- Fixed: Undefined index PHP warning +- Fixed: Sidebar layout/overlap in notification settings screen + +## SSA-VERSION-PREFIX.6.0.4 + +- Added: Formidable Forms support for upload field +- Improved: Canceling appointments will remove associated webex meeting +- Improved: Display of appointments in pending status +- Fixed: Live preview of notification changes in admin app + +## SSA-VERSION-PREFIX.6.0.3 + +- Fixed: Error on databases with limits of 8126 bytes per row +- Fixed: Error on servers that don't support Action Scheduler + +## SSA-VERSION-PREFIX.6.0.2 + +- Fixed: Error preventing new appointment bookings in some environments + +## SSA-VERSION-PREFIX.6.0.1 + +- Added: Shortcode for past appointments +- Improved: WP-Admin dashboard widget matches appointment type label colors and limits to 5 appointments +- Improved: Handling of intermittent Google Calendar connection errors +- Improved: Remove Webex meetings when an appointment is canceled +- Fixed: Stripe bug when using German Formal language +- Fixed: Unable to submit support tickets on some sites + +## SSA-VERSION-PREFIX.6.0.0 + +- Added: WP-Admin dashboard widget for upcoming appointments +- Added: Team member information to webhook payload +- Improved: Updated timezone database +- Improved: Indicate inactive team member status in appointment list +- Improved: Consistency of translatable strings +- Improved: Gravity Forms field now triggers change event when an appointment time is selected +- Improved: Accessibility of notification toggles +- Fixed: Browser not supported error on some (actually) supported browsers +- Fixed: Google Calendar list not displaying properly for some team members +- Fixed: Customer information rendering out of order on appointment confirmation screen + +## SSA-VERSION-PREFIX.5.9.0 + +- Added: Currency code next to prices +- Added: Button to delete unused translations +- Added: Icons to customer information fields +- Improved: Updated Google Material Icons Font +- Improved: Clear availability cache when business timezone is changed +- Improved: Google Calendar now uses the global get_attendees() function for consistency +- Improved: Add whether a customer agreed to SMS reminders in the Appointment Details Page +- Improved: ssa_upcoming_appointments shortcode now displays web meeting URL +- Fixed: Google Holiday calendars didn't exclude any availability +- Fixed: Compatibility with Cloudflare polish and caching plugins that minify javascript +- Fixed: Web Meeting appointment type settings not working in some cases +- Fixed: Phone Field Dropdown shifted content on page + +## SSA-VERSION-PREFIX.5.8.3 + +- Fixed: Elementor global color styles not applying to scheduling widget +- Fixed: Developer jobs when there are no appointments that fit the criteria +- Fixed: Mobile scrolling on some sites +- Fixed: empty duration for Appointment Type error + +## SSA-VERSION-PREFIX.5.8.2 + +- Fixed: Problem with plugin updating on older server environments + +## SSA-VERSION-PREFIX.5.8.1 + +- Improved: Rescheduling interface now shows in the user's language +- Improved: Compatibility with plugins/themes using the Carbon library +- Fixed: Compatibility with The Events Calendar +- Fixed: Database deadlock error on high-traffic sites + +## SSA-VERSION-PREFIX.5.8.0 + +- Added: Appointment.web_meeting_url to notification token list +- Added: Gravity Forms merge tags for ICS and Add to Google Calendar +- Improved: Abandoned appointments can be booked when a payment is received +- Fixed: Country code in phone field +- Fixed: Handling of stripe error to show error message +- Fixed: CSS pseudo-elements not working +- Fixed: Validation issue with SMS notifications and subject field +- Fixed: Cannot modify header information error in ICS file +- Fixed: Possible pending payment status when payments setting is off + +## SSA-VERSION-PREFIX.5.7.9 + +- Fixed: Fatal error affecting PHP 8.1 in certain scenarios +- Improved: Gravity Forms merge tags for ICS and Add to Calendar links +- Fixed: Required payments still enforced after disabling payments module + +## SSA-VERSION-PREFIX.5.7.8 + +- Added: Appointment.payment_status field for email notifications +- Added: Lithuanian translation pack +- Improved: accessibility of telephone validation errors +- Fixed: Validation error when saving profile for some team members +- Fixed: Month names not translated on all booking views + +## SSA-VERSION-PREFIX.5.7.7 + +- Fixed: Incorrect slot already booked error +- Improved: auto-scroll functionality when switching tabs + +## SSA-VERSION-PREFIX.5.7.6 + +- Added: Czech language pack +- Improved: Replaced appointment.start_date variable with appointment.business_start_date and appointment.customer_start_date +- Improved: Security hardening + +## SSA-VERSION-PREFIX.5.7.5 + +- Improved: Language support for Tamil and other RTL languages +- Fixed: Auto-scroll jumpiness on busy pages with elements loading after initial page load + +## SSA-VERSION-PREFIX.5.7.4 + +- Added: Button for team members to Book an Appointment in the admin +- Added: Developer API endpoint for ICS Subscription feed +- Fixed: Error deleting team members +- Fixed: Disable auto-scroll jumpiness in iFrame resizer + +## SSA-VERSION-PREFIX.5.6.1 + +- Added: Icelandic translation +- Fixed: Fatal Error when Appointment ID is not found +- Fixed: Plus sign in pre-populated emails not working +- Fixed: Bulk editing specific start times +- Fixed: PHP namespacing of third party libraries + +## SSA-VERSION-PREFIX.5.6.0 + +- Added: Webex integration +- Improved: SCA support for Stripe +- Improved: Team Members can now deauthorize their Google Calendar account +- Fixed: Rescheduled date/time timezone sometimes incorrect in admin +- Fixed: Zoom authorization redirect error affecting some sites +- Fixed: Gravity Forms phone field not syncing to SSA + +## SSA-VERSION-PREFIX.5.5.2 + +- Added: Twig Template variables for "Add to Calendar" link +- Improved: Google Calendar attendees always include assigned team members + +## SSA-VERSION-PREFIX.5.5.1 + +- Fixed: "setting up" error on some sites + +## SSA-VERSION-PREFIX.5.5.0 + +- Added: web_meeting_url merge tag for Gravity Forms +- Added: ssa_admin shortcode to display SSA management interface on the frontend +- Fixed: Browser auto-fill sometimes breaking phone number validation + +## SSA-VERSION-PREFIX.5.4.7 + +- Fixed: Some symbols getting improperly encoded in custom Google Calendar Events +- Fixed: Deprecated warnings affecting Divi sites running PHP8 + +## SSA-VERSION-PREFIX.5.4.6 + +- Improved: Show error details if submitting a support ticket fails for any reason +- Fixed: Advanced Scheduling Settings still apply to Appointment Types when disabled +- Fixed: SMS Notifications not sending properly when Rescheduling appointments + +## SSA-VERSION-PREFIX.5.4.5 + +- Fixed: Error with trim() function on some customer information fields + +## SSA-VERSION-PREFIX.5.4.4 + +- Improved: Better error messaging when customizing Google Calendar events +- Improved: Recommend relevant documentation when submitting a support ticket +- Fixed: Error affecting Google Calendar Sync + +## SSA-VERSION-PREFIX.5.4.2 + +- Fixed: Some bookings not assigned to team members + +## SSA-VERSION-PREFIX.5.4.1 + +- Added: Google Calendar event customization (beta feature) +- Added: Filter to allow lazy loading of booking app +- Added: Filter to allow hidden Gravity Forms fields to be passed to appointment +- Improved: Independent Availability is now found under Advanced Scheduling Options + +## SSA-VERSION-PREFIX.5.2.3 + +- Added: Show relevant help center guides on the sidebar +- Added: Option for large sites to only export upcoming appointments +- Improved: Show better error message when setting a price below Stripe's minimum requirement +- Fixed: Prevent double-bookings caused by unexpected browser behavior + +## SSA-VERSION-PREFIX.5.2.2 + +- Improved: New icons in SSA Settings screen +- Improved: Stripe error handling +- Fixed: Checkboxes showing incorrectly when editing team members assigned to an appointment type +- Fixed: Exception in appointment factory + +## SSA-VERSION-PREFIX.5.2.1 + +- Fixed: Parse error affecting some sites + +## SSA-VERSION-PREFIX.5.2.0 + +- Added: Option to resend out emails for all upcoming appointments +- Improved: Detect and prevent twig syntax errors when editing notifications +- Improved: Error message if your site's REST API is not returning proper JSON +- Improved: Error logging +- Fixed: "Leave without Saving" dialog showing incorrectly +- Fixed: Back button not working when a single date and time is available + +## SSA-VERSION-PREFIX.5.1.1 + +- Improved: dropdown for "Change timezone" in booking app +- Fixed: PHP warning with wp_localize_script on newer PHP versions +- Fixed: Phone number field showing error warning incorrectly +- Fixed: Jumpy scrolling when SSA is embedded in other plugin layouts + +## SSA-VERSION-PREFIX.5.1.0 + +- Added: Team Members can now specify their own web meeting URL +- Improved: Ability to search for languages in translation settings +- Fixed: Team Members not being assigned to some appointments +- Fixed: Incorrect availability calculation with multi-day appointments +- Fixed: Prevent negative appointment durations +- Fixed: Prevent invalid property error + +## SSA-VERSION-PREFIX.5.0.2 + +- Fixed: PHP Warning +- Fixed: Potential fatal error if two copies of SSA are installed + +## SSA-VERSION-PREFIX.5.0.0 + +- Added: Additional date format to better support more countries +- Added: Developer option to manually sync appointments to Google Calendar +- Fixed: Bug affecting Formidable Forms displaying entries containing deleted appointments + +## SSA-VERSION-PREFIX.5.0.0 + +- Added: Gravity Forms merge tags for team members +- Added: Norwegian language pack +- Added: wp-cli command to import SSA code +- Fixed: Incorrect availability for appointment types with multiple-day durations or buffers +- Fixed: Some appointments getting booked with no team member assigned + +## SSA-VERSION-PREFIX.4.9.11 + +- Improved: Change the position of the Name and Email fields on the booking form +- Fixed: Locked timezone not displaying properly on the customer edit screen +- Fixed: Gravity Forms bug with changing selected time showing incorrect dates available +- Fixed: Error with previewing notifications containing new template variables +- Fixed: Error with phone number field when editing an appointment +- Fixed: Support status on hosts where core updates are locked + +## SSA-VERSION-PREFIX.4.9.10 + +- Added: Slovak language pack +- Improved: Display of rescheduled appointments in the admin app + +## SSA-VERSION-PREFIX.4.9.9 + +- Added: Greek language pack +- Improved: Support for recent timezone changes +- Improved: Highlight when a new version is available + +## SSA-VERSION-PREFIX.4.9.8 + +- Added: Gravity Forms merge tags to show appointment details in Gravity Forms notifications +- Added: Estonian language pack +- Fixed: Gravity Forms and Formidable Forms integration on forms with multiple pages +- Fixed: "Add to Calendar" link not working on some sites with mixed HTTP/HTTPS path + +## SSA-VERSION-PREFIX.4.9.6 + +- Added: Customer's rescheduling/cancel link to the admin appointment details +- Added: Developer option to purge old appointments from the database +- Improved: Ability to access previously-deleted appointment types +- Fixed: Notice Required couldn't be set to zero minutes in some circumstances +- Fixed: Conflict with WPSSO Core plugin +- Fixed: Bug affecting multi-page forms (Gravity/Formidable integration) + +## SSA-VERSION-PREFIX.4.9.5 + +- Fixed: Potential error in notifications caused by missing customer timezone data + +## SSA-VERSION-PREFIX.4.9.4 + +- Fixed: Unexpected ) error for sites running PHP7.2 + +## SSA-VERSION-PREFIX.4.9.2 + +- Fixed: Bug affecting customer information fields for some users upgrading from free to plus +- Fixed: Bug preventing Minimum Booking Notice being set to 0 + +## SSA-VERSION-PREFIX.4.9.1 + +- Improved: Send more SSA appointment details for customers using Gravity Forms Webhook add-on +- Fixed: Bug causing some users to see bookings with no customer information fields +- Fixed: Bug with Spanish language pack not formatting date correctly +- Fixed: Group appointments incorrrectly generating different Zoom meeting IDs for same time slot +- Fixed: Formidable Forms Name fields getting formatted incorrectly in SSA appointments +- Fixed: Formidable Forms entry not pointing to SSA appointment + +## SSA-VERSION-PREFIX.4.8.7 + +- Improved: Performance with reduced CPU usage +- Fixed: Conflicts with other plugins using action scheduler + +## SSA-VERSION-PREFIX.4.8.6 + +- Fixed: Unexpected availability for some customers + +## SSA-VERSION-PREFIX.4.8.5 + +- Improved: Compatibility with plugins using action scheduler + +## SSA-VERSION-PREFIX.4.8.4 + +- Improved: Show "rescheduled" status in CSV export +- Improved: Automatically clean out old ICS files +- Fixed: Bug affecting min/max booking notice on some sites + +## SSA-VERSION-PREFIX.4.8.3 + +- Fixed: Fatal error on sites running outdated PHP versions (PHP5.6 and PHP7.0) +- Fixed: Fatal error affecting some sites when calculating availability + +## SSA-VERSION-PREFIX.4.8.2 + +- Improved: Remove unnecessary library to reduce filesize + +## SSA-VERSION-PREFIX.4.8.1 + +- Added: New Gravity Forms merge tag for public_edit_url so you can include SSA Cancel/Reschedule links inside of Gravity Forms notifications +- Improved: Performance of admin-app +- Fixed: Missing icons in Elementor widgets +- Fixed: Leave without saving option for Team Members +- Fixed: Back arrow displays when specific shortcode is used + +## SSA-VERSION-PREFIX.4.7.3 + +- Improved: Importing SSA export code now performs an emergency backup to help recover accidental data deletion +- Improved: Performance when lots of SSA schedulers are embedded on the same page +- Improved: Date formatting in Gravity Forms and Formidable Forms now uses SSA date formatting preferences +- Fixed: Original content of Appointment wiped out after reschedule/cancel +- Fixed: SMS Notification cut off if the less than character is used +- Fixed: Export code wasn't clearing appointments when only appointment types were exported + +## SSA-VERSION-PREFIX.4.7.2 + +- Improved: Link from original appointments to rescheduled appointments +- Improved: Layout of dialog buttons on mobile devices + +## SSA-VERSION-PREFIX.4.7.1 + +- Added: Show critical timezone errors in SSA Support tab +- Added: {{ refund_policy }} variable for notification templates +- Improved: Live preview when editing notification templates +- Improved: Appointments that are 150 minutes show up as 2.5hrs to customers when booking +- Improved: Logic for assigning appointments to Team Members +- Improved: Remove problematic/invalid timezones like US/Pacific-New +- Improved: More clear instructions around exiting a page without saving changes +- Improved: SSA no longer saves Gravity Forms fields marked as admin-only or hidden +- Improved: Add Cancel/Reschedule link to shared calendar events +- Fixed: Unable to click into Appointment Details Page on some sites + +## SSA-VERSION-PREFIX.4.7.0 + +- Added: Cancel/Reschedule link to default calendar event description + +## SSA-VERSION-PREFIX.4.6.10 + +- Added: New notification variables for formatted dates {{ Appointment.customer_start_date }} and {{ Appointment.business_start_date }} +- Improved: Prevent search engine indexing on SSA booking app +- Improved: Increase time that SSA holds an appointment waiting for Paypal confirmation (it can take a long time on new accounts or for * certain types of payments) +- Fixed: Warnings in developer console +- Fixed: ssa_full_access user capability + +## SSA-VERSION-PREFIX.4.6.9 + +- Improved: Compatibility with aggressive caching environments +- Improved: The Events Calendar integration + +## SSA-VERSION-PREFIX.4.6.8 + +- Improved: Prevent sending "reminder" notifications that would go out before the appointment was booked (eg. 1-week reminders booked for an * appointment 1 day away) +- Fixed: Logged in user name/email not automatically filling on some sites + +## SSA-VERSION-PREFIX.4.6.7 + +- Improved: Integration with Gravity Forms User Registration add-on +- Fixed: Syncing password data from Gravity Forms to SSA +- Fixed: Syncing empty data from Gravity Forms to SSA +- Fixed: Appointment edit URL affecting some SMS messages + +## SSA-VERSION-PREFIX.4.6.6 + +- Improved: Translations for customer information fields +- Fixed: Default value for Google Calendar refresh interval + +## SSA-VERSION-PREFIX.4.6.5 + +- Added: Appointment.customer_start_date notification variable +- Added: Appointment.business_start_date notification variable +- Added: link filter to notification templating to allow text links with custom label +- Fixed: Unwanted data added to customer information fields in some cases + +## SSA-VERSION-PREFIX.4.6.4 + +- Improved: Google Calendar events with Google Meet meetings only send a single invitation notification +- Fixed: Prevent plugin conflicts with Appointment Edit URL + +## SSA-VERSION-PREFIX.4.6.3 + +- Added: Filter to customize how long appointments are reserved for Gravity Forms integration +- Fixed: Special characters showing in SMS message +- Fixed: Month names not getting translated in admin app +- Fixed: Blackout dates for team members +- Fixed: Bug affecting ?type= in the URL query string + +## SSA-VERSION-PREFIX.4.6.2 + +- Improved: Support for Gravity Forms with multiple pages +- Fixed: Zoom connection expiring and having to be reauthenticated +- Fixed: nbsp; characters showing up in some notifications +- Fixed: bug with phone number field + +## SSA-VERSION-PREFIX.4.6.0 + +- Added: Zoom integration to automatically create Zoom Meetings + +## SSA-VERSION-PREFIX.4.5.3 + +- Improved: Performance when exporting a large number of appointments +- Improved: Compatibility with twentytwentyone theme +- Fixed:   showing in SMS notifications for some users +- Fixed: incorrect availability for Group appointment types using max-per-day limit + +## SSA-VERSION-PREFIX.4.5.2 + +- Improved: Adjust settings to avoid iframe setting a max-height on iframes +- Improved: Setup wizard prompts you to test booking your first appointment +- Improved: Phone number validation +- Fixed: Improve handling of custom web meeting URLs +- Fixed: Conflict with ProjectHuddle plugin + +## SSA-VERSION-PREFIX.4.5.1 + +- Fixed: Error adding team members in some cases +- Fixed: Improve resizing/scrolling of booking app + +## SSA-VERSION-PREFIX.4.5.0 + +- Improved: Better error logging when connecting to Google Calendar +- Fixed: Prevent potential error with team member capacity +- Fixed: Calendar/description for shared/individual calendar events + +## SSA-VERSION-PREFIX.4.4.9 + +- Improved: Add filter to show end date in Gravity Form entries +- Improved: Made `at` translatable +- Fixed: Caching conflict with some Advance scheduling settings +- Fixed: Scrolling to the booking app when using the 'type' attribute + +## SSA-VERSION-PREFIX.4.4.8 + +- Improved: Additional checks to prevent double bookings on slower servers getting high traffic volume +- Improved: Translation of dates in Gravity/Formidable Forms integrations +- Improved: SMS support for Formidable Forms integration + +## SSA-VERSION-PREFIX.4.4.7 + +- Improved: Error notice when appointment fails to get inserted into the database +- Fixed: Errors with Gravity Forms Zapier add-on with certain forms +- Fixed: Unusual issue with sites located in half-hour timezone offset + +## SSA-VERSION-PREFIX.4.4.6 + +- Fixed: Google Calendar conflict with plugins using an incompatible version of the Guzzle library + +## SSA-VERSION-PREFIX.4.4.5 + +- Fixed: Team availability calculation + +## SSA-VERSION-PREFIX.4.4.4 + +- Added: Integration with The Events Calendar +- Improved: Accessibility and screen reader support +- Improved: Availability Troubleshooting +- Fixed: Appointment Edited webhook + +## SSA-VERSION-PREFIX.4.4.3 + +- Added: Set the default country code (which determines what flag will show up in the phone number field) +- Added: Japanese language pack +- Fixed: Export code not working with some notification templates +- Fixed: Errors with availability and deleted appointments + +## SSA-VERSION-PREFIX.4.4.2 + +- Improved: Translation of upcoming appointments module + +## SSA-VERSION-PREFIX.4.4.1 + +- Improved: Integration with Gravity Forms + Zapier +- Fixed: Ability to edit appointments as the customer +- Fixed: Emails sent for invalid appointments + +## SSA-VERSION-PREFIX.4.4.0 + +- Added: Easily troubleshoot availability to identify common issues with your appointment type settings +- Improved: Performance for all sites +- Improved: Performance for Google Calendar sync + +## SSA-VERSION-PREFIX.4.3.7 + +- Improved: Added function to delete abandoned appointments +- Improved: Support for German (formal) +- Improved: Performance on high traffic sites +- Improved: Performance of asynchronous tasks +- Fixed: Issue handling buffer times with availability caching +- Fixed: Google calendar connections for team members + +## SSA-VERSION-PREFIX.4.3.6 + +- Fixed: Bug with calculating maximum appointments per day + +## SSA-VERSION-PREFIX.4.3.5 + +- Improved: Performance of availability caching +- Added: new "types" argument for shortcode to specify embedding multiple specific appointment types +- Fixed: Mailchimp settings not saving when editing an appointment type +- Fixed: Timezone issue with CSV export + +## SSA-VERSION-PREFIX.4.3.4 + +- Improved: Performance of availability caching +- Improved: Handling site visitors with incorrect UTC-offset timezones set in their browsers +- Fixed: Bug affecting Google Calendar UI for team members +- Fixed: Bug affecting availability on appointment types that only had a "Buffer Before" set + +## SSA-VERSION-PREFIX.4.3.3 + +- Improved: Google Calendar events send email invitations to attendees +- Improved: Provide more SSA data to Gravity Forms Webhooks Add-On +- Improved: Performance for form integrations +- Fixed: Cache not clearing for other appointment types with shared availability +- Fixed: Remove hardcoded text from calendar event description +- Fixed: Phone number validation when editing an appointment + +## SSA-VERSION-PREFIX.4.3.2 + +- Fixed: Issue with calculating maximum appointments per day + +## SSA-VERSION-PREFIX.4.3.1 + +- Added: Web Meetings support for a custom URL +- Improved: Internationalization of additional strings +- Improved: Performance of monthly booking views +- Improved: Availability caching +- Fixed: Bug affecting editing customer information fields +- Fixed: Bug affecting Mobile Safari +- Fixed: Bug affecting team members availablity + +## SSA-VERSION-PREFIX.4.2.8 + +- Improved: Google Calendar performance +- Fixed: Buffers interacting with Google Calendar events + +## SSA-VERSION-PREFIX.4.2.7 + +- Added: Custom web meeting URLs +- Improved: Performance improvements + +## SSA-VERSION-PREFIX.4.2.5 + +- Improved: New scheduling algorithm and caching to make SSA run faster + +## SSA-VERSION-PREFIX.4.2.3 + +- Fixed: Zoom integration coming soon + +## SSA-VERSION-PREFIX.4.2.2 + +- Improved: Team Member user role +- Improved: Add gravatars to team member list +- Fixed: Google Calendar authorization for Team Members +- Fixed: Google Meet web meeting creation + +## SSA-VERSION-PREFIX.4.2.1 + +- Fixed: Connection to Stripe failed on some server configurations + +## SSA-VERSION-PREFIX.4.2.0 + +- Added: Team scheduling +- Added: Web Meetings with Google Meet +- Added: Shared Google Calendar Events - invite customers/team as attendees + +## SSA-VERSION-PREFIX.4.1.3 + +- Fixed: CSV Export for customer fields containing commas + +## SSA-VERSION-PREFIX.4.1.2 + +- Added: Slovenian translation support +- Improved: Formidable Forms CSV export + +## SSA-VERSION-PREFIX.4.1.1 + +- Added: Export option for anonymous customer information + +## SSA-VERSION-PREFIX.4.0.9 + +- Improved: Gravity Form integration + +## SSA-VERSION-PREFIX.4.0.8 + +- Added: Admin can now edit an appointment on behalf of the customer +- Improved: Email formatting for customers booking in non-english locales +- Improved: Availability windows now support specific times +- Improved: Gravity Forms export now prints appointment start date/time +- Fixed: Error affecting some customers using the maximum appoinmtents per day limit + +## SSA-VERSION-PREFIX.4.0.7 + +- Improved: Compatibility with Safari browser + +## SSA-VERSION-PREFIX.4.0.6 + +- Improved: Performance of appointment booking interface +- Improved: Handling of ICS files +- Improved: Permissions on appointment types +- Fixed: Bug with importing appointments +- Fixed: PHP warnings + +## SSA-VERSION-PREFIX.4.0.5 + +- Added: Option to book an appointment right from the admin interface +- Improved: Skip straight to booking form for appointment types with a single start time per day +- Improved: Display end date on booking confirmation if it's different than the end time +- Improved: Compatibility with CB Change Mail Sender plugin + +## SSA-VERSION-PREFIX.4.0.3 + +- Improved: Prevent lost connection errors + +## SSA-VERSION-PREFIX.4.0.0 + +- Added: Import / Export functionality to easily migrate between installs +- Added: Filtering of notifications in admin app + +## SSA-VERSION-PREFIX.3.9.10 + +- Improved: Filtering by date range + +## SSA-VERSION-PREFIX.3.9.9 + +- Improved: database schema compatible with more WordPress installs +- Fixed: Bug when filtering appointments by date range + +## SSA-VERSION-PREFIX.3.9.8 + +- Fixed: Divi module issue when a single appointment type is selected +- Fixed: Display of appointment created/modified dates +- Fixed: Load more in admin-app on sites with lots of appointments booked in a single day +- Fixed: PHP notice on some servers + +## SSA-VERSION-PREFIX.3.9.7 + +- Improved: Gravity Forms integration now syncs Phone field to SSA +- Fixed: Developer option for separate availability not always taking effect +- Fixed: Untitled events from Google Calendar failing to sync +- Fixed: Gravity/Formidable Forms with upload fields prevent exporting of SSA appointments + +## SSA-VERSION-PREFIX.3.9.6 + +- Fixed: Divi compatibility on WordPress 5.5 + +## SSA-VERSION-PREFIX.3.9.5 + +- Improved: Handling of group events +- Fixed: Removed warnings on WordPress 5.5 + +## SSA-VERSION-PREFIX.3.9.4 + +- Added: Filtering by abandoned status in list of appointments +- Improved: Performance of notifications +- Fixed: Compatibility issue with WordPress 5.5 + +## SSA-VERSION-PREFIX.3.9.3 + +- Improved: Compatibility with WordPress.com +- Improved: Customer form fields now allow links + +## SSA-VERSION-PREFIX.3.9.2 + +- Improved: Compatibility with caching plugins +- Fixed: 404 messages showing where scheduler should be on some themes +- Fixed: Special characters are handled better when saving booking page title +- Fixed: Conflict with Simple Calendar plugin + +## SSA-VERSION-PREFIX.3.9.1 + +- Added: Tracking which page an appointment was booked on +- Added: Debugger to support tools +- Improved: SSA Custom capabilities and permissions +- Fixed: Bug affecting rescheduled appointments potentially preventing further bookings +- Fixed: Bug affecting some ICS files +- Fixed: Bug affecting some Google Calendar users with many calendars + +## SSA-VERSION-PREFIX.3.9.0 + +- Added: Classes and Group Events +- Improved: Automatically prevent accidental whitespace in appointment type slugs + +## SSA-VERSION-PREFIX.3.8.6 + +- Fixed: Issue switching from availability blocks to start times + +## SSA-VERSION-PREFIX.3.8.5 + +- Added: Date range filter for list of appointments +- Improved: Compatibility with installations with WP core files in a different directory +- Improved: Compatibility with some shared hosts + +## SSA-VERSION-PREFIX.3.8.4 + +- Added: CSS class in the booking form for the appointment type being booked +- Fixed: Stripe payments bug affecting appointment types using capacity +- Fixed: Bug preventing CSV export of appointments when customer information contained special characters +- Fixed: Bug affecting some sites where times in the past might show up as available + +## SSA-VERSION-PREFIX.3.8.3 + +- Added: Developer setting to enqueue SSA scripts on all pages (needed for some sites loading the booking form with AJAX) +- Added: More styling options to the booking form's gutenberg block +- Fixed: Error affecting the editing experience for notifications on some sites +- Fixed: Conflict with WP Rocket lazy loading + +## SSA-VERSION-PREFIX.3.8.2 + +- Fixed: SSA Divi module only worked with Divi Builder plugin and not the Divi theme + +## SSA-VERSION-PREFIX.3.8.1 + +- Improved: Elementor integration now has more styling options +- Fixed: Error affecting the admin appointment filtering on some sites +- Fixed: Errors on sites where REST API is blocked + +## SSA-VERSION-PREFIX.3.8.0 + +- Added: Allow multiple simultaneous bookings of the same appointment type +- Added: Ability to export appointments to CSV +- Added: Ability to filter appointment views by status and type +- Added: Language packs for Hungarian, Turkish, Russian, and Estonian +- Added: Developer settings screen for beta/developer settings +- Added: Divi modules for embedding booking forms and upcoming appointments +- Improved: Support for embedding booking form in Elementor popup +- Improved: Beaver Builder module has more options and settings +- Improved: Minified unsupported.js +- Improved: New option for embedding booking form (API) +- Improved: Added CSS classes for more flexibility in styling booking form +- Fixed: Stripe SDK updated +- Fixed: Load local copies of Google fonts and icons in booking form +- Fixed: Back button bug in booking form integration +- Fixed: Accessible labels for phone number fields in booking forms + +## SSA-VERSION-PREFIX.3.7.5 + +- Improved: Formidable Forms integration: localized date formatting +- Improved: Updated Stripe API integration + +## SSA-VERSION-PREFIX.3.7.3 + +- Fixed: markup for the booking form and confirmation screen + +## SSA-VERSION-PREFIX.3.7.2 + +- Fixed: Non-breaking space entitites inserted into subject line of notifications +- Improved: Consistent markup for the booking form and confirmation screen + +## SSA-VERSION-PREFIX.3.7.1 + +- Added: Support for defining set start times for booking appointments +- Improved: Send customer name to MailChimp +- Improved: Provide filter for MailChimp field mapping + +## SSA-VERSION-PREFIX.3.6.10 + +- Improved: Better accessibility for edit buttons on settings screen +- Improved: Updated version of Material Icon font +- Fixed: Display icons for radio and checkbox fields on booking form +- Fixed: Made more strings translatable +- Fixed: Browser autofill interfering with phone number validation when booking appointments + +## SSA-VERSION-PREFIX.3.6.9 + +- Fixed: Outlook bug caused by X-WR-CALNAME tag in ICS files +- Fixed: Google Font dependency causing slow load times on some sites + +## SSA-VERSION-PREFIX.3.6.8 + +- Added: Swedish (Svenska) translation + +## SSA-VERSION-PREFIX.3.6.7 + +- Added: Danish (Dansk) translation + +## SSA-VERSION-PREFIX.3.6.6 + +- Improved: Set booking app frame to noindex + +## SSA-VERSION-PREFIX.3.6.5 + +- Fixed: Appointment type availability not editable for customers using translated date/time strings +- Fixed: Typo in translated strings + +## SSA-VERSION-PREFIX.3.6.4 + +- Improved: Translations for German (Formal) and Spanish (Venezuela) + +## SSA-VERSION-PREFIX.3.6.3 + +- Improved: Hide timezone warning for locked timezones on appointment types +- Improved: Made two additional strings translatable +- Fixed: Remove conflict with the LanguageTool browser addon when editing notifications + +## SSA-VERSION-PREFIX.3.6.2 + +- Added: Italian translation +- Fixed: Back button functionality in booking form + +## SSA-VERSION-PREFIX.3.6.1 + +- Fixed: Permissions on a couple API endpoints + +## SSA-VERSION-PREFIX.3.6.0 + +- Added: Integration with Members plugin for advanced custom user permissions/capabilities [https://wordpress.org/plugins/members/](https://wordpress.org/plugins/members/) +- Improved: Translate day and month names properly in notifications +- Improved: Performance of admin app + +## SSA-VERSION-PREFIX.3.5.3 + +- Improved: Automatic translation for default date format in email and SMS notifications + +## SSA-VERSION-PREFIX.3.5.2 + +- Improved: Better automatic translation for default date formats in non-English languages + +## SSA-VERSION-PREFIX.3.5.1 + +- Improved: Decreased load time for booking form + +## SSA-VERSION-PREFIX.3.5.0 + +- Added: Additional CSS class for styling + +## SSA-VERSION-PREFIX.3.4.0 + +- Added: Integration with Formidable Forms +- Fixed: Checkbox field type throwing Twig error in Notifications +- Fixed: Custom style not applied for appointment type focus in Firefox +- Fixed: Form labels not translatable for default fields +- Fixed: Conflict with Mesmerize theme +- Improved: Contrast between available and unavailable days in monthly booking view + +## SSA-VERSION-PREFIX.3.3.1 + +- Fixed: Incorrect timezone showing in notifications for some users + +## SSA-VERSION-PREFIX.3.3.0 + +- Added: Easily download and install language packs, even if they aren't complete +- Fixed: Catch fatal Twilio error +- Fixed: Layout for loading settings +- Improved: Submitting support ticket through the plugin + +## SSA-VERSION-PREFIX.3.2.3 + +- Improved: Layout of booking form + +## SSA-VERSION-PREFIX.3.2.2 + +- Improved: Update list of Google fonts in style settings +- Improved: Better UX for admin and booking apps on slow servers +- Fixed: SMS appearing disabled after saving Twilio credentials +- Fixed: Issues with embedding multiple booking forms on the same page + +## SSA-VERSION-PREFIX.3.2.1 + +- Improved: Better handling for description of notifications on appointment types +- Improved: Show a warning if an offset is selected instead of a timezone +- Improved: Hide the reorder button for appointment types if there's only one +- Fixed: Disabled dates in weekly view not inheriting the custom font selection in styles +- Fixed: Improper validation applied to text fields named 'Phone' + +## SSA-VERSION-PREFIX.3.1.0 + +- Added: Event tracking – SSA can post events to your analytics or advertising tools as your customers go through the booking process +- Added: Elementor integration – new SSA widgets so you can easily drag booking forms (or a summary of the logged in user's upcoming appointments) right onto your page +- Added: Logged in users' information is automatically filled in the booking form (except for administrators since you are likely booking an appointment for your customer) +- Added: [ssa_upcoming_appointments] shortcode to display the logged in user's upcoming appointments +- Improved: Deleting appointment types API call works now on servers that restrict use of the DELETE method +- Improved: Assign customer's user id based on email address even when user is logged out +- Improved: Display of timezone in customer email notifications +- Fixed: Google Calendar validation error when credentials are empty + +## SSA-VERSION-PREFIX.3.0.2 + +- Improved: Timezone detection and display +- Improved: Stripe: customize the description that shows on your customers' credit card statement +- Fixed: Extra check for appointment availability before processing Stripe payment +- Fixed: Stripe payment confirmation not redirecting to thank you + +## SSA-VERSION-PREFIX.3.0.1 + +- Fixed: Unable to add an appointment type if the wizard is skipped +- Fixed: Unable to enable Google Calendar in the wizard +- Fixed: Unable to manage and add customer information fields in the wizard +- Fixed: Custom styles apply to date selection buttons when booking an appointment + +## SSA-VERSION-PREFIX.3.0.0 + +- Added: Send custom SMS reminders and notifications +- Added: Preview for notifications - see what your notifications will look like +- Improved: Enable notifications to be disabled - all or individually +- Improved: Easier keyboard focus for selecting a date in the booking form +- Improved: Mailchimp authorization UX +- Fixed: Bug when cloning notifications + +## SSA-VERSION-PREFIX.2.9.1 + +- Improved: More robust availability checking for people with lots of booked appointments +- Fixed: Bug that prevented being able to delete appointment types + +## SSA-VERSION-PREFIX.2.9.0 + +- Added: Custom reminder notifications (send X days before/after appointment is booked or appointment start time) +- Added: Ability to reorder appointment types + +## SSA-VERSION-PREFIX.2.8.0 + +- Added: Paypal payments + +## SSA-VERSION-PREFIX.2.7.4 + +- Improved: Added pagination for appointments for admins +- Improved: Added shortcode instructions to final wizard screen +- Improved: Accessibility fixes for the booking form +- Improved: Swapped out user Gravatars for Unavatars +- Improved: Subtle transitions to booking form +- Fixed: Mobile view of availability for admins not fully visible + +## SSA-VERSION-PREFIX.2.7.3 + +- Improved: Buffers won't availability of booking at business start time +- Improved: Upgrade to latest version of Select2 +- Improved: Validating booking notice and advance so that booking notice can't be greater than advance +- Improved: Validate URLs for web hooks +- Improved: Styles updated for radio buttons and checkboxes on booking form +- Improved: Show customer and author of appointments if applicable (if they have a WP user account) +- Improved: Added ability to delete appointments from the appointment detail view with warning message +- Fixed: Add to Calendar button on booking form using SSA business name instead of site name + +## SSA-VERSION-PREFIX.2.7.1 + +- Fixed: Bug introduced by WooCommerce v3.6 + +## SSA-VERSION-PREFIX.2.7.0 + +- Added: UI for customizing both customer and admin notification emails, plus ability to send different notification messages per appointment type +- Added: Ability to add custom instructions to custom customer information fields +- Fixed: When using advanced scheduling options, an availability window less than 24 hours resulted in no appointment times being available to book + +## SSA-VERSION-PREFIX.2.6.12 + +- Fixed: Issue showing homepage instead of booking form on some sites + +## SSA-VERSION-PREFIX.2.6.11 + +- Improved: Google Calendar authorization +- Improved: WPML compatibility with ?lang= permalink structure +- Fixed: 404 error (or showing homepage) instead of booking app when using certain themes/plugins +- Fixed: Google Calendar bug when excluding a deleted calendar from availability +- Fixed: Bug with availability in booking form +- Fixed: Potential conflict with 2 booking forms embedded in the same page + +## SSA-VERSION-PREFIX.2.6.8 + +- Improved: Handling of errors preventing appointment booking +- Fixed: Conflict with plugins that incorrectly modify admin body class + +## SSA-VERSION-PREFIX.2.6.7 + +- Improved: Webhook payloads now include date "parts" for more advanced use cases + +## SSA-VERSION-PREFIX.2.6.6 + +- Improved: Booking form resizing +- Improved: Show helpful message if JavaScript is disabled or browser doesn't have the capability to run SSA +- Improved: Rescheduling of appointments +- Improved: When rescheduling, link to (now) canceled old appointment +- Improved: When rescheduling appointment, link payment made on original appointment for tracking + +## SSA-VERSION-PREFIX.2.6.5 + +- Improved: Remove restricted width of admin scrollbar +- Fixed: Conflict with other MailChimp plugins +- Fixed: Unable to go back to the first week when booking an appointment +- Fixed: Cancel link in confirmation email not working +- Fixed: Able to remove required email and name customer information fields + +## SSA-VERSION-PREFIX.2.6.4 + +- Improved: Better messaging when there aren't any appointment types +- Improved: Set timezone to local even if wizard is skipped +- Improved: Better feedback about saving in bulk edit mode for appointment types +- Improved: Clearer choices for Google Calendar syncing +- Improved: Better handling of email validation when booking appointment +- Fixed: Mailchimp opt-in text required when editing appointment type +- Fixed: Google Calendar not displaying connection in wizard + +## SSA-VERSION-PREFIX.2.6.3 + +- Fixed: Issue with monthly booking display + +## SSA-VERSION-PREFIX.2.6.2 + +- Added: Developer filter for advanced customization needs +- Fixed: Issue with monthly booking display + +## SSA-VERSION-PREFIX.2.6.0 + +- Added: Accept payments with Stripe when appointments are booked +- Added: New timing interval so appointments can be booked every 20 minutes +- Added: New monthly view option for booking appointments +- Improved: Bulk editing +- Improved: Better messaging when deleting an appointment type +- Improved: Make more reasonable PHP recommendations on the support tab +- Improved: Require customer email address to be properly formatted as an email address +- Improved: Better explanation of appointment time taken when two customers try to book the same appointment time at the same time +- Fixed: Possibility of negative buffer times and booking notices. It turns out that time travel is dangerous. +- Fixed: Number inputs in Firefox now display at correct width +- Fixed: Handle clash between availability, blackout dates, and booking notices more gracefully +- Fixed: MailChimp opt-in box now reliably appears for customers booking appointments + +## SSA-VERSION-PREFIX.2.5.0 + +- Added: Gutenberg block for Appointment Booking Form + +## SSA-VERSION-PREFIX.2.4.0 + +- Added: Show “instructions” field to customer on the appointment confirmation screen +- Added: Easy button to copy shortcode to clipboard on single-appointment edit screen +- Improved: Proactively prevent double-booking by notifying customer right after they select a time that's no longer available +- Improved: Faster cancelation process +- Improved: Bulk editing mode instructions + +## SSA-VERSION-PREFIX.2.3.0 + +- Added: View individual appointment details in the admin interface +- Improved: Show warnings on modules that are enabled but not actively configured +- Fixed: Bug affecting blackout dates in some timezones +- Fixed: Email notifications containing escaped formatting when customers filled in fields with special characters + +## SSA-VERSION-PREFIX.2.2.0 + +- Added: In-plugin support tools to help with troubleshooting server issues and sending debug information to the SSA team +- Improved: Performance of Availability Window +- Improved: Handle unusual timezone settings with some servers/plugins +- Improved: Prevention of double-booking on sites +- Improved: Google Calendar support for all-day events +- Updated: Google Calendar setup documentation +- Fixed: Sometimes days without any availability showed up as clickable in the week view +- Fixed: Google Calendar authentication during the setup process + +## SSA-VERSION-PREFIX.2.1.8 + +- Improved: Google Calendar error checking + +## SSA-VERSION-PREFIX.2.1.7 + +- Improved: Added error handling for PHP 5.3.x (SSA requires 5.5.9+, 7.x recommended) + +## SSA-VERSION-PREFIX.2.1.6 + +- Improved: Error messages +- Improved: Prevention of double-booking on sites with heavy traffic + +## SSA-VERSION-PREFIX.2.1.5 + +- Improved: Availability start date + +## SSA-VERSION-PREFIX.2.1.4 + +- Fixed: Bug with availability (only affecting dates more than 7 weeks away) + +## SSA-VERSION-PREFIX.2.1.3 + +- Improved: Added Custom CSS field to the "Styles" settings for the booking app +- Improved: Newly created appointment types now show up without having to refresh the page +- Fixed: Bug with availability windows for far-off future events + +## SSA-VERSION-PREFIX.2.1.2 + +- Fixed: Incompatibility with older PHP versions (introduced in 1.2.1.1) + +## SSA-VERSION-PREFIX.2.1.1 + +- Added: Ability to define the timezone as locked or localized (on your appointment types) which makes it easy to differentiate between phone calls/virtual meetings vs. physical/in-person events +- Added: Support for custom CSS files for admin-app and booking-app (which can be overridden in your theme) +- Improved: Spacing in booking form +- Improved: Interationalized email notifications + +## SSA-VERSION-PREFIX.2.0.3 + +- Improved: Compatibility with servers that have aggressive caching +- Fixed: Broken "Back to WordPress" button on sites installed in a subdirectory +- Fixed: Another incompatibility with some themes/hosts that have custom handling for 404 pages + +## SSA-VERSION-PREFIX.2.0.2 + +- Fixed: Incompatibility with some themes/hosts that have custom handling for 404 pages + +## SSA-VERSION-PREFIX.2.0.1 + +- Added: Webhooks module to enable better integration & automation with other platforms +- Improved: Added Appt Type Instructions field to email notifications + +## SSA-VERSION-PREFIX.1.9.5 + +- Added: WP Filter so developers can modify the email notification template +- Improved: Added Appt Type Instructions field to email notifications + +## SSA-VERSION-PREFIX.1.9.4 + +- Improved: Layout of appointment type selection in the booking interface +- Improved: Setup Wizard process +- Improved: More readable appointment type slugs when cloning an existing type +- Improved: Moved Availability Window settings into the Availability section +- Improved: Availability & Booking windows default to midnight instead of current time +- Fixed: Bug enforcing booking window restrictions, even when Advanced Scheduling Options is disabled + +## SSA-VERSION-PREFIX.1.9.3 + +- Fixed: Bug preventing some Elementor installations from showing the booking form properly + +## SSA-VERSION-PREFIX.1.9.2 + +- Fixed: Bug affecting Blackout Dates functionality + +## SSA-VERSION-PREFIX.1.9.1 + +- Added: Filter to allow separate availability for each appointment type (to allow custom implementations via code) + +## SSA-VERSION-PREFIX.1.9.0 + +- Added: Advanced scheduling options for appointment types - set a booking window, set an availability window, and limit how far into the future customers can book appointments +- Improved: Layout of appointment type selection in the booking form +- Improved: Appointment types get better slugs +- Improved: Booking form will now fast-forward to the first available appointment slot if it's after the current week +- Fixed: If there is only one appointment type, skip appointment type selection in the booking form + +## SSA-VERSION-PREFIX.1.8.3 + +- Fixed: rest_no_route error on some environments + +## SSA-VERSION-PREFIX.1.8.2 + +- Improved: Handling appointments connected to now-deleted appointment types +- Improved: Display of timezone in admin view +- Improved: Display of appointment types list when there are no appointment types defined + +## SSA-VERSION-PREFIX.1.8.1 + +- Improved: Appointment Cancelation/Reschedule interface +- Improved: Cancelation synchronization with Google Calendar +- Fixed: PHP Notices (non-fatal errors) + +## SSA-VERSION-PREFIX.1.7.1 + +- Fixed: Bug affecting "checkbox" customer fields + +## SSA-VERSION-PREFIX.1.7.0 + +- Added: Easily customize the styling and appearance of your booking forms to match your site (in the new Style Settings) + +## SSA-VERSION-PREFIX.1.6.0 + +- Improved: Better handling of auto-zoom behavior on iPhone +- Improved: Default padding & spacing around booking form +- Fixed: Changes to the date/time format didn't always save +- Fixed: Google Calendar caching times as unavailable even when module is disabled + +## SSA-VERSION-PREFIX.1.5.2 + +- Added: submenus for quicker access in wp-admin sidebar +- Improved: Compatibility with plugins that replace wp_mail() function +- Fixed: Email headers for best handling of from name and reply-to, along with support for WP Mail SMTP for custom From addresses + +## SSA-VERSION-PREFIX.1.5.0 + +- Improved: Added support for custom CSS in booking app +- Improved: Use from contact name, business name, and contact email as From address for email notification to customer +- Improved: Line endings / spacing in email notifications +- Fixed: Canceled events were not always made available for booking again +- Fixed: Potential issue with height of sections when editing appointment types +- Fixed: Partially cut off bulk editing menu + +## SSA-VERSION-PREFIX.1.4.1 + +- Improved: Layout of booking app for mobile devices +- Fixed: Warnings in javascript console + +## SSA-VERSION-PREFIX.1.4.0 + +- Added: Two modes of bulk editing for appointment types - quickly edit multiple appointment types +- Improved: Appointment type editing - easier to navigate all available options +- Fixed: Manage License button text now translateable +- Improved: Linked MailChimp API instructions to make it easier to find your API Key +- Fixed: Allow 0 value for pre- and post- appointment buffers and for booking notice + +## SSA-VERSION-PREFIX.1.3.1 + +- Fixed http/https error on some WordPress server setups + +## SSA-VERSION-PREFIX.1.3.0 + +- Added "Instructions" field to appointment types so you can tell your customers information about the appointment (like where to meet, if you'll contact them or they should contact you at the appointment time, etc.) This field also shows up in the notes for the event they add to their calendar. + +## SSA-VERSION-PREFIX.1.2.3 + +- Fixed: Mailchimp issue with some existing appointment types + +## SSA-VERSION-PREFIX.1.2.1 + +- Added: MailChimp integration +- Added: Bulk editing +- Improved: Appointment Type Editing + +## SSA-VERSION-PREFIX.1.1.0 + +- Improved custom field options for collecting information from customers +- Fixed issue with availability when user had blacked out every day in the next 30 days + +## SSA-VERSION-PREFIX.1.0.1 + +- Improved handling when trying to book an appointment when there is no availability in next 30 days +- Fixed issue where the availability time increment wasn't reflected on the frontend booking form. (ie. show appointments available every 15/30/60 minutes) + +## SSA-VERSION-PREFIX.1.0.0 + +- Added: Customize the information you collect from customers + +## SSA-VERSION-PREFIX.0.9.9 + +- Fixed issue with logged-in non-admin users unable to book some appointment types +- Fixed issue with Google Calendar syncing for newly-booked events + +## SSA-VERSION-PREFIX.0.9.7 + +- Fixed blackout dates applying even when feature is disabled +- Fixed issue with setup wizard + +## SSA-VERSION-PREFIX.0.9.6 + +- Fixed issue preventing some appointments from showing up in admin view + +## SSA-VERSION-PREFIX.0.9.4 + +- Fixed issue when WP is in a subdirectory instead of at the root of the domain + +## SSA-VERSION-PREFIX.0.9.3 + +- Fixed API conflict with other plugins + +## SSA-VERSION-PREFIX.0.9.1 + +- Added Google Calendar integration, so you never double-book again. Automatically exclude events from your Google Calendar so nobody can book during that time +- Overhaul to Admin UI and Booking UI +- New wizard for easy setup + +## SSA-VERSION-PREFIX.0.8.0 + +- Added Blackout Dates feature, so you can block off vacation days that you don't want to book any appointments diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/babel.config.js b/wp-content/plugins/simply-schedule-appointments/admin-app/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/favicon.ico b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/index.html b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/index.html new file mode 100644 index 0000000..72aa257 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/index.html @@ -0,0 +1 @@ +ssa-admin-app-new
\ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/app.css b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/app.css new file mode 100644 index 0000000..3083d94 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/app.css @@ -0,0 +1 @@ +.app-loading .md-title{color:#9e9e9e}.app-loading.body{align-items:center;display:flex}.app-loading.body .md-spinner{margin-right:1rem}.app-loading.one .mdc-circular-progress__indeterminate-container .mdc-circular-progress__circle-clipper{width:100%}.hello[data-v-56133048]{text-align:center;color:#2c3e50;padding-top:60px}.button-bar[data-v-56133048]{margin:1em 0;display:flex;justify-content:center}img[data-v-56133048]{height:auto;max_event_count-height:25vh;max_event_count-width:25vw;width:auto}#to-do-list-content .to-do-list dt{display:flex;align-items:flex-start;gap:5px}#to-do-list-content .to-do-list dd{font-size:14px;line-height:22px}.md-card-text-area a[data-v-00a9ce14]{text-decoration:none;font-size:14px;padding-left:7px}.md-card-text-area a[data-v-00a9ce14]:hover{text-decoration:underline}.sidebar-promo .gravity-form-upsell .mdc-card__actions .mdc-button[data-v-00a9ce14]{font-size:smaller}h3.md-subheading[data-v-6dc5dc26]{font-size:large}p.fade[data-v-6dc5dc26]{opacity:.7}.notice-container-layout[data-v-497a9619]{width:100%}.container .md-layout[data-v-2438a4e5]{margin-bottom:0}.container .md-button[data-v-2438a4e5]{overflow:visible;min-width:unset}.errors-container[data-v-2438a4e5]{margin-bottom:1rem}.main-app-layout[data-v-308f286c]{width:100%;display:flex;flex-wrap:wrap;gap:1rem;padding:0;margin-bottom:32px}.main-app-toolbar[data-v-308f286c]>*{padding:0}.main-nav-item-content[data-v-308f286c]{height:50px;display:flex;align-items:center;gap:6px}.settings .mdc-layout-grid[data-v-308f286c]{padding:0}.settings .mdc-layout-grid .mdc-layout-cell .banner[data-v-308f286c]{box-shadow:0 1px 3px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14),0 2px 1px -1px rgba(0,0,0,.12)}.settings .side-settings-container[data-v-308f286c]{min-width:375px}@media screen and (max-width:600px){.settings .side-settings-container[data-v-308f286c]{min-width:auto}}.pending-appointment[data-v-0548cc7e]{border:.5px dashed rgba(67,67,67,.251);border-radius:1px}.pending-appointment[data-v-0548cc7e]:after,.pending-appointment[data-v-0548cc7e]:before{height:0!important}.foxy-list-item span span[data-v-0548cc7e]:before{margin:0!important;width:0!important}.pending-appointment+.pending-appointment[data-v-0548cc7e]{border-top:0}.appointment-item_third-line[data-v-0548cc7e]{display:inline-flex;gap:4px;align-items:center}.appointment-item_third-line .no-show[data-v-0548cc7e]{display:inline-flex;margin-top:2px}.appointment-item_third-line .no-show i[data-v-0548cc7e]{font-size:18px}.name-and-status{display:inline-flex;align-items:center;gap:6px}.name-and-status .no-show{font-size:30px}.name-and-status .no-show i{font-size:18px}.foxy-mixed-checkbox-menu{display:flex;flex-direction:column;width:100%;position:relative;display:inline-block}.foxy-mixed-checkbox-menu .textfield-container{position:relative}.foxy-mixed-checkbox-menu .option legend{float:none;font-size:1.1rem;font-weight:700}.foxy-mixed-checkbox-menu .option .parent-checkbox:focus-within{background-color:#d3d3d3}.foxy-mixed-checkbox-menu .option ul{list-style:none;margin:0;padding:0}.foxy-mixed-checkbox-menu .option ul li{margin:0;padding:0;padding-left:15px}.foxy-mixed-checkbox-menu .option ul li:focus-within{background-color:#d3d3d3}.foxy-mixed-checkbox-menu fieldset{padding:2px;margin-bottom:5px;margin-left:10px}.foxy-mixed-checkbox-menu .md-input-container:before{position:absolute;display:inline-block;margin-left:6px;margin-top:2px;top:67%;right:0;transform:translateY(-50%) scaleY(.45) scaleX(.85);transition:all .15s linear;content:"▼";color:gray}.foxy-mixed-checkbox-menu input[type=button]{width:100%;text-align:left}.foxy-mixed-checkbox-menu input[type=button]:hover{cursor:pointer}.foxy-mixed-checkbox-menu input[type=button]:focus-visible{outline:none;border-radius:2px}.foxy-mixed-checkbox-menu .menu-popup{position:absolute;top:77px;min-width:100%;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.35);z-index:9999;border-radius:4px}.foxy-mixed-checkbox-menu .popupOverlay{position:fixed;z-index:-1;top:0;left:0;width:100%;height:100%;overflow:auto}.foxy-mixed-checkbox-menu .content-container{padding:10px 0;overflow-x:auto;overflow-y:auto;width:auto;max-height:256px;color:currentColor;font-family:inherit;font-size:18px;font-weight:400;margin:4px 0}.foxy-mixed-checkbox-menu div.textfield-container label:focus-within{background-color:#dcdcdc}.foxy-mixed-checkbox-menu div.textfield-container label input.mdc-text-field__input[type=button]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:break-word;word-break:break-all;font-size:small;text-align:left}.foxy-mixed-checkbox-menu .container{display:flex;position:relative;padding:15px 10px 12px 43px;cursor:pointer;font-size:16px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.foxy-mixed-checkbox-menu .container>span:not(.checkmark){line-height:20px}.foxy-mixed-checkbox-menu.checkbox-menu-filled div.textfield-container label .mdc-text-field__icon{margin-top:10px}.foxy-mixed-checkbox-menu .container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.foxy-mixed-checkbox-menu .checkmark,.foxy-mixed-checkbox-menu .checkmark-indeterminate{position:absolute;top:15px;left:12px;height:20px;width:20px;border:2px solid #696666;border-radius:2px;transition:transform .2s ease-in-out}.foxy-mixed-checkbox-menu .container input:focus-visible,.foxy-mixed-checkbox-menu .container:focus-visible{outline:none}.foxy-mixed-checkbox-menu .container:focus-visible .checkmark,.foxy-mixed-checkbox-menu .container:focus-within .checkmark{outline-offset:2px;outline-style:dotted;outline-color:#000;outline-width:2px}.foxy-mixed-checkbox-menu .container input:checked~.checkmark,.foxy-mixed-checkbox-menu .container[role=checkbox][aria-checked=mixed] .checkmark-indeterminate,.foxy-mixed-checkbox-menu .container[role=checkbox][aria-checked=true] .checkmark{background-color:#689f38;border:none}.foxy-mixed-checkbox-menu .checkmark:after{content:"";position:absolute;display:none}.foxy-mixed-checkbox-menu .container input:checked~.checkmark:after,.foxy-mixed-checkbox-menu .container[role=checkbox][aria-checked=true] .checkmark:after{display:block}.foxy-mixed-checkbox-menu .container .checkmark:after{left:6px;top:2px;width:7px;height:14px;border:solid #fff;border-width:0 .15rem .15rem 0;transform:rotate(45deg)}.foxy-mixed-checkbox-menu .container .checkmark-indeterminate:before{background-color:#fff;content:"";position:absolute;left:3px;top:8px;width:14px;height:4px}.search .clearFilterSearchInput{top:10px;right:10px}.md-list-text-container>:nth-child(2){font-size:14px;color:rgba(0,0,0,.54)}.select-field-wrapper[data-v-6c90c354]{display:flex;justify-content:center;align-items:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;gap:1em;margin-bottom:40px}.select-field-wrapper div[data-v-6c90c354]{flex:1;min-width:100px}.select-field-wrapper .label[data-v-6c90c354]{display:contents}.content[data-v-6c90c354]{position:relative}.description[data-v-6c90c354]{color:#9e9e9e;position:absolute;top:4em;left:0}button[data-v-6c90c354]:focus-visible{outline:3px solid #000}.md-select[data-v-6c90c354]:focus-visible{outline:3px solid #000}.popup-content[data-v-12084f5c]{min-height:200px;padding:0 24px 24px 0;width:100%}@media screen and (max-width:900px){.popup-content[data-v-12084f5c]{width:auto}}.staff-items-wrapper[data-v-12084f5c]{height:auto}.staff-items-wrapper fieldset[data-v-12084f5c]{display:block;margin-right:2px;padding-top:.35em;padding-bottom:.625em;padding-left:0;padding-right:.75em}.staff-items-wrapper fieldset legend[data-v-12084f5c]{font-size:large}.staff-items-wrapper .md-select2[data-v-12084f5c]{margin-bottom:1.5rem}.staff-items-wrapper .md-primary label[data-v-12084f5c]{padding:0 0 0 8px}button[data-v-12084f5c]:focus-visible{outline:3px solid #000}.timeline-item[data-v-05e7b467]{position:relative;display:flex;align-items:center;min-height:84px}.timeline-item-date[data-v-05e7b467]{font-weight:400;font-size:14px;line-height:16px;text-align:center;margin-right:10px;width:17%;flex-shrink:0}.timeline-item-line[data-v-05e7b467]{width:12px;height:100%;position:absolute;left:18.5%;border-right:1px solid #bdbdbd}.timeline-item-icon[data-v-05e7b467]{position:absolute;background-color:#fff;top:32%;left:18.5%}.timeline-item-content[data-v-05e7b467]{padding:16px;border-left:3px solid;box-shadow:0 1px 3px rgba(0,0,0,.12),0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14);border-radius:4px;flex-grow:1;margin-left:50px}.timeline-item-content.md-theme-red[data-v-05e7b467]{border-left-color:#f44336}.timeline-item-content.md-theme-pink[data-v-05e7b467]{border-left-color:#e91e63}.timeline-item-content.md-theme-purple[data-v-05e7b467]{border-left-color:#9c27b0}.timeline-item-content.md-theme-deep-purple[data-v-05e7b467]{border-left-color:#673ab7}.timeline-item-content.md-theme-indigo[data-v-05e7b467]{border-left-color:#3f51b5}.timeline-item-content.md-theme-blue[data-v-05e7b467]{border-left-color:#2196f3}.timeline-item-content.md-theme-light-blue[data-v-05e7b467]{border-left-color:#03a9f4}.timeline-item-content.md-theme-cyan[data-v-05e7b467]{border-left-color:#00bcd4}.timeline-item-content.md-theme-teal[data-v-05e7b467]{border-left-color:#009688}.timeline-item-content.md-theme-green[data-v-05e7b467]{border-left-color:#4caf50}.timeline-item-content.md-theme-light-green[data-v-05e7b467]{border-left-color:#8bc34a}.timeline-item-content.md-theme-lime[data-v-05e7b467]{border-left-color:#cddc39}.timeline-item-content.md-theme-yellow[data-v-05e7b467]{border-left-color:#ffeb3b}.timeline-item-content.md-theme-amber[data-v-05e7b467]{border-left-color:#ffc107}.timeline-item-content.md-theme-orange[data-v-05e7b467]{border-left-color:#ff9800}.timeline-item-content.md-theme-deep-orange[data-v-05e7b467]{border-left-color:#ff5722}.timeline-item-content.md-theme-brown[data-v-05e7b467]{border-left-color:#795548}.timeline-item-content.md-theme-grey[data-v-05e7b467]{border-left-color:#9e9e9e}.timeline-item-content.md-theme-blue-grey[data-v-05e7b467]{border-left-color:#607d8b}.timeline-item-title[data-v-05e7b467]{font-weight:400;font-size:16px;line-height:19px}.timeline-item-subtitle[data-v-05e7b467]{color:rgba(0,0,0,.54);font-size:14px}.chat-bubble[data-v-05e7b467]{position:relative}.chat-bubble.md-theme-red[data-v-05e7b467]{border-color:#f44336}.chat-bubble.md-theme-pink[data-v-05e7b467]{border-color:#e91e63}.chat-bubble.md-theme-purple[data-v-05e7b467]{border-color:#9c27b0}.chat-bubble.md-theme-deep-purple[data-v-05e7b467]{border-color:#673ab7}.chat-bubble.md-theme-indigo[data-v-05e7b467]{border-color:#3f51b5}.chat-bubble.md-theme-blue[data-v-05e7b467]{border-color:#2196f3}.chat-bubble.md-theme-light-blue[data-v-05e7b467]{border-color:#03a9f4}.chat-bubble.md-theme-cyan[data-v-05e7b467]{border-color:#00bcd4}.chat-bubble.md-theme-teal[data-v-05e7b467]{border-color:#009688}.chat-bubble.md-theme-green[data-v-05e7b467]{border-color:#4caf50}.chat-bubble.md-theme-light-green[data-v-05e7b467]{border-color:#8bc34a}.chat-bubble.md-theme-lime[data-v-05e7b467]{border-color:#cddc39}.chat-bubble.md-theme-yellow[data-v-05e7b467]{border-color:#ffeb3b}.chat-bubble.md-theme-amber[data-v-05e7b467]{border-color:#ffc107}.chat-bubble.md-theme-orange[data-v-05e7b467]{border-color:#ff9800}.chat-bubble.md-theme-deep-orange[data-v-05e7b467]{border-color:#ff5722}.chat-bubble.md-theme-brown[data-v-05e7b467]{border-color:#795548}.chat-bubble.md-theme-grey[data-v-05e7b467]{border-color:#9e9e9e}.chat-bubble.md-theme-blue-grey[data-v-05e7b467]{border-color:#607d8b}.chat-bubble[data-v-05e7b467]:after,.chat-bubble[data-v-05e7b467]:before{content:"";position:absolute;width:0;height:0;border-style:solid}.chat-bubble[data-v-05e7b467]:before{border-color:transparent;border-right-color:inherit;border-width:13px;top:51%;margin-top:-19px;left:-26px}.chat-bubble[data-v-05e7b467]:after{border-color:transparent #fff transparent transparent;border-width:10px;top:51%;margin-top:-16px;left:-19px}.filterWrapper[data-v-6ee74534]{position:relative}.popupContainer[data-v-6ee74534]{position:absolute;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.35);z-index:1;border-radius:4px;min-width:-webkit-max-content;right:-40px}.popupOverlay[data-v-6ee74534]{position:fixed;z-index:-1;top:0;left:0;width:100%;height:100%;overflow:auto}.popupContent[data-v-6ee74534]{padding:5px 15px 5px 5px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.timeline-header[data-v-15b6fb5f]{display:flex;justify-content:space-between;align-items:center;margin:22px 30px 10px 0;border-top:1px solid #eee}.timeline-header h3[data-v-15b6fb5f]{font-weight:unset}.outdated[data-v-9ad3d1c4]{opacity:.5;text-decoration:line-through}#ssa-delete-appt-dialog .mdc-dialog__content ul[data-v-9ad3d1c4]{list-style:none;padding:0}#ssa-delete-appt-dialog .mdc-dialog__content ul .md-list-text-container[data-v-9ad3d1c4],.appointment-detail__reschedulingHistory[data-v-9ad3d1c4]{display:flex;flex-direction:column}.appointment-detail__reschedulingHistory p[data-v-9ad3d1c4]{margin-top:0;margin-bottom:8px}.status-meta[data-v-9ad3d1c4]{background-color:#fbbc04;border-radius:4px;font-weight:400;padding:0 0 0 8px;display:inline-flex;gap:4px}.status-meta button[data-v-9ad3d1c4]{overflow:hidden;display:inline-flex;padding:1px 0 0 0;background:transparent;border-color:transparent;cursor:pointer}.status-meta button i[data-v-9ad3d1c4]{font-size:16px}.status-meta button[data-v-9ad3d1c4]:not(.button-visible){width:0}.status-meta button[data-v-9ad3d1c4]:focus,.status-meta button[data-v-9ad3d1c4]:focus-visible,.status-meta button[data-v-9ad3d1c4]:hover{width:auto;background-color:#dba904;border-top-right-radius:4px;border-bottom-right-radius:4px}.status-meta button:focus i[data-v-9ad3d1c4],.status-meta button:focus-visible i[data-v-9ad3d1c4],.status-meta button:hover i[data-v-9ad3d1c4]{scale:1.1}.status-meta:hover button[data-v-9ad3d1c4]{width:auto}.single-group-appointment .md-title[data-v-45bb3578]{margin-bottom:0}.single-group-appointment .md-title+.md-subheading[data-v-45bb3578]{margin-top:0}.single-group-appointment .md-title span[data-v-45bb3578]{opacity:.5}.name-and-status[data-v-45bb3578]{display:inline-flex;align-items:center;gap:6px}.name-and-status .no-show[data-v-45bb3578]{font-size:30px}.name-and-status .no-show i[data-v-45bb3578]{font-size:22px}.md-list-item.deleted .icon-toggle,.md-list-item.deleted .md-list-text-container{opacity:.5}.bulk-edit-avail .mdc-form-field .mdc-checkbox+label{display:none}.appt-type-list .foxy-list-item .mdc-deprecated-list-item__text{border-bottom:1px solid #e1e1e1}.appt-type-list .foxy-list-item .mdc-deprecated-list-item__text .icon-toggle{margin-right:16px}.appt-type-editable-list i.handle{cursor:move!important}.appt-type-editable-list.dragging i.handle,.appt-type-editable-list.dragging li{cursor:-webkit-grabbing!important;cursor:grabbing!important}@media screen and (max-width:600px){.appt-types .ssa-appointment-status-selector{width:100%}}.appt-types .appt-types-list-toolbar-actions{display:flex;flex-wrap:wrap;gap:5px}.appt-types #filter-time{width:290px}.labels-field-container[data-v-7c194993]{width:100%;position:relative;display:inline-block}.popupOverlay[data-v-7c194993]{position:fixed;z-index:-1;top:0;left:0;width:100%;height:100%;overflow:auto}.label-popup[data-v-7c194993]{position:absolute;top:77px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.35);min-width:220px;z-index:9999;border-radius:4px}.label-field[data-v-7c194993]{margin-right:5px}.label-menu-item-wrapper[data-v-7c194993]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:5px;min-width:270px}.label-menu-item-wrapper button[data-v-7c194993]{height:100%;cursor:pointer}.label-menu-item-wrapper button[data-v-7c194993]:hover{background-color:#d3d3d3}.label-menu-item-wrapper button[data-v-7c194993]:focus-visible{box-shadow:0 0 0 2px #ffb74d;outline:2px solid transparent}.label-menu-item-wrapper i[data-v-7c194993]{margin-left:8px}.select-label-button[data-v-7c194993]{flex-grow:1;font-size:medium;text-align:left;border:none;background:none;margin-left:4px;padding:4px 0}.select-label-button[data-v-7c194993]:hover{background-color:#d3d3d3}.tools-wrapper[data-v-7c194993]{display:flex;flex-direction:row}.tools-wrapper button[data-v-7c194993]{margin:0 4px;border:none;background:none}.tools-wrapper button[data-v-7c194993]:not([disabled]){cursor:pointer}.tools-wrapper button[data-v-7c194993]:not([disabled]):hover{background-color:#d3d3d3}.tools-wrapper button[data-v-7c194993]:not([disabled]):focus-visible{box-shadow:0 0 0 2px #ffb74d;outline:2px solid transparent}.header-menu[data-v-7c194993]{display:flex;justify-content:space-between;align-items:center;padding:2px 12px;border-radius:4px 4px 0 0;min-height:40px}.header-menu[data-v-7c194993]:first-child{flex-grow:1}.header-menu .md-button[data-v-7c194993]{padding:0;margin:0;min-width:33px}legend[data-v-7c194993]:focus,legend[data-v-7c194993]:focus-visible{box-shadow:none;outline:none}.menu-footer-btn[data-v-7c194993]{padding:6px 0;align-self:center;display:flex;gap:8px}.fieldset-wrapper[data-v-7c194993]{display:flex;flex-flow:column nowrap;margin:0;padding:0;border-radius:4px}.input-fields-wrapper[data-v-7c194993]{padding:0 10px;max-width:280px;line-height:normal}.custom-label[data-v-7c194993]{font-size:12px;color:rgba(0,0,0,.54)}.color-selected[data-v-7c194993]{border:3px solid #454343}#label-menu-trigger[data-v-7c194993]{text-align:left;cursor:pointer}.labels-field-container .input-field-label input[data-v-7c194993]:focus-visible{background:#e6e6e6}fieldset[data-v-7c194993]{padding:0;margin:0}button.md-button[data-v-7c194993]:focus-visible{box-shadow:0 0 0 2px #ffb74d;outline:2px solid transparent}.squares-wrapper[data-v-7c194993]{display:flex;flex-direction:row;flex-wrap:wrap}.squares-wrapper .wrapper[data-v-7c194993]{position:relative;margin:3px}.squares-wrapper .wrapper input[data-v-7c194993]{height:25px;left:0;opacity:0;position:absolute;top:0;width:25px}.squares-wrapper .wrapper label[data-v-7c194993]{display:inline-block;margin:13px;cursor:pointer}.squares-wrapper .wrapper input+label[data-v-7c194993]:before{width:25px;height:25px;border-radius:4px;margin:3px;content:"";left:0;position:absolute;top:0}.squares-wrapper .wrapper input+label[data-v-7c194993]:after{content:"";border:4px solid;border-left:0;border-top:0;height:20px;left:14px;opacity:0;position:absolute;top:6px;transform:rotate(45deg);transition:opacity .2s ease-in-out;width:12px}.squares-wrapper .wrapper input:checked+label[data-v-7c194993]:after{opacity:1}.squares-wrapper .wrapper input:focus+label[data-v-7c194993]:before{box-shadow:0 0 0 2px #ffb74d;outline:2px solid transparent}li[data-v-7c194993]{font-size:medium}li span[data-v-7c194993]{font-size:smaller;margin-left:4px}li span a[data-v-7c194993]{color:#d84315!important;text-decoration:underline!important;padding:3px}li span a[data-v-7c194993]:focus-visible{box-shadow:0 0 0 2px #ffb74d;outline:2px solid transparent}.appt-type-basics .full-width{flex:0 1 100%!important}.appointment-scheduling-section{display:flex;flex-direction:column;gap:1rem;padding:1rem 0}.appointment-scheduling-section .appointment-scheduling-section-header h3{margin:0}.appointment-scheduling-section .appointment-duration-fields{gap:1rem;display:flex;flex-direction:column}.md-checkbox.staff-item{align-items:center}.md-checkbox.staff-item .md-checkbox-label{height:auto;display:inline-flex;align-items:center}.md-checkbox.staff-item .md-checkbox-label .notification-box{margin-left:1rem}.md-checkbox.staff-item .md-checkbox-label .md-icon{margin-right:.5rem}.appt-type-staff{display:flex;flex-direction:column}.appt-type-staff .right-align-link{align-self:flex-end;margin:-5px 0 -30px 0}@media screen and (max-width:600px){.appt-type-staff .right-align-link{margin-bottom:-10px}}.ssa-web-meetings-type .mdc-radio-input-field[data-v-46faddac]{margin:6px 8px 8px 0!important}.appt-type-webhooks ul>li[data-v-6cb8f1c8]{padding:0}.appt-type-webhooks li>a span[data-v-6cb8f1c8]:nth-child(2){width:100%;display:flex}.appt-type-webhooks .webhooks-container[data-v-6cb8f1c8]{display:flex;min-height:72px;padding:0 16px;align-items:center;justify-content:space-between;text-align:left;width:100%}.appt-type-webhooks .webhooks-container .webhooks-container span[data-v-6cb8f1c8]{margin:0;color:rgba(0,0,0,.54);font-size:14px;flex:0}.appt-type-webhooks .webhooks-container .webhooks-container>span[data-v-6cb8f1c8]:nth-child(2){flex:1}.appt-type-webhooks .webhooks-container-left[data-v-6cb8f1c8]{display:flex;flex-direction:column;align-items:baseline}.appt-type-webhooks .webhooks-container-left>span[data-v-6cb8f1c8]:first-child{color:#000}.appt-type-webhooks .appt-type-webhooks-empty-state[data-v-6cb8f1c8]{height:-webkit-fit-content!important;height:-moz-fit-content!important;height:fit-content!important}.appt-type-customer-information ul:not(.promo-unorder-list){list-style:none;margin:0;padding:8px 0;background-color:#fff;color:rgba(0,0,0,.87)}.appt-type-customer-information ul:not(.promo-unorder-list) li{display:flex;align-items:center;justify-content:space-between;min-width:48px;padding:0 16px;cursor:move;background-color:#fff;transition:background .3s ease-in}.appt-type-customer-information ul:not(.promo-unorder-list) li>i:first-child{padding-right:32px}.appt-type-customer-information ul:not(.promo-unorder-list) li .md-list-text-container{display:flex;flex-flow:column nowrap;flex:1;overflow:hidden;line-height:1.25em;white-space:normal;font-weight:400;text-align:left;text-transform:none}.appt-type-customer-information ul:not(.promo-unorder-list) li .md-list-text-container>:first-child{font-size:16px}.appt-type-customer-information ul:not(.promo-unorder-list) li .md-list-text-container>:nth-child(2){margin:0;color:rgba(0,0,0,.54);font-size:14px}.appt-type-customer-information ul:not(.promo-unorder-list) li .md-list-text-container>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabs[data-v-415390dd]{box-sizing:border-box}.tabs-nav[data-v-415390dd]{display:flex;align-items:flex-end}.tabs-nav-tab[data-v-415390dd]{padding:.5rem 1rem;margin:0 .5rem 0 0;background:#fff;border-radius:4px 4px 0 0;cursor:pointer;filter:grayscale(1);box-shadow:0 -.4px 4px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.12),0 2px 1px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14)}.tabs-nav-tab.md-theme-red[data-v-415390dd]{border-top:6px solid #f44336!important}.tabs-nav-tab.md-theme-pink[data-v-415390dd]{border-top:6px solid #e91e63!important}.tabs-nav-tab.md-theme-purple[data-v-415390dd]{border-top:6px solid #9c27b0!important}.tabs-nav-tab.md-theme-deep-purple[data-v-415390dd]{border-top:6px solid #673ab7!important}.tabs-nav-tab.md-theme-indigo[data-v-415390dd]{border-top:6px solid #3f51b5!important}.tabs-nav-tab.md-theme-blue[data-v-415390dd]{border-top:6px solid #2196f3!important}.tabs-nav-tab.md-theme-light-blue[data-v-415390dd]{border-top:6px solid #03a9f4!important}.tabs-nav-tab.md-theme-cyan[data-v-415390dd]{border-top:6px solid #00bcd4!important}.tabs-nav-tab.md-theme-teal[data-v-415390dd]{border-top:6px solid #009688!important}.tabs-nav-tab.md-theme-green[data-v-415390dd]{border-top:6px solid #4caf50!important}.tabs-nav-tab.md-theme-light-green[data-v-415390dd]{border-top:6px solid #8bc34a!important}.tabs-nav-tab.md-theme-lime[data-v-415390dd]{border-top:6px solid #cddc39!important}.tabs-nav-tab.md-theme-yellow[data-v-415390dd]{border-top:6px solid #ffeb3b!important}.tabs-nav-tab.md-theme-amber[data-v-415390dd]{border-top:6px solid #ffc107!important}.tabs-nav-tab.md-theme-orange[data-v-415390dd]{border-top:6px solid #ff9800!important}.tabs-nav-tab.md-theme-deep-orange[data-v-415390dd]{border-top:6px solid #ff5722!important}.tabs-nav-tab.md-theme-brown[data-v-415390dd]{border-top:6px solid #795548!important}.tabs-nav-tab.md-theme-grey[data-v-415390dd]{border-top:6px solid #9e9e9e!important}.tabs-nav-tab.md-theme-blue-grey[data-v-415390dd]{border-top:6px solid #607d8b!important}.tabs-nav-tab-active[data-v-415390dd]{z-index:2;box-shadow:0 5px 0 #fff,0 1px 2px rgba(0,0,0,.4);filter:grayscale(0)}.tabs-nav-tab-disabled[data-v-415390dd]{cursor:not-allowed;filter:grayscale(1)}.tabs-nav-tab-disabled:hover .number[data-v-415390dd],.tabs-nav-tab-disabled:hover .step[data-v-415390dd],.tabs-nav-tab-disabled[data-v-415390dd]:hover{transform:none!important}.tabs-nav-tab img[data-v-415390dd]{margin-top:.5rem}.tabs .tabs-nav-tab[data-v-415390dd]:not(.tabs-nav-tab-active):hover{transition:all .15s ease;transform:scaleY(1.1);transform-origin:bottom}.tabs .tabs-nav-tab:not(.tabs-nav-tab-active):hover .number[data-v-415390dd],.tabs .tabs-nav-tab:not(.tabs-nav-tab-active):hover .step[data-v-415390dd]{transform:scaleY(.9)}.tabs-content[data-v-415390dd]{position:relative;z-index:1;background:#fff;padding:1rem;border-radius:0 4px 4px 4px;box-shadow:0 -.4px 4px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.12),0 2px 1px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14)}.tabs-content.md-theme-red[data-v-415390dd]{border-top:6px solid #f44336!important}.tabs-content.md-theme-pink[data-v-415390dd]{border-top:6px solid #e91e63!important}.tabs-content.md-theme-purple[data-v-415390dd]{border-top:6px solid #9c27b0!important}.tabs-content.md-theme-deep-purple[data-v-415390dd]{border-top:6px solid #673ab7!important}.tabs-content.md-theme-indigo[data-v-415390dd]{border-top:6px solid #3f51b5!important}.tabs-content.md-theme-blue[data-v-415390dd]{border-top:6px solid #2196f3!important}.tabs-content.md-theme-light-blue[data-v-415390dd]{border-top:6px solid #03a9f4!important}.tabs-content.md-theme-cyan[data-v-415390dd]{border-top:6px solid #00bcd4!important}.tabs-content.md-theme-teal[data-v-415390dd]{border-top:6px solid #009688!important}.tabs-content.md-theme-green[data-v-415390dd]{border-top:6px solid #4caf50!important}.tabs-content.md-theme-light-green[data-v-415390dd]{border-top:6px solid #8bc34a!important}.tabs-content.md-theme-lime[data-v-415390dd]{border-top:6px solid #cddc39!important}.tabs-content.md-theme-yellow[data-v-415390dd]{border-top:6px solid #ffeb3b!important}.tabs-content.md-theme-amber[data-v-415390dd]{border-top:6px solid #ffc107!important}.tabs-content.md-theme-orange[data-v-415390dd]{border-top:6px solid #ff9800!important}.tabs-content.md-theme-deep-orange[data-v-415390dd]{border-top:6px solid #ff5722!important}.tabs-content.md-theme-brown[data-v-415390dd]{border-top:6px solid #795548!important}.tabs-content.md-theme-grey[data-v-415390dd]{border-top:6px solid #9e9e9e!important}.tabs-content.md-theme-blue-grey[data-v-415390dd]{border-top:6px solid #607d8b!important}.tabs-content-active[data-v-415390dd]{z-index:2;box-shadow:0 5px 0 #fff,0 1px 2px rgba(0,0,0,.4);filter:grayscale(0)}.tabs-content img[data-v-415390dd]{margin-top:.5rem}.tabs .tabs-content[data-v-415390dd]{display:flex;flex-direction:column;gap:1rem;z-index:10}.number.md-theme-red[data-v-415390dd]{background:#f44336!important}.number.md-theme-pink[data-v-415390dd],.number.md-theme-red[data-v-415390dd]{color:#fff;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-pink[data-v-415390dd]{background:#e91e63!important}.number.md-theme-purple[data-v-415390dd]{background:#9c27b0!important}.number.md-theme-deep-purple[data-v-415390dd],.number.md-theme-purple[data-v-415390dd]{color:#fff;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-deep-purple[data-v-415390dd]{background:#673ab7!important}.number.md-theme-indigo[data-v-415390dd]{background:#3f51b5!important}.number.md-theme-blue[data-v-415390dd],.number.md-theme-indigo[data-v-415390dd]{color:#fff;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-blue[data-v-415390dd]{background:#2196f3!important}.number.md-theme-light-blue[data-v-415390dd]{background:#03a9f4!important}.number.md-theme-cyan[data-v-415390dd],.number.md-theme-light-blue[data-v-415390dd]{color:#000;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-cyan[data-v-415390dd]{background:#00bcd4!important}.number.md-theme-teal[data-v-415390dd]{background:#009688!important;color:#fff;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-green[data-v-415390dd]{background:#4caf50!important}.number.md-theme-green[data-v-415390dd],.number.md-theme-light-green[data-v-415390dd]{color:#000;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-light-green[data-v-415390dd]{background:#8bc34a!important}.number.md-theme-lime[data-v-415390dd]{background:#cddc39!important}.number.md-theme-lime[data-v-415390dd],.number.md-theme-yellow[data-v-415390dd]{color:#000;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-yellow[data-v-415390dd]{background:#ffeb3b!important}.number.md-theme-amber[data-v-415390dd]{background:#ffc107!important}.number.md-theme-amber[data-v-415390dd],.number.md-theme-orange[data-v-415390dd]{color:#000;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-orange[data-v-415390dd]{background:#ff9800!important}.number.md-theme-deep-orange[data-v-415390dd]{background:#ff5722!important}.number.md-theme-brown[data-v-415390dd],.number.md-theme-deep-orange[data-v-415390dd]{color:#fff;display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-brown[data-v-415390dd]{background:#795548!important}.number.md-theme-grey[data-v-415390dd]{background:#9e9e9e!important;color:#000}.number.md-theme-blue-grey[data-v-415390dd],.number.md-theme-grey[data-v-415390dd]{display:inline-block;border-radius:50%;height:1.5rem;width:1.5rem;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-bottom:.5rem}.number.md-theme-blue-grey[data-v-415390dd]{background:#607d8b!important;color:#fff}.img-container[data-v-415390dd]{text-align:center;min-height:6rem}.img-container svg[data-v-415390dd]{margin-top:.5rem}.changeColor.md-theme-red{fill:#f44336!important}.changeColor.md-theme-pink{fill:#e91e63!important}.changeColor.md-theme-purple{fill:#9c27b0!important}.changeColor.md-theme-deep-purple{fill:#673ab7!important}.changeColor.md-theme-indigo{fill:#3f51b5!important}.changeColor.md-theme-blue{fill:#2196f3!important}.changeColor.md-theme-light-blue{fill:#03a9f4!important}.changeColor.md-theme-cyan{fill:#00bcd4!important}.changeColor.md-theme-teal{fill:#009688!important}.changeColor.md-theme-green{fill:#4caf50!important}.changeColor.md-theme-light-green{fill:#8bc34a!important}.changeColor.md-theme-lime{fill:#cddc39!important}.changeColor.md-theme-yellow{fill:#ffeb3b!important}.changeColor.md-theme-amber{fill:#ffc107!important}.changeColor.md-theme-orange{fill:#ff9800!important}.changeColor.md-theme-deep-orange{fill:#ff5722!important}.changeColor.md-theme-brown{fill:#795548!important}.changeColor.md-theme-grey{fill:#9e9e9e!important}.changeColor.md-theme-blue-grey{fill:#607d8b!important}fieldset[data-v-44e5c9fd]{padding:0!important}.resources-list .md-radio[data-v-44e5c9fd]{margin:8px 8px 8px 0!important}.md-icon.md-theme-yellow{color:#fbc02d}.md-list-item.staff .md-list-item-container{display:block}.md-list-item.staff .md-list-item-container .notification-box{margin-top:.5em}.md-input-container{margin-bottom:8px}.md-body-2 p[data-v-5301ac76]{font-size:14px!important}.md-body-2 ul[data-v-5301ac76]{letter-spacing:.01em;line-height:20px}.md-body-2 ul li[data-v-5301ac76]:last-child{margin-top:8px}.settings-header .md-title{display:flex;align-items:center}.settings-header .md-spinner{margin-left:16px}.global-settings,.global-settings .button-bar{margin:0}.ssa-settings-developer-job>h3{margin-bottom:auto}.ssa-developer-job{display:flex;align-items:flex-end;gap:24px}@media screen and (max-width:600px){.ssa-developer-job{flex-wrap:wrap}}.ssa-developer-job .config{margin-right:auto}.ssa-developer-job .purge_options{display:flex;flex-direction:column;gap:1.5rem}.ssa-developer-job-modal .md-dialog{width:100%;max-width:560px}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments .dialog-icon{display:flex;align-items:center;justify-content:center;text-align:center;margin:0 auto 24px;width:96px;height:96px;border-radius:96px}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments.error .dialog-icon{color:#bf360c}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments.success .dialog-icon{color:#33691e}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments .dialog-content{text-align:center}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments .dialog-content .md-headline{margin-bottom:0}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments .dialog-errors{margin-top:24px;text-align:left;padding:16px;line-height:1.3;border:1px solid;background-color:#fbe9e7;color:#bf360c;border-color:#ffab91}.mdc-dialog.ssa-developer-job-modal .mdc-dialog__content.purge-appointments .dialog-errors ul{margin:0;padding:0 0 0 24px}.md-dialog-container.ssa-import-export-modal .md-dialog{width:100%;max-width:500px}.md-dialog-container.ssa-import-export-modal .md-dialog-content{text-align:center}.md-dialog-container.ssa-import-export-modal .md-dialog-content .import-dialog-icon{display:flex;align-items:center;justify-content:center;margin:0 auto 24px;width:80px;height:80px;border-radius:80px}.md-dialog-container.ssa-import-export-modal .md-dialog-content.error .import-dialog-icon{color:#bf360c}.md-dialog-container.ssa-import-export-modal .md-dialog-content.success .import-dialog-icon{color:#33691e}.md-dialog-container.ssa-import-export-modal .md-dialog-content .import-dialog-content .md-headline{margin-bottom:0}.md-dialog-container.ssa-import-export-modal .md-dialog-content .import-dialog-content .md-button{color:#9e9e9e}.md-dialog-container.ssa-import-export-modal .md-dialog-content .import-dialog-errors{margin-top:24px;text-align:left;padding:16px;line-height:1.3;border:1px solid;background-color:#fbe9e7;color:#bf360c;border-color:#ffab91}.md-dialog-container.ssa-import-export-modal .md-dialog-content .import-dialog-errors ul{margin:0;padding:0 0 0 24px}.ssa-import-export .export-settings>div+div{border-top:1px solid rgba(0,0,0,.12);padding-top:1em}.ssa-import-export .button-bar.align-right{padding-right:0}.ssa-import-export .export-code{width:100%;height:300px;overflow-y:auto;resize:none;background-color:#fff;border:1px solid #e0e0e0;outline:1px solid transparent;padding:1rem;transition:all .4s cubic-bezier(.25,.8,.25,1)}.ssa-import-export .export-code:focus{border-color:#8bc34a;outline:1px solid #8bc34a}.ssa-import-export .copy-code-trigger,.ssa-import-export .send-code-trigger{display:inline-flex;align-items:center}.ssa-import-export .copy-code-trigger .md-icon,.ssa-import-export .copy-code-trigger .md-spinner,.ssa-import-export .send-code-trigger .md-icon,.ssa-import-export .send-code-trigger .md-spinner{margin-left:8px}.ssa-import-export .import-alert{padding:24px;margin-bottom:24px;line-height:1.3;border:1px solid;background-color:#fbe9e7;color:#bf360c;border-color:#ffab91}.ssa-import-export .import-alert p{padding:0;margin:0}.contrast-calc{margin:16px auto 30px auto;position:relative;display:inline-flex;align-items:center;width:100%;gap:2px}.contrast-calc span{margin-right:9px}.contrast-calc span:first-child{margin-right:15px}.contrast-calc .contrast-warn-text{bottom:-20px;color:rgba(0,0,0,.6);font-size:12px;display:block;height:20px;left:0;position:absolute}.code-editor .code-area>pre{white-space:revert!important}.code-editor .code-area>pre>code{margin-top:-20px!important}.code-editor .code-area>textarea{letter-spacing:.25px!important;line-height:1.5!important}.saving-fade,.saving-fade table{opacity:.65}.google-button[data-v-3d810d0c]{background-color:#4285f4!important;color:#fff!important;padding-left:0!important}.google-button img[data-v-3d810d0c]{height:36px}.google-button.disabled[data-v-3d810d0c]{background-color:#ccc!important}.ssa-google-calendar-sync-appointment-types{padding:24px}.ssa-google-calendar-sync-appointment-types h3{margin-top:0}.ssa-google-calendar-sync-settings{padding:24px}.ssa-google-calendar-sync-settings>div{margin:16px 8px 36px 0}.ssa-google-calendar-sync-settings h3{margin-top:0;margin-bottom:8px}.ssa-google-calendar-sync-settings fieldset{padding:0;margin:0}@media screen and (min-width:1440px){.table-twig-token[data-v-cf7eb29e]{overflow:visible}.table-twig-token tbody tr td[data-v-cf7eb29e]:nth-child(2){text-wrap:wrap}}.token-toolbar{display:flex;position:absolute;right:0;top:10px;white-space:nowrap}.token-toolbar .mdc-menu-surface--anchor .mdc-touch-target-wrapper button.mdc-button{padding-left:10px;border-radius:50%;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;overflow:hidden;padding-bottom:3px;margin-bottom:2px;aspect-ratio:1}.token-toolbar .mdc-menu-surface--anchor .mdc-touch-target-wrapper button.mdc-button i.material-icons.mdc-button__icon{font-size:x-large}div[contenteditable]{background-color:#fff;border:1px solid #e0e0e0;margin-top:2rem;outline:1px solid transparent;padding:1rem;transition:all .4s cubic-bezier(.25,.8,.25,1)}div[contenteditable]:focus{border-color:#8bc34a;outline:1px solid #8bc34a}div[contenteditable].error,div[contenteditable].error:focus{border-color:#ff5722;outline:1px solid #ff5722}.token-text .md-error{color:#ff5722;font-size:12px}.token-text [contenteditable]{overflow-wrap:break-word;word-break:break-all}.token-text .emoji{width:1em;height:1em;vertical-align:-.1em;display:inline-block}.ssa-calendar-event-customization{margin-top:32px}.event-settings .md-fieldset,.event-settings fieldset.md-fieldset{margin-top:0}.mailchimp-list-item[data-v-556e6f1f]{min-height:48px;padding:0 16px;margin:0;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;font-size:16px;font-weight:400;text-align:left;text-transform:none}.ssa-webex-user{display:flex;padding:24px}.ssa-webex-user .avatar{width:100%;max-width:100px}.ssa-webex-user .avatar .md-avatar{width:104px;height:104px;min-width:104px;min-height:104px;border-radius:104px}.ssa-webex-user .avatar .md-avatar .md-icon{width:80px;min-width:80px;height:80px;min-height:80px;font-size:80px;line-height:80px}.ssa-webex-user .user{width:100%;margin-left:24px}.ssa-webex-user .user .md-display-1{margin:0 0 16px}.ssa-zoom-user{display:flex;padding:24px}.ssa-zoom-user .avatar{width:100%;max-width:100px}.ssa-zoom-user .avatar .md-avatar{width:104px;height:104px;min-width:104px;min-height:104px;border-radius:104px}.ssa-zoom-user .avatar .md-avatar .md-icon{width:80px;min-width:80px;height:80px;min-height:80px;font-size:80px;line-height:80px}.ssa-zoom-user .user{width:100%;margin-left:24px}.ssa-zoom-user .user .md-display-1{margin:0 0 16px}.advanced-scheduling-settings .foxy-switch-with-helper .mdc-form-field[data-v-137b3d5b]{display:flex;gap:.3rem}.advanced-scheduling-settings .foxy-switch-with-helper p[data-v-137b3d5b]{margin-left:42px}.advanced-scheduling-settings .foxy-switch-with-helper p a[data-v-137b3d5b],.tracking-settings a[data-v-b1b7c6c8]{text-decoration:none}.view-selector.md-toolbar{z-index:1}@media screen and (max-width:600px){.view-selector.md-toolbar{padding:0}.view-selector.md-toolbar .select-wrapper,.view-selector.md-toolbar .select-wrapper .mdc-select{width:100%}}.md-list-item.past[data-v-61506d1a]{opacity:.5}.data-select-and-list .md-toolbar[data-v-61506d1a]{z-index:unset}.md-list-item.past[data-v-19ef226c]{opacity:.5}.mdc-theme-name--red.mdc-evolution-chip{background-color:#ffcdd2;color:#fff}.mdc-theme-name--red.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--pink.mdc-evolution-chip{background-color:#f8bbd0;color:#fff}.mdc-theme-name--pink.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--purple.mdc-evolution-chip{background-color:#e1bee7;color:#fff}.mdc-theme-name--purple.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--deep-purple.mdc-evolution-chip{background-color:#d1c4e9;color:#fff}.mdc-theme-name--deep-purple.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--indigo.mdc-evolution-chip{background-color:#c5cae9;color:#fff}.mdc-theme-name--indigo.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--blue.mdc-evolution-chip{background-color:#bbdefb;color:#fff}.mdc-theme-name--blue.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--light-blue.mdc-evolution-chip{background-color:#b3e5fc;color:#fff}.mdc-theme-name--light-blue.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--cyan.mdc-evolution-chip{background-color:#b2ebf2;color:#fff}.mdc-theme-name--cyan.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--teal.mdc-evolution-chip{background-color:#b2dfdb;color:#fff}.mdc-theme-name--teal.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--green.mdc-evolution-chip{background-color:#c8e6c9;color:#fff}.mdc-theme-name--green.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--light-green.mdc-evolution-chip{background-color:#dcedc8;color:#fff}.mdc-theme-name--light-green.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--lime.mdc-evolution-chip{background-color:#f0f4c3;color:#fff}.mdc-theme-name--lime.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--yellow.mdc-evolution-chip{background-color:#fff9c4;color:#fff}.mdc-theme-name--yellow.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--amber.mdc-evolution-chip{background-color:#ffecb3;color:#fff}.mdc-theme-name--amber.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--orange.mdc-evolution-chip{background-color:#ffe0b2;color:#fff}.mdc-theme-name--orange.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--deep-orange.mdc-evolution-chip{background-color:#ffccbc;color:#fff}.mdc-theme-name--deep-orange.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--brown.mdc-evolution-chip{background-color:#d7ccc8;color:#fff}.mdc-theme-name--brown.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--grey.mdc-evolution-chip{background-color:#f5f5f5;color:#fff}.mdc-theme-name--grey.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--blue-grey.mdc-evolution-chip{background-color:#cfd8dc;color:#fff}.mdc-theme-name--blue-grey.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--black.mdc-evolution-chip{background-color:#535353;color:#fff}.mdc-theme-name--black.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.foxy-fieldset-invalid .editable-chip-set:after{background-color:#ff5722;height:2px}.editable-chip-set .mdc-menu-surface--anchor .mdc-touch-target-wrapper.as-icon .mdc-button{padding-left:10px;border-radius:50%;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;overflow:hidden;padding-bottom:3px;margin-bottom:2px;aspect-ratio:1}.editable-chip-set .mdc-menu-surface--anchor .mdc-touch-target-wrapper.as-icon .mdc-button i.material-icons.mdc-button__icon{font-size:x-large}.foxy-chip-set-editable .helper-text{position:unset;margin-top:4px}.preview-wrapper{display:flex;flex-wrap:nowrap}@media(max-width:640px){.preview-wrapper{flex-wrap:wrap}}.preview-description{width:100%;max-width:240px;margin-right:32px}@media(max-width:640px){.preview-description{max-width:unset;margin-right:0}}.preview-description p{color:rgba(0,0,0,.54);font-size:14px}.preview-container{width:100%;min-height:200px;position:relative}.preview-container .preview{overflow-wrap:break-word;word-break:break-all}.md-dialog .preview p{margin:0 0 1rem 0}.md-dialog .preview a{color:#2196f3}.md-dialog .preview a:hover{color:#1e88e5}.customised-notification-list[data-v-c73c6700]{padding:0;margin:0;padding-left:15px}.stripe-payment-method>p[data-v-2ede5b9c]{margin-bottom:0}.stripe-payment-method>div[data-v-2ede5b9c]{margin-right:18px}.payment-methods-warning-message[data-v-2ede5b9c]{font-size:.75rem}.webhook-list li[data-v-544b3a67]{padding:0;border-bottom:1px solid #ececec;cursor:pointer}.webhook-list .foxy-list-container[data-v-544b3a67]{width:100%;display:flex;min-height:72px;padding:0 16px;align-items:center;justify-content:space-between;text-align:left}.webhook-list .foxy-list-container[data-v-544b3a67]:hover{background:#e5e5e5}.webhook-list .foxy-list-container .md-list-text-container[data-v-544b3a67]{display:flex;flex-direction:column;margin:0}.webhook-list .foxy-list-container .md-list-text-containerspan[data-v-544b3a67]:last-child{color:rgba(0,0,0,.54);font-size:14px}.inline-staff-error-notice{color:#d84315;margin-left:12px;display:inline-flex;font-weight:600;text-decoration:none;align-items:baseline;gap:4px}.inline-staff-error-notice i{align-self:center}.staff-listing .md-card.md-table-card{box-shadow:none}.search{position:relative;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);border:0;border-radius:4px;padding:0 50px 0 0;margin:auto 8px}.search .clearFilterSearchInput{position:absolute;top:5px;right:3px}.search input{font-size:14px;border:0}.search input:focus{outline:0}.card[data-v-03092804]{display:flex;justify-content:space-between;flex-direction:row!important;width:100%}.card .md-card-header[data-v-03092804]{padding-top:8px!important;padding-bottom:0!important}.card .md-icon[data-v-03092804]{font-size:18px;color:#9e9e9e}.card .md-card-actions .md-icon[data-v-03092804]{font-size:24px}.card .card-content[data-v-03092804]{white-space:pre-wrap}.md-card .md-card-content[data-v-03092804]:last-child{padding-bottom:16px!important}.resources-list-items-cards .desc_quantity[data-v-03092804]{display:flex;gap:.5rem;align-items:center}.md-radio .md-radio-label{height:auto!important}.appt-types-list-assossiated{display:flex;flex-direction:column}.appt-types-list-assossiated label{display:inline-flex;align-items:center;gap:6px}.resource-item[data-v-afedf28a]{position:relative;border-bottom:1px solid #dcdcdc;margin-left:.5rem}.resources_settings_resources .tootlbar-resources-container[data-v-afedf28a]{align-items:center}.resources_settings_resources .empty-state-actions[data-v-afedf28a]{display:flex;justify-content:center;gap:.5rem}@media screen and (max-width:600px){.resources_settings_resources .empty-state-actions[data-v-afedf28a]{flex-wrap:wrap}}.resource-group{margin:24px 0 0!important}.md-radio[data-v-7c70be96]{margin:16px 8px 8px 0!important}.embed-code{width:100%;height:150px;overflow-y:auto;resize:none;background-color:#fff;border:1px solid #e0e0e0;outline:1px solid transparent;padding:1rem;transition:all .4s cubic-bezier(.25,.8,.25,1)}.embed-code:focus{border-color:#8bc34a;outline:1px solid #8bc34a}.support-debugger .support-debugger-toolbar{display:flex;align-items:center;margin:12px 0}.support-debugger .support-debugger-toolbar .support-debugger-actions{margin-left:auto}.support-debugger .support-debugger-toolbar .support-debugger-actions .md-button{margin-right:0}.support-debugger .md-switch-label{display:inline-block;vertical-align:top}.support-debugger .support-debugger-log-container{height:500px;position:relative;background-color:#e8f5e9;overflow-y:auto}.support-debugger .support-debugger-log-container .support-debugger-loading,.support-debugger .support-debugger-log-container .support-debugger-log-empty{position:absolute;top:50%;left:50%;padding:1em;transform:translate(-50%,-50%);text-align:center}.support-debugger .support-debugger-log-container .support-debugger-loading{width:100%;max-width:250px}.support-debugger .support-debugger-log-container .support-debugger-log-empty{width:100%;max-width:400px}.support-debugger .support-debugger-log-container .support-debugger-log-empty .icon{display:block;margin:0 auto 32px;color:#558b2f}.support-debugger .support-debugger-contents{margin:0}.support-debugger .debug-log-empty{padding:1em}.support-debugger .debug-log-empty h3,.support-debugger .debug-log-empty p{margin:0}.support-debugger .debug-log-empty h3+p{margin-top:1em}.foxy-list-item.download-debug-log .md-icon,.foxy-list-item.download-debug-log span,.foxy-list-item.refresh-debug-log .md-icon,.foxy-list-item.refresh-debug-log span{color:#558b2f}.foxy-list-item.clear-debug-log .md-icon,.foxy-list-item.clear-debug-log span{color:#ff5722!important}.ssa-guides.contact{width:100%;border-left:1px solid #eceff1}.ssa-guides.contact .md-title{padding:0 16px}.md-error-toggle .md-icon{margin:-2px 0 0 1rem}.md-layout.ssa-contact-support{margin-bottom:0!important}.md-layout.ssa-contact-support .md-dialog-content{height:auto}.md-layout.ssa-contact-support .md-dialog-actions{width:100%}.md-layout.ssa-contact-support .success-icon{font-size:5rem;height:auto;width:auto;color:#fff!important}.md-layout.ssa-contact-support .success-title{padding:35px;text-align:center;width:100%;height:auto;background-color:#689f38;margin-bottom:1rem}.success-content{text-align:center;padding-top:12px!important}.success-content p:first-of-type{font-size:16px;margin-bottom:1rem}.support-error-raw{padding:1em;width:100%;max-height:4rem;overflow-y:auto;border:none;box-sizing:border-box;font-family:monospace;line-height:1.5;white-space:pre-wrap;background:#fbe9e7;outline:none;resize:none;-webkit-box-sizing:border-box}.support-error-copy{padding:.5em 1em;margin:0}.support-error-copy .md-icon{width:16px;height:16px;min-width:16px;min-height:16px;font-size:16px;margin:0 0 0 8px}.support-local>.icon-list,.support-local>.md-title,.support-local>p,.support>.icon-list,.support>.md-title,.support>p{margin-left:1rem;margin-right:1rem}.wizard[data-v-b9cde8ea]{left:0;margin:0 auto;max-width:800px;right:0;width:100%}.wizard .settings-button[data-v-b9cde8ea]{width:100%;display:flex;flex-flow:row-reverse}.wizard .settings-button .settings-close-fab[data-v-b9cde8ea]{position:absolute;bottom:2rem;right:2rem}.wizard-complete-wrapper{padding:0 1rem}.wizard-complete-wrapper .wizard-complete{background:#fff;padding:1rem!important;padding-top:2rem;text-align:center;margin:auto}.wizard-complete-wrapper .wizard-complete .button-bar{justify-content:center}.wizard-google-calender[data-v-bfcbce88]{display:flex;flex-direction:column;gap:1rem}.wizard-google-calender .md-whiteframe[data-v-bfcbce88]{background:#fff;padding:1em 2em}.mdc-typography{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-font-family,Roboto,sans-serif)}.md-display-4,.mdc-typography--headline1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:6rem;font-size:var(--mdc-typography-headline1-font-size,6rem);line-height:6rem;line-height:var(--mdc-typography-headline1-line-height,6rem);font-weight:300;font-weight:var(--mdc-typography-headline1-font-weight,300);letter-spacing:-.015625em;letter-spacing:var(--mdc-typography-headline1-letter-spacing,-.015625em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline1-text-decoration,inherit);text-decoration:var(--mdc-typography-headline1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline1-text-transform,inherit)}.md-display-3,.mdc-typography--headline2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:3.75rem;font-size:var(--mdc-typography-headline2-font-size,3.75rem);line-height:3.75rem;line-height:var(--mdc-typography-headline2-line-height,3.75rem);font-weight:300;font-weight:var(--mdc-typography-headline2-font-weight,300);letter-spacing:-.0083333333em;letter-spacing:var(--mdc-typography-headline2-letter-spacing,-.0083333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline2-text-decoration,inherit);text-decoration:var(--mdc-typography-headline2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline2-text-transform,inherit)}.md-display-2,.mdc-typography--headline3{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline3-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:3rem;font-size:var(--mdc-typography-headline3-font-size,3rem);line-height:3.125rem;line-height:var(--mdc-typography-headline3-line-height,3.125rem);font-weight:400;font-weight:var(--mdc-typography-headline3-font-weight,400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline3-letter-spacing,normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline3-text-decoration,inherit);text-decoration:var(--mdc-typography-headline3-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline3-text-transform,inherit)}.md-display-1,.mdc-typography--headline4{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline4-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:2.125rem;font-size:var(--mdc-typography-headline4-font-size,2.125rem);line-height:2.5rem;line-height:var(--mdc-typography-headline4-line-height,2.5rem);font-weight:400;font-weight:var(--mdc-typography-headline4-font-weight,400);letter-spacing:.0073529412em;letter-spacing:var(--mdc-typography-headline4-letter-spacing,.0073529412em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline4-text-decoration,inherit);text-decoration:var(--mdc-typography-headline4-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline4-text-transform,inherit)}.md-headline,.mdc-typography--headline5{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline5-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1.5rem;font-size:var(--mdc-typography-headline5-font-size,1.5rem);line-height:2rem;line-height:var(--mdc-typography-headline5-line-height,2rem);font-weight:400;font-weight:var(--mdc-typography-headline5-font-weight,400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline5-letter-spacing,normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline5-text-decoration,inherit);text-decoration:var(--mdc-typography-headline5-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline5-text-transform,inherit)}.md-title,.mdc-typography--headline6{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline6-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size,1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height,2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight,500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing,.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform,inherit)}.md-subheading,.mdc-typography--subtitle1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit)}.md-subhead,.mdc-typography--subtitle2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size,.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height,1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight,500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing,.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform,inherit)}.md-body-1,.mdc-typography--body1,p{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size,1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height,1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight,400);letter-spacing:.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing,.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform,inherit)}.md-body-2,.mdc-typography--body2,body{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit)}.md-body-2,.mdc-typography--body2,.mdc-typography--caption,body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.mdc-typography--caption{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit)}.mdc-typography--button{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size,.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height,2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight,500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing,.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration,none);text-decoration:var(--mdc-typography-button-text-decoration,none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform,uppercase)}.mdc-typography--button,.mdc-typography--overline{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.mdc-typography--overline{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-overline-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-overline-font-size,.75rem);line-height:2rem;line-height:var(--mdc-typography-overline-line-height,2rem);font-weight:500;font-weight:var(--mdc-typography-overline-font-weight,500);letter-spacing:.1666666667em;letter-spacing:var(--mdc-typography-overline-letter-spacing,.1666666667em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-overline-text-decoration,none);text-decoration:var(--mdc-typography-overline-text-decoration,none);text-transform:uppercase;text-transform:var(--mdc-typography-overline-text-transform,uppercase)}:root{--mdc-theme-primary:#558b2f;--mdc-theme-secondary:#558b2f;--mdc-theme-background:#fff;--mdc-theme-surface:#fff;--mdc-theme-error:#d84315;--mdc-theme-on-primary:#fff;--mdc-theme-on-secondary:#fff;--mdc-theme-on-surface:#000;--mdc-theme-on-error:#fff;--mdc-theme-text-primary-on-background:rgba(0,0,0,.87);--mdc-theme-text-secondary-on-background:rgba(0,0,0,.54);--mdc-theme-text-hint-on-background:rgba(0,0,0,.38);--mdc-theme-text-disabled-on-background:rgba(0,0,0,.38);--mdc-theme-text-icon-on-background:rgba(0,0,0,.38);--mdc-theme-text-primary-on-light:rgba(0,0,0,.87);--mdc-theme-text-secondary-on-light:rgba(0,0,0,.54);--mdc-theme-text-hint-on-light:rgba(0,0,0,.38);--mdc-theme-text-disabled-on-light:rgba(0,0,0,.38);--mdc-theme-text-icon-on-light:rgba(0,0,0,.38);--mdc-theme-text-primary-on-dark:#fff;--mdc-theme-text-secondary-on-dark:hsla(0,0%,100%,.7);--mdc-theme-text-hint-on-dark:hsla(0,0%,100%,.5);--mdc-theme-text-disabled-on-dark:hsla(0,0%,100%,.5);--mdc-theme-text-icon-on-dark:hsla(0,0%,100%,.5)}.mdc-theme--primary{color:#558b2f!important;color:var(--mdc-theme-primary,#558b2f)!important}.mdc-theme--secondary{color:#558b2f!important;color:var(--mdc-theme-secondary,#558b2f)!important}.mdc-theme--background{background-color:#fff;background-color:var(--mdc-theme-background,#fff)}.mdc-theme--surface{background-color:#fff;background-color:var(--mdc-theme-surface,#fff)}.mdc-theme--error{color:#d84315!important;color:var(--mdc-theme-error,#d84315)!important}.mdc-theme--on-primary{color:#fff!important;color:var(--mdc-theme-on-primary,#fff)!important}.mdc-theme--on-secondary{color:#fff!important;color:var(--mdc-theme-on-secondary,#fff)!important}.mdc-theme--on-surface{color:#000!important;color:var(--mdc-theme-on-surface,#000)!important}.mdc-theme--on-error{color:#fff!important;color:var(--mdc-theme-on-error,#fff)!important}.mdc-theme--text-primary-on-background{color:rgba(0,0,0,.87)!important;color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))!important}.mdc-theme--text-secondary-on-background{color:rgba(0,0,0,.54)!important;color:var(--mdc-theme-text-secondary-on-background,rgba(0,0,0,.54))!important}.mdc-theme--text-hint-on-background{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-hint-on-background,rgba(0,0,0,.38))!important}.mdc-theme--text-disabled-on-background{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-disabled-on-background,rgba(0,0,0,.38))!important}.mdc-theme--text-icon-on-background{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-icon-on-background,rgba(0,0,0,.38))!important}.mdc-theme--text-primary-on-light{color:rgba(0,0,0,.87)!important;color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))!important}.mdc-theme--text-secondary-on-light{color:rgba(0,0,0,.54)!important;color:var(--mdc-theme-text-secondary-on-light,rgba(0,0,0,.54))!important}.mdc-theme--text-hint-on-light{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-hint-on-light,rgba(0,0,0,.38))!important}.mdc-theme--text-disabled-on-light{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-disabled-on-light,rgba(0,0,0,.38))!important}.mdc-theme--text-icon-on-light{color:rgba(0,0,0,.38)!important;color:var(--mdc-theme-text-icon-on-light,rgba(0,0,0,.38))!important}.mdc-theme--text-primary-on-dark{color:#fff!important;color:var(--mdc-theme-text-primary-on-dark,#fff)!important}.mdc-theme--text-secondary-on-dark{color:hsla(0,0%,100%,.7)!important;color:var(--mdc-theme-text-secondary-on-dark,hsla(0,0%,100%,.7))!important}.mdc-theme--text-hint-on-dark{color:hsla(0,0%,100%,.5)!important;color:var(--mdc-theme-text-hint-on-dark,hsla(0,0%,100%,.5))!important}.mdc-theme--text-disabled-on-dark{color:hsla(0,0%,100%,.5)!important;color:var(--mdc-theme-text-disabled-on-dark,hsla(0,0%,100%,.5))!important}.mdc-theme--text-icon-on-dark{color:hsla(0,0%,100%,.5)!important;color:var(--mdc-theme-text-icon-on-dark,hsla(0,0%,100%,.5))!important}.mdc-theme--primary-bg{background-color:#558b2f!important;background-color:var(--mdc-theme-primary,#558b2f)!important}.mdc-theme--secondary-bg{background-color:#558b2f!important;background-color:var(--mdc-theme-secondary,#558b2f)!important}.confirm{margin-left:auto;margin-right:auto;max-width:1200px}.foxy-divider{height:1px;margin:0;padding:0;display:block;border:0;background-color:rgba(0,0,0,.12)}.foxy-list-default{margin:0;padding:8px 0;list-style-type:none;line-height:1.5rem;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}.foxy-list-default.fit-content{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.foxy-list-default li{position:relative}.foxy-list-default .foxy-list-container{min-height:88px;padding:4px!important;margin:0;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;flex:1;position:relative;font-size:16px;font-weight:400;text-align:left;text-transform:none;gap:4px}.foxy-list-default .mdc-menu-surface{z-index:3}.foxy-list-default .mdc-menu-surface--anchor .mdc-touch-target-wrapper{z-index:2;position:relative}.foxy-button-ghost{border:unset;background-color:unset;width:100%;margin:0;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border-radius:0;outline:none}.foxy-button-ghost:not([disabled]){cursor:pointer}.foxy-button-ghost:active:not([disabled]){background-color:hsla(0,0%,60%,.4)}.foxy-button-ghost:hover:not([disabled]):not(.md-raised){background-color:hsla(0,0%,60%,.2);text-decoration:none}.checkboxes-list-flex-row{display:flex;flex-direction:column}.checkboxes-list-flex-row label{display:inline-flex;align-items:center;gap:6px}.actions-button-flex{display:flex;gap:8px}.blackout-dates-selected .mdc-deprecated-list-item__text,.blackout-dates-selected li.foxy-list-item a{width:100%}.blackout-dates-selected .mdc-deprecated-list-item__text .md-list-item-container{min-height:40px;font-size:13px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;flex:1}.md-show{display:none}@media screen and (min-width:601px){.md-show{display:flex}}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-staff-link{font-size:small;margin-left:10px}.text-break-all{word-break:break-all;overflow-wrap:anywhere}.text-break{word-break:break-word}.md-elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.md-elevation-1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.md-elevation-2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.md-elevation-3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.md-elevation-4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.md-elevation-5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.md-elevation-6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.md-elevation-7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.md-elevation-8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.md-elevation-9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.md-elevation-10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.md-elevation-11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.md-elevation-12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.md-elevation-13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.md-elevation-14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.md-elevation-15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.md-elevation-16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.md-elevation-17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.md-elevation-18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.md-elevation-19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.md-elevation-20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.md-elevation-21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.md-elevation-22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.md-elevation-23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.md-elevation-24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.md-layout .md-layout{flex:1}.md-layout .md-layout-nowrap{flex-wrap:nowrap}.md-layout.md-centered{width:100%;max-width:1200px;margin:0 auto}.md-layout.md-gutter{margin-right:-20px;margin-left:-20px}.md-layout.md-gutter>.md-layout-item{padding-right:20px;padding-left:20px}@media(max-width:1903px){.md-layout.md-gutter{margin-right:-20px;margin-left:-20px}.md-layout.md-gutter>.md-layout-item{padding-right:20px;padding-left:20px}}@media(max-width:1280px){.md-layout.md-gutter{margin-right:-12px;margin-left:-12px}.md-layout.md-gutter>.md-layout-item{padding-right:12px;padding-left:12px}}@media(max-width:960px){.md-layout.md-gutter{margin-right:-8px;margin-left:-8px}.md-layout.md-gutter>.md-layout-item{padding-right:8px;padding-left:8px}}@media(max-width:600px){.md-layout.md-gutter{margin-right:-4px;margin-left:-4px}.md-layout.md-gutter>.md-layout-item{padding-right:4px;padding-left:4px}}.md-layout.md-alignment-top-left{justify-content:flex-start;align-items:flex-start}.md-layout.md-alignment-top-center{justify-content:center;align-items:flex-start}.md-layout.md-alignment-top-right{justify-content:flex-end;align-items:flex-start}.md-layout.md-alignment-top-space-around{justify-content:space-around;align-items:flex-start}.md-layout.md-alignment-top-space-between{justify-content:space-between;align-items:flex-start}.md-layout.md-alignment-center-left{justify-content:flex-start;align-items:center}.md-layout.md-alignment-center,.md-layout.md-alignment-center-center{justify-content:center;align-items:center}.md-layout.md-alignment-center-right{justify-content:flex-end;align-items:center}.md-layout.md-alignment-center-space-around{justify-content:space-around;align-items:center}.md-layout.md-alignment-center-space-between{justify-content:space-between;align-items:center}.md-layout.md-alignment-bottom-left{justify-content:flex-start;align-items:flex-end}.md-layout.md-alignment-bottom-center{justify-content:center;align-items:flex-end}.md-layout.md-alignment-bottom-right{justify-content:flex-end;align-items:flex-end}.md-layout.md-alignment-bottom-space-around{justify-content:space-around;align-items:flex-end}.md-layout.md-alignment-bottom-space-between{justify-content:space-between;align-items:flex-end}.md-layout.md-alignment-space-around-left{justify-content:flex-start;align-items:space-around}.md-layout.md-alignment-space-around-center{justify-content:center;align-items:space-around}.md-layout.md-alignment-space-around-right{justify-content:flex-end;align-items:space-around}.md-layout.md-alignment-space-around-space-around{justify-content:space-around;align-items:space-around}.md-layout.md-alignment-space-around-space-between{justify-content:space-between;align-items:space-around}.md-layout.md-alignment-space-between-left{justify-content:flex-start;align-items:space-between}.md-layout.md-alignment-space-between-center{justify-content:center;align-items:space-between}.md-layout.md-alignment-space-between-right{justify-content:flex-end;align-items:space-between}.md-layout.md-alignment-space-between-space-around{justify-content:space-around;align-items:space-between}.md-layout.md-alignment-space-between-space-between{justify-content:space-between;align-items:space-between}.main-app-layout .md-layout .md-layout{margin-bottom:0}.md-layout-item{flex:1 1}.md-layout-item.md-layout{margin:0}.md-layout-item.md-size{flex:1 1}.md-layout-item.md-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}@media(min-width:1904px){.md-layout-item.md-xlarge-size{flex:1 1}.md-layout-item.md-xlarge-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-xlarge-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-xlarge-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-xlarge-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-xlarge-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-xlarge-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-xlarge-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-xlarge-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-xlarge-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-xlarge-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-xlarge-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-xlarge-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-xlarge-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-xlarge-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-xlarge-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-xlarge-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-xlarge-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-xlarge-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-xlarge-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-xlarge-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-xlarge-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-xlarge-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}}@media(max-width:1903px){.md-layout-item.md-large-size{flex:1 1}.md-layout-item.md-large-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-large-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-large-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-large-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-large-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-large-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-large-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-large-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-large-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-large-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-large-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-large-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-large-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-large-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-large-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-large-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-large-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-large-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-large-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-large-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-large-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-large-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}}@media(max-width:1280px){.md-layout-item.md-medium-size{flex:1 1}.md-layout-item.md-medium-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-medium-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-medium-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-medium-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-medium-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-medium-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-medium-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-medium-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-medium-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-medium-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-medium-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-medium-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-medium-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-medium-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-medium-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-medium-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-medium-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-medium-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-medium-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-medium-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-medium-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-medium-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}}@media(max-width:960px){.md-layout-item.md-small-size{flex:1 1}.md-layout-item.md-small-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-small-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-small-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-small-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-small-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-small-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-small-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-small-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-small-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-small-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-small-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-small-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-small-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-small-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-small-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-small-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-small-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-small-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-small-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-small-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-small-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-small-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}}@media(max-width:600px){.md-layout-item.md-xsmall-size{flex:1 1}.md-layout-item.md-xsmall-size-5{min-width:5%;max-width:5%;flex:0 1 5%}.md-layout-item.md-xsmall-size-10{min-width:10%;max-width:10%;flex:0 1 10%}.md-layout-item.md-xsmall-size-15{min-width:15%;max-width:15%;flex:0 1 15%}.md-layout-item.md-xsmall-size-20{min-width:20%;max-width:20%;flex:0 1 20%}.md-layout-item.md-xsmall-size-25{min-width:25%;max-width:25%;flex:0 1 25%}.md-layout-item.md-xsmall-size-30{min-width:30%;max-width:30%;flex:0 1 30%}.md-layout-item.md-xsmall-size-35{min-width:35%;max-width:35%;flex:0 1 35%}.md-layout-item.md-xsmall-size-40{min-width:40%;max-width:40%;flex:0 1 40%}.md-layout-item.md-xsmall-size-45{min-width:45%;max-width:45%;flex:0 1 45%}.md-layout-item.md-xsmall-size-50{min-width:50%;max-width:50%;flex:0 1 50%}.md-layout-item.md-xsmall-size-55{min-width:55%;max-width:55%;flex:0 1 55%}.md-layout-item.md-xsmall-size-60{min-width:60%;max-width:60%;flex:0 1 60%}.md-layout-item.md-xsmall-size-65{min-width:65%;max-width:65%;flex:0 1 65%}.md-layout-item.md-xsmall-size-70{min-width:70%;max-width:70%;flex:0 1 70%}.md-layout-item.md-xsmall-size-75{min-width:75%;max-width:75%;flex:0 1 75%}.md-layout-item.md-xsmall-size-80{min-width:80%;max-width:80%;flex:0 1 80%}.md-layout-item.md-xsmall-size-85{min-width:85%;max-width:85%;flex:0 1 85%}.md-layout-item.md-xsmall-size-90{min-width:90%;max-width:90%;flex:0 1 90%}.md-layout-item.md-xsmall-size-95{min-width:95%;max-width:95%;flex:0 1 95%}.md-layout-item.md-xsmall-size-33{min-width:33.3333%;max-width:33.3333%;flex:0 1 33.3333%}.md-layout-item.md-xsmall-size-66{min-width:66.6666%;max-width:66.6666%;flex:0 1 66.6666%}.md-layout-item.md-xsmall-size-100{min-width:100%;max-width:100%;margin-left:0!important;flex:1 1 100%}}.md-hide{display:none}@media(min-width:1904px){.md-xlarge-hide{display:none}}@media(max-width:1903px){.md-large-hide{display:none}}@media(max-width:1280px){.md-medium-hide{display:none}}@media(max-width:960px){.md-small-hide{display:none}}@media(max-width:600px){.md-xsmall-hide{display:none}}.mdc-layout-grid>.md-layout>.md-layout{margin-bottom:0}:root{--mdc-layout-grid-column-width-desktop:72px;--mdc-layout-grid-column-width-tablet:72px;--mdc-layout-grid-gutter-phone:16px;--mdc-layout-grid-column-width-phone:72px}@media(min-width:840px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:24px;padding:var(--mdc-layout-grid-margin-desktop,24px)}}@media(min-width:600px)and (max-width:839px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-tablet,16px)}}@media(max-width:599px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-phone,16px)}}@media(min-width:840px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px)/2*-1)}@supports(display:grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:24px;grid-gap:var(--mdc-layout-grid-gutter-desktop,24px);grid-template-columns:repeat(12,minmax(0,1fr))}}}@media(min-width:600px)and (max-width:839px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px)/2*-1)}@supports(display:grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-tablet,16px);grid-template-columns:repeat(8,minmax(0,1fr))}}}@media(max-width:599px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px)/2*-1)}@supports(display:grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-phone,16px);grid-template-columns:repeat(4,minmax(0,1fr))}}}@media(min-width:840px){.mdc-layout-grid__cell{width:calc(33.33333% - 24px);width:calc(33.33333% - var(--mdc-layout-grid-gutter-desktop, 24px));box-sizing:border-box;margin:12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px)/2)}@supports(display:grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4;margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:calc(8.33333% - 24px);width:calc(8.33333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:calc(16.66667% - 24px);width:calc(16.66667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:calc(25% - 24px);width:calc(25% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:calc(33.33333% - 24px);width:calc(33.33333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:calc(41.66667% - 24px);width:calc(41.66667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:calc(50% - 24px);width:calc(50% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:calc(58.33333% - 24px);width:calc(58.33333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:calc(66.66667% - 24px);width:calc(66.66667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:calc(75% - 24px);width:calc(75% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:auto;grid-column-end:span 9}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:calc(83.33333% - 24px);width:calc(83.33333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:auto;grid-column-end:span 10}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:calc(91.66667% - 24px);width:calc(91.66667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:auto;grid-column-end:span 11}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:calc(100% - 24px);width:calc(100% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display:grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:auto;grid-column-end:span 12}}}@media(min-width:600px)and (max-width:839px){.mdc-layout-grid__cell{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px)/2)}@supports(display:grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4;margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:calc(12.5% - 16px);width:calc(12.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:calc(37.5% - 16px);width:calc(37.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:calc(62.5% - 16px);width:calc(62.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:calc(87.5% - 16px);width:calc(87.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:auto;grid-column-end:span 8}}}@media(max-width:599px){.mdc-layout-grid__cell{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px)/2)}@supports(display:grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4;margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display:grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:auto;grid-column-end:span 4}}}.mdc-layout-grid__cell--order-1{order:1}.mdc-layout-grid__cell--order-2{order:2}.mdc-layout-grid__cell--order-3{order:3}.mdc-layout-grid__cell--order-4{order:4}.mdc-layout-grid__cell--order-5{order:5}.mdc-layout-grid__cell--order-6{order:6}.mdc-layout-grid__cell--order-7{order:7}.mdc-layout-grid__cell--order-8{order:8}.mdc-layout-grid__cell--order-9{order:9}.mdc-layout-grid__cell--order-10{order:10}.mdc-layout-grid__cell--order-11{order:11}.mdc-layout-grid__cell--order-12{order:12}.mdc-layout-grid__cell--align-top{align-self:flex-start}@supports(display:grid){.mdc-layout-grid__cell--align-top{align-self:start}}.mdc-layout-grid__cell--align-middle{align-self:center}.mdc-layout-grid__cell--align-bottom{align-self:flex-end}@supports(display:grid){.mdc-layout-grid__cell--align-bottom{align-self:end}}@media(min-width:840px){.mdc-layout-grid--fixed-column-width{width:1176px;width:calc(var(--mdc-layout-grid-column-width-desktop, 72px)*12 + var(--mdc-layout-grid-gutter-desktop, 24px)*11 + var(--mdc-layout-grid-margin-desktop, 24px)*2)}}@media(min-width:600px)and (max-width:839px){.mdc-layout-grid--fixed-column-width{width:720px;width:calc(var(--mdc-layout-grid-column-width-tablet, 72px)*8 + var(--mdc-layout-grid-gutter-tablet, 16px)*7 + var(--mdc-layout-grid-margin-tablet, 16px)*2)}}@media(max-width:599px){.mdc-layout-grid--fixed-column-width{width:368px;width:calc(var(--mdc-layout-grid-column-width-phone, 72px)*4 + var(--mdc-layout-grid-gutter-phone, 16px)*3 + var(--mdc-layout-grid-margin-phone, 16px)*2)}}.mdc-layout-grid--align-left{margin-right:auto;margin-left:0}.mdc-layout-grid--align-right{margin-right:0;margin-left:auto}:root{--mdc-layout-grid-column-width-desktop:84px;--mdc-layout-grid-margin-desktop:24px;--mdc-layout-grid-gutter-desktop:24px;--mdc-layout-grid-margin-tablet:16px;--mdc-layout-grid-gutter-tablet:16px;--mdc-layout-grid-margin-phone:16px;--mdc-layout-grid-gutter-phone:8px}.md-toolbar{background:var(--mdc-theme-primary)}.md-toolbar,.md-toolbar .md-icon.material-icons.mdc-theme-name--default,.md-toolbar li.foxy-button-ghost,.md-toolbar li.mdc-button{color:var(--mdc-theme-on-primary)}.md-toolbar span.mdc-deprecated-list-item__text{gap:2px}.md-toolbar .foxy-list .foxy-list-item a[role=option]{justify-content:flex-start}.mdc-drawer{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;position:absolute;top:0}.mdc-drawer-app-content .drawerContentLayout{height:100vh;position:fixed;top:0;left:0;width:100vw;z-index:5}.mdc-drawer__header{margin-top:20px}#main-left-drawer li{padding:4px}#main-left-drawer li.sub-item{padding-left:22px}.booking-flow-notice .md-card-header{padding-bottom:10px}.booking-flow-notice .md-card-header .md-title{display:flex;align-items:center;gap:6px}.booking-flow-notice .md-card-header .md-title p{margin:0;display:flex}.booking-flow-notice .md-card-header .md-title p i{margin:0;color:mui-palette("yellow",700)}.booking-flow-notice .md-card-content .md-card-area p,.booking-flow-notice .md-card-content .md-card-area ul{margin:.5px}.booking-flow-notice .md-card-actions a{width:100%}html *,html :after,html :before{box-sizing:inherit}audio,canvas,embed,iframe,img,object,svg,video{max-width:100%;font-style:italic;vertical-align:middle}body{margin:0}body.wp-admin,body:not(.admin-bar){background-color:#eceff1;background:linear-gradient(0deg,#eceff1 0,#eceff1)}#app{box-sizing:border-box;height:100%;min-height:100vh;position:relative;width:100%}#app.embed{min-height:auto}.app-error,.app-loading{left:50%;position:absolute;top:50%;text-align:center;transform:translate(-50%,-50%)}.md-whiteframe .app-error,.md-whiteframe .app-loading{left:auto;margin:1rem 0;position:static;top:auto;transform:none}.app-header{box-sizing:border-box;height:8rem;padding:1rem;margin:0 auto;max-width:1600px;overflow:hidden;text-align:left;width:100%}@media screen and (min-width:601px){.app-header{padding:2rem}}.app-header img{height:auto;max-height:100%;max-width:100%;width:auto}@media screen and (max-width:1750px){.app-header img{margin-left:64px}}.view-container{box-sizing:border-box;margin:0 auto;max-width:1600px;padding:0 1rem 1rem;width:100%}@media screen and (min-width:s){.view-container{padding:0 2rem 2rem}}.backToWpBtn{margin:0;position:absolute;z-index:5;top:24px;left:24px}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}hr{background:rgba(0,0,0,.12);height:1px;margin:2rem 15%}fieldset,hr{border:0 none}fieldset{background:#fff;margin:8px 0;padding:16px}pre{background:#fbe9e7;box-sizing:border-box;max-width:100%;overflow-x:auto;padding:1em;white-space:pre-wrap}dt{font-size:1rem}dd+dt{margin-top:.5rem}.button-bar{display:flex;gap:10px;background:#fff;margin:8px 0;padding:16px}.button-bar>button:first-child{margin-left:0}.button-bar>button:last-child{margin-right:0}.button-bar.transparent{background:transparent}@media screen and (max-width:600px){.button-bar{flex-wrap:wrap}}.align-right{justify-content:flex-end;text-align:right}.flex-gap-7{display:flex;gap:7px}.align-center{text-align:center}.justify-center{justify-content:center}.align-left{text-align:left}.full-width,.w-full{width:100%}.limited-width{max-width:600px}.error-message{color:#e64a19}.notice-message{color:#757575;font-size:16px;font-weight:400;line-height:1.5}.link{text-decoration:none;background:transparent;border:0 none;color:#558b2f!important;cursor:pointer;display:inline-block;font-family:inherit;font-size:inherit;margin:0;padding:0}.link:focus,.link:hover{text-decoration:underline}.beta-wrap,.coming-soon-wrap{height:10rem;overflow:hidden;position:absolute;right:-3px;top:-3px;width:10rem}.beta,.coming-soon{background:#ad1457;background-image:linear-gradient(top,#f06292,#ad1457);box-shadow:0 0 5px rgba(0,0,0,.6);color:#fff;right:-55px;padding:.4375rem;position:absolute;text-align:center;text-transform:uppercase;transform:rotate(45deg);top:30px;width:200px}.beta{background:#c0ca33;background-image:linear-gradient(top,#f0f4c3,#c0ca33);color:#000}.media-caption{bottom:0;color:#fff;font-size:1rem;left:0;line-height:1;opacity:.85;padding:.5rem 1rem;position:absolute;right:0;text-align:center;text-transform:uppercase}.media-caption.plus{background:linear-gradient(135deg,#2196f3,#009688)}.media-caption.pro{background:linear-gradient(135deg,#009688,#8bc34a)}.media-caption.business{background:linear-gradient(135deg,#4caf50,#ff9800)}.promo-img{background:linear-gradient(65deg,#eeff41,#c0ca33)}.promo-img.promo-plus{background:linear-gradient(135deg,#4fc3f7,#4dd0e1)}.promo-img.promo-pro{background:linear-gradient(135deg,#ff9800,#ffeb3b)}.promo-img.promo-business{background:linear-gradient(125deg,#ffeb3b,#00bcd4)}.settings-list{display:flex;flex-direction:column;list-style:none;margin:0;position:relative;padding:0}.settings-list>li{height:auto;padding:16px;position:relative;z-index:2}.settings-list .settings-list-header{font-size:16px;font-weight:400;letter-spacing:.01em;line-height:24px;margin:0;padding:0}.settings-list .settings-list-content{font-size:24px;font-weight:400;letter-spacing:0;line-height:32px;margin:0;padding:0;display:flex;align-items:center}.settings-list .md-icon{cursor:pointer}.settings-list .settings-list-item{width:100%}.settings-list .settings-list-item.md-layout{flex:0 1 auto}.settings-list .settings-list-item .md-card .md-card-media+.md-card-header{flex:1}@media screen and (min-width:601px){.settings-list .settings-list-item{width:50%}}@media screen and (min-width:960px){.settings-list .settings-list-item{width:33.3333333333%}}.md-layout.main-settings-col{min-width:65%;z-index:1}@media screen and (min-width:xlarge){.md-layout.main-settings-col{flex-basis:80%;max-width:80%}}.md-layout.main-settings-col .md-toolbar .md-button.router-link-active{background-color:#689f38}.md-layout.main-settings-col .md-toolbar .md-button.md-dense{margin:3px;padding-left:12px;padding-right:12px}.md-toolbar .foxy-list .foxy-list-item a{padding:0;display:flex;justify-content:center;align-items:center}.md-layout.side-settings-col{flex:0 1 auto;width:100%;z-index:0}@media(min-width:625px){.md-layout.side-settings-col{width:30%}}@media screen and (min-width:1920px){.md-layout.side-settings-col{width:25%}}@media screen and (min-width:xlarge){.md-layout.side-settings-col{width:20%}}.license-validating{max-width:20rem}.license-validating .md-progress{margin:1rem 0 .5rem}.inline-license-button .md-button{display:inline-block;margin:.2rem 0 1.2rem;padding-top:.5rem;width:100%}.display-license-key{font-weight:500;line-height:36px;margin:6px 0}form .ssa-accordion{transition:opacity}form.saving .ssa-accordion{opacity:.5}.ssa-menu{padding:0 8px!important;display:none!important}@media screen and (min-width:720px){.ssa-menu{display:flex!important}}.ssa-menu.active{background:rgba(0,0,0,.1)}.staff-wp-indicator{color:#689f38!important;display:inline-block;font-size:12px;font-weight:700}.settings-list-item .mdc-card__content{height:unset}.license-key-form{margin-bottom:1rem}.license-key-form>div.md-layout:first-of-type{display:flex;align-items:start;gap:8px}.license-key-form>div.md-layout:first-of-type>.md-layout:first-of-type{flex:1 0 auto}.license-key-form>div.md-layout:first-of-type>.license-actions-layout{flex-grow:0;margin-top:18px}.license-key-form .license-key-valid>:nth-child(2){display:flex;align-items:center;gap:12px}.license-key-form .license-key-form-layout{display:flex;flex-direction:column}@media screen and (min-width:601px){.license-key-form .license-key-form-layout{gap:24px;align-items:end;flex-direction:row}}.license-key-form .license-key-form-layout .md-layout:first-child{flex:1 1 100%}.license-key-form .license-key-form-layout+div.md-layout p{margin-bottom:0}.settings-whiteframe .settings-header{margin:12px auto 24px auto}.ssa-webex-user .md-display-1,.ssa-zoom-user .md-display-1{color:rgba(0,0,0,.57)}.ssa-webex-user .md-subhead p,.ssa-webex-user .meeting-url,.ssa-zoom-user .md-subhead p,.ssa-zoom-user .meeting-url{color:rgba(0,0,0,.87);font-size:14px!important}.ssa-webex-user .user,.ssa-zoom-user .user{color:rgba(0,0,0,.87)}div.md-toolbar.main-app-toolbar{z-index:1}.date-time-picker-wrapper{width:100%}.rd-container{background-color:#fff;display:none;min-width:320px;text-align:center;width:100%;z-index:1}.rd-container-attachment{position:absolute}.rd-month{box-sizing:border-box;display:inline-block;padding:10px;position:relative;width:100%}.rd-month:last-child{margin-right:0}.rd-month-label{background-color:#8bc34a;margin:-10px -10px 0 -10px;padding:20px;white-space:nowrap}.rd-back,.rd-month-label,.rd-next{color:#fff;font-size:32px;line-height:1.1875}.rd-back,.rd-next{background:none;border:none;cursor:pointer;font-family:Material Icons;outline:none;padding:20px 0;position:absolute;margin:0;top:0}.rd-back[disabled],.rd-next[disabled]{cursor:default}.rd-back{left:0}.rd-next{right:0}.rd-back:before{content:"";display:block}.rd-next:before{content:"";display:block}.rd-days{margin-top:10px;width:100%}.rd-day-head{padding:10px}.rd-day-body{border-radius:100%;cursor:pointer;padding:10px;text-align:center;transition:background .2s ease-in-out}.rd-day-body:hover{background-color:#eee}.rd-day-selected,.rd-time-option:hover,.rd-time-selected{background-color:#8bc34a;color:#fff;cursor:pointer}.rd-day-next-month,.rd-day-prev-month{color:#999}.rd-day-disabled{color:#ccc;cursor:default}.rd-time{display:inline-block;margin-top:5px;min-width:80px;position:relative}.rd-time-list{background-color:#fff;bottom:0;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);color:#333;display:none;left:0;right:0;max-height:160px;overflow-y:scroll;position:absolute}.rd-time-option,.rd-time-selected{padding:5px}.rd-day-concealed{visibility:hidden}.md-theme-red .rd-day-selected,.md-theme-red .rd-month-label,.md-theme-red .rd-time-option:hover,.md-theme-red .rd-time-selected{background-color:#f44336}.md-theme-red .rd-day-selected:hover,.md-theme-red .rd-month-label:hover,.md-theme-red .rd-time-option:hover:hover,.md-theme-red .rd-time-selected:hover{background-color:#d32f2f}.md-theme-pink .rd-day-selected,.md-theme-pink .rd-month-label,.md-theme-pink .rd-time-option:hover,.md-theme-pink .rd-time-selected{background-color:#e91e63}.md-theme-pink .rd-day-selected:hover,.md-theme-pink .rd-month-label:hover,.md-theme-pink .rd-time-option:hover:hover,.md-theme-pink .rd-time-selected:hover{background-color:#c2185b}.md-theme-purple .rd-day-selected,.md-theme-purple .rd-month-label,.md-theme-purple .rd-time-option:hover,.md-theme-purple .rd-time-selected{background-color:#9c27b0}.md-theme-purple .rd-day-selected:hover,.md-theme-purple .rd-month-label:hover,.md-theme-purple .rd-time-option:hover:hover,.md-theme-purple .rd-time-selected:hover{background-color:#7b1fa2}.md-theme-deep-purple .rd-day-selected,.md-theme-deep-purple .rd-month-label,.md-theme-deep-purple .rd-time-option:hover,.md-theme-deep-purple .rd-time-selected{background-color:#673ab7}.md-theme-deep-purple .rd-day-selected:hover,.md-theme-deep-purple .rd-month-label:hover,.md-theme-deep-purple .rd-time-option:hover:hover,.md-theme-deep-purple .rd-time-selected:hover{background-color:#512da8}.md-theme-indigo .rd-day-selected,.md-theme-indigo .rd-month-label,.md-theme-indigo .rd-time-option:hover,.md-theme-indigo .rd-time-selected{background-color:#3f51b5}.md-theme-indigo .rd-day-selected:hover,.md-theme-indigo .rd-month-label:hover,.md-theme-indigo .rd-time-option:hover:hover,.md-theme-indigo .rd-time-selected:hover{background-color:#303f9f}.md-theme-blue .rd-day-selected,.md-theme-blue .rd-month-label,.md-theme-blue .rd-time-option:hover,.md-theme-blue .rd-time-selected{background-color:#2196f3}.md-theme-blue .rd-day-selected:hover,.md-theme-blue .rd-month-label:hover,.md-theme-blue .rd-time-option:hover:hover,.md-theme-blue .rd-time-selected:hover{background-color:#1976d2}.md-theme-light-blue .rd-day-selected,.md-theme-light-blue .rd-month-label,.md-theme-light-blue .rd-time-option:hover,.md-theme-light-blue .rd-time-selected{background-color:#03a9f4}.md-theme-light-blue .rd-day-selected:hover,.md-theme-light-blue .rd-month-label:hover,.md-theme-light-blue .rd-time-option:hover:hover,.md-theme-light-blue .rd-time-selected:hover{background-color:#0288d1}.md-theme-cyan .rd-day-selected,.md-theme-cyan .rd-month-label,.md-theme-cyan .rd-time-option:hover,.md-theme-cyan .rd-time-selected{background-color:#00bcd4}.md-theme-cyan .rd-day-selected:hover,.md-theme-cyan .rd-month-label:hover,.md-theme-cyan .rd-time-option:hover:hover,.md-theme-cyan .rd-time-selected:hover{background-color:#0097a7}.md-theme-teal .rd-day-selected,.md-theme-teal .rd-month-label,.md-theme-teal .rd-time-option:hover,.md-theme-teal .rd-time-selected{background-color:#009688}.md-theme-teal .rd-day-selected:hover,.md-theme-teal .rd-month-label:hover,.md-theme-teal .rd-time-option:hover:hover,.md-theme-teal .rd-time-selected:hover{background-color:#00796b}.md-theme-green .rd-day-selected,.md-theme-green .rd-month-label,.md-theme-green .rd-time-option:hover,.md-theme-green .rd-time-selected{background-color:#4caf50}.md-theme-green .rd-day-selected:hover,.md-theme-green .rd-month-label:hover,.md-theme-green .rd-time-option:hover:hover,.md-theme-green .rd-time-selected:hover{background-color:#388e3c}.md-theme-light-green .rd-day-selected,.md-theme-light-green .rd-month-label,.md-theme-light-green .rd-time-option:hover,.md-theme-light-green .rd-time-selected{background-color:#8bc34a}.md-theme-light-green .rd-day-selected:hover,.md-theme-light-green .rd-month-label:hover,.md-theme-light-green .rd-time-option:hover:hover,.md-theme-light-green .rd-time-selected:hover{background-color:#689f38}.md-theme-lime .rd-day-selected,.md-theme-lime .rd-month-label,.md-theme-lime .rd-time-option:hover,.md-theme-lime .rd-time-selected{background-color:#cddc39}.md-theme-lime .rd-day-selected:hover,.md-theme-lime .rd-month-label:hover,.md-theme-lime .rd-time-option:hover:hover,.md-theme-lime .rd-time-selected:hover{background-color:#afb42b}.md-theme-yellow .rd-day-selected,.md-theme-yellow .rd-month-label,.md-theme-yellow .rd-time-option:hover,.md-theme-yellow .rd-time-selected{background-color:#ffeb3b}.md-theme-yellow .rd-day-selected:hover,.md-theme-yellow .rd-month-label:hover,.md-theme-yellow .rd-time-option:hover:hover,.md-theme-yellow .rd-time-selected:hover{background-color:#fbc02d}.md-theme-amber .rd-day-selected,.md-theme-amber .rd-month-label,.md-theme-amber .rd-time-option:hover,.md-theme-amber .rd-time-selected{background-color:#ffc107}.md-theme-amber .rd-day-selected:hover,.md-theme-amber .rd-month-label:hover,.md-theme-amber .rd-time-option:hover:hover,.md-theme-amber .rd-time-selected:hover{background-color:#ffa000}.md-theme-orange .rd-day-selected,.md-theme-orange .rd-month-label,.md-theme-orange .rd-time-option:hover,.md-theme-orange .rd-time-selected{background-color:#ff9800}.md-theme-orange .rd-day-selected:hover,.md-theme-orange .rd-month-label:hover,.md-theme-orange .rd-time-option:hover:hover,.md-theme-orange .rd-time-selected:hover{background-color:#f57c00}.md-theme-deep-orange .rd-day-selected,.md-theme-deep-orange .rd-month-label,.md-theme-deep-orange .rd-time-option:hover,.md-theme-deep-orange .rd-time-selected{background-color:#ff5722}.md-theme-deep-orange .rd-day-selected:hover,.md-theme-deep-orange .rd-month-label:hover,.md-theme-deep-orange .rd-time-option:hover:hover,.md-theme-deep-orange .rd-time-selected:hover{background-color:#e64a19}.md-theme-brown .rd-day-selected,.md-theme-brown .rd-month-label,.md-theme-brown .rd-time-option:hover,.md-theme-brown .rd-time-selected{background-color:#795548}.md-theme-brown .rd-day-selected:hover,.md-theme-brown .rd-month-label:hover,.md-theme-brown .rd-time-option:hover:hover,.md-theme-brown .rd-time-selected:hover{background-color:#5d4037}.md-theme-grey .rd-day-selected,.md-theme-grey .rd-month-label,.md-theme-grey .rd-time-option:hover,.md-theme-grey .rd-time-selected{background-color:#9e9e9e}.md-theme-grey .rd-day-selected:hover,.md-theme-grey .rd-month-label:hover,.md-theme-grey .rd-time-option:hover:hover,.md-theme-grey .rd-time-selected:hover{background-color:#616161}.md-theme-blue-grey .rd-day-selected,.md-theme-blue-grey .rd-month-label,.md-theme-blue-grey .rd-time-option:hover,.md-theme-blue-grey .rd-time-selected{background-color:#607d8b}.md-theme-blue-grey .rd-day-selected:hover,.md-theme-blue-grey .rd-month-label:hover,.md-theme-blue-grey .rd-time-option:hover:hover,.md-theme-blue-grey .rd-time-selected:hover{background-color:#455a64}.color-picker-container{box-sizing:border-box;position:relative;margin:5px 0 25px 0;cursor:pointer;width:100%}.color-picker-container:before{background-image:linear-gradient(45deg,#fff 25%,transparent 0,transparent 75%,#fff 0),linear-gradient(45deg,#fff 25%,#ddd 0,#ddd 75%,#fff 0);background-position:0 0,5px 5px;background-size:10px 10px;content:"";display:inline-block;height:70%;left:0;position:absolute;z-index:1;margin:.5rem;aspect-ratio:1}.color-picker-container .textfield-container{margin:0;padding:0}.color-picker-container .textfield-container .mdc-floating-label,.color-picker-container .textfield-container .mdc-textfield{padding-left:4.5rem}.color-picker-container input{cursor:pointer}.color-picker-container .color-sample{outline:1px solid #e0e0e0;height:70%;top:0;z-index:1;position:absolute;aspect-ratio:1;left:0;margin:.5rem}.md-input-disabled .color-picker-container:before{background-color:#e0e0e0;background-image:none}.md-input-disabled .color-sample{opacity:0}.color-picker.mdc-dialog .mdc-dialog__surface{min-width:225px}.color-picker.mdc-dialog .mdc-dialog__surface .mdc-dialog__content{padding:0}.color-picker.mdc-dialog .vc-chrome{width:300px}.ssa-accordion-item{border:1px solid #e0e0e0}.ssa-accordion-item.active,.ssa-accordion-item.active+.ssa-accordion-item,.ssa-accordion-item:first-child{border-top:1px solid #e0e0e0}.active .ssa-accordion-item-header{border-bottom:1px solid #e0e0e0}.ssa-accordion-item-header:active,.ssa-accordion-item-header:focus,.ssa-accordion-item-header:hover{background:#f5f5f5}.ssa-accordion-item-header .md-icon{margin-right:1rem}.ssa-accordion-item-content{border-bottom:1px solid #e0e0e0}.banner{align-items:center;background:#fff;box-sizing:border-box;flex-direction:column;display:flex;gap:12px;justify-content:space-between;padding:12px 18px;margin-bottom:16px;width:100%;align-items:flex-start}@media screen and (min-width:860px){.banner{flex-direction:row;align-items:center}}.banner.vert{align-items:flex-start}@media screen and (min-width:860px){.banner.vert{flex-direction:column}}.banner .md-subheading{display:flex;gap:.5rem;align-items:center}.banner .md-subheading i{margin:0}.banner .md-subheading+.md-button{align-self:flex-end}.settings .new-booking-app-banner .banner{margin-bottom:0;gap:1rem}.settings .new-booking-app-banner .banner .md-subheading p{margin:0}.empty-state,.settings .new-booking-app-banner .banner .button-container{display:flex;justify-content:center}.empty-state{align-items:center;flex-direction:column;margin:0 auto;max-width:420px;padding:36px;position:relative;text-align:center;transition:opacity .15s .3s,transform .3s .3s;will-change:transform,opacity}.empty-state .md-button{margin:.5em 0 0}.empty-state-enter{opacity:0;transform:scale(.87)}.empty-state-enter .empty-state-container{opacity:0}.empty-state-leave,.empty-state-leave-active,.empty-state-leave-to{display:none;opacity:0;visibility:hidden}.empty-state-container{align-items:center;display:flex;flex-direction:column;justify-content:center;text-align:center;transition:opacity .4s .3s;will-change:opacity}.empty-state-image{display:block;margin:0}.empty-state-label{font-size:26px;font-weight:400;line-height:1.5}.empty-state-description{margin:1em 0;font-size:16px;line-height:1.5}.duration-field{position:relative;width:100%}.duration-field .md-helper-text{color:#757575;font-size:12px}.duration-field .md-error{color:#ff5722;font-size:12px}.duration-field .md-input-container{margin-bottom:0}.duration-field .duration-helper-text{position:absolute;top:61px}.duration-field>.md-layout{flex-wrap:nowrap}.duration-field .md-layout.md-layout{min-width:120px}.complex-field{gap:1rem}.complex-field .inline-label{display:flex;min-width:10%}.complex-field .inline-label .md-subheading{margin-bottom:0;margin-top:30px;white-space:nowrap}.complex-field .duration-field{flex:1}.complex-field .duration-field .md-layout{margin-bottom:0}.md-gutter:not(.md-column)>.duration-field{padding-right:12px;padding-left:12px}html{height:auto;min-height:100%}.md-fieldset,fieldset.md-fieldset{margin:48px 0 24px;padding:0;position:relative}.md-fieldset+.md-fieldset,.md-fieldset+fieldset.md-fieldset,fieldset.md-fieldset+.md-fieldset,fieldset.md-fieldset+fieldset.md-fieldset{margin-top:24px}.md-fieldset legend:not(.md-headline),fieldset.md-fieldset legend:not(.md-headline){font-size:1rem;line-height:1.5;margin-left:0}.md-fieldset.has-top-menu,fieldset.md-fieldset.has-top-menu{padding-top:1rem}.md-fieldset.has-top-menu legend,fieldset.md-fieldset.has-top-menu legend{float:left}.md-fieldset.required legend:after,fieldset.md-fieldset.required legend:after{content:"*";font-size:12px;line-height:1em;right:0;top:2px;transform:translateX(calc(100% + 2px));vertical-align:top}.md-fieldset.md-fieldset-invalid .md-error,.md-fieldset.md-fieldset-invalid legend,fieldset.md-fieldset.md-fieldset-invalid .md-error,fieldset.md-fieldset.md-fieldset-invalid legend{color:#ff5722}.md-fieldset.contains-layout,fieldset.md-fieldset.contains-layout{padding:1rem 0}.md-avatar.border-theme.md-theme-red{border:3px solid #f44336}.md-avatar.border-theme.md-theme-pink{border:3px solid #e91e63}.md-avatar.border-theme.md-theme-purple{border:3px solid #9c27b0}.md-avatar.border-theme.md-theme-deep-purple{border:3px solid #673ab7}.md-avatar.border-theme.md-theme-indigo{border:3px solid #3f51b5}.md-avatar.border-theme.md-theme-blue{border:3px solid #2196f3}.md-avatar.border-theme.md-theme-light-blue{border:3px solid #03a9f4}.md-avatar.border-theme.md-theme-cyan{border:3px solid #00bcd4}.md-avatar.border-theme.md-theme-teal{border:3px solid #009688}.md-avatar.border-theme.md-theme-green{border:3px solid #4caf50}.md-avatar.border-theme.md-theme-light-green{border:3px solid #8bc34a}.md-avatar.border-theme.md-theme-lime{border:3px solid #cddc39}.md-avatar.border-theme.md-theme-yellow{border:3px solid #ffeb3b}.md-avatar.border-theme.md-theme-amber{border:3px solid #ffc107}.md-avatar.border-theme.md-theme-orange{border:3px solid #ff9800}.md-avatar.border-theme.md-theme-deep-orange{border:3px solid #ff5722}.md-avatar.border-theme.md-theme-brown{border:3px solid #795548}.md-avatar.border-theme.md-theme-grey{border:3px solid #9e9e9e}.md-avatar.border-theme.md-theme-blue-grey{border:3px solid #607d8b}.md-button{margin-left:0}.md-button+.md_button{margin-left:8px}.md-button.md-icon-button.close-button{margin:0;position:absolute;right:0;top:0}.md-button.md-link{line-height:normal;margin:0;min-height:0;min-width:0;padding:0}.md-button.indicator-button .indicator{background:#ffc107;border-radius:100%;height:10px;position:absolute;right:8px;top:6px;width:10px}button:focus-visible{box-shadow:0 0 0 1px currentcolor}.md-card{transition:border-width,border-color .3s ease-in-out}.md-card.full-width{width:100%}.md-card.overflow-visible{overflow:visible}.md-card.settings{margin-bottom:2rem}.md-card.settings .md-card-media{background:#dcedc8}.md-card.disabled{opacity:.75}.md-card.disabled .md-card-media,.md-card.disabled .md-card-media.payments-settings{background:linear-gradient(135deg,#e0e0e0,#9e9e9e)}.md-card.disabled .md-card-media img{filter:grayscale(100%)}.md-card .md-card-actions .md-button.md-icon-button.md-raised{margin-top:5px}.md-card img{width:-webkit-fill-available;width:-moz-available;width:fill-available}.md-card .md-card-header .md-card-media{margin-left:0;margin-right:16px}.md-card.md-theme-red{border-top:5px solid #f44336}.md-card.md-theme-pink{border-top:5px solid #e91e63}.md-card.md-theme-purple{border-top:5px solid #9c27b0}.md-card.md-theme-deep-purple{border-top:5px solid #673ab7}.md-card.md-theme-indigo{border-top:5px solid #3f51b5}.md-card.md-theme-blue{border-top:5px solid #2196f3}.md-card.md-theme-light-blue{border-top:5px solid #03a9f4}.md-card.md-theme-cyan{border-top:5px solid #00bcd4}.md-card.md-theme-teal{border-top:5px solid #009688}.md-card.md-theme-green{border-top:5px solid #4caf50}.md-card.md-theme-light-green{border-top:5px solid #8bc34a}.md-card.md-theme-lime{border-top:5px solid #cddc39}.md-card.md-theme-yellow{border-top:5px solid #ffeb3b}.md-card.md-theme-amber{border-top:5px solid #ffc107}.md-card.md-theme-orange{border-top:5px solid #ff9800}.md-card.md-theme-deep-orange{border-top:5px solid #ff5722}.md-card.md-theme-brown{border-top:5px solid #795548}.md-card.md-theme-grey{border-top:5px solid #9e9e9e}.md-card.md-theme-blue-grey{border-top:5px solid #607d8b}.md-card .md-card-expand.md-active .no-animation[md-expand-trigger]{transform:none}.md-card .md-card-expand.md-active .no-animation[md-expand-trigger] .md-icon{transform:rotate(180deg) translateZ(0)}html .md-theme-red.md-checkbox.md-checked .md-checkbox-container{background-color:#f44336;border-color:#f44336}html .md-theme-red.md-checkbox .md-ink-ripple{color:#f44336}html .md-theme-pink.md-checkbox.md-checked .md-checkbox-container{background-color:#e91e63;border-color:#e91e63}html .md-theme-pink.md-checkbox .md-ink-ripple{color:#e91e63}html .md-theme-purple.md-checkbox.md-checked .md-checkbox-container{background-color:#9c27b0;border-color:#9c27b0}html .md-theme-purple.md-checkbox .md-ink-ripple{color:#9c27b0}html .md-theme-deep-purple.md-checkbox.md-checked .md-checkbox-container{background-color:#673ab7;border-color:#673ab7}html .md-theme-deep-purple.md-checkbox .md-ink-ripple{color:#673ab7}html .md-theme-indigo.md-checkbox.md-checked .md-checkbox-container{background-color:#3f51b5;border-color:#3f51b5}html .md-theme-indigo.md-checkbox .md-ink-ripple{color:#3f51b5}html .md-theme-blue.md-checkbox.md-checked .md-checkbox-container{background-color:#2196f3;border-color:#2196f3}html .md-theme-blue.md-checkbox .md-ink-ripple{color:#2196f3}html .md-theme-light-blue.md-checkbox.md-checked .md-checkbox-container{background-color:#03a9f4;border-color:#03a9f4}html .md-theme-light-blue.md-checkbox .md-ink-ripple{color:#03a9f4}html .md-theme-cyan.md-checkbox.md-checked .md-checkbox-container{background-color:#00bcd4;border-color:#00bcd4}html .md-theme-cyan.md-checkbox .md-ink-ripple{color:#00bcd4}html .md-theme-teal.md-checkbox.md-checked .md-checkbox-container{background-color:#009688;border-color:#009688}html .md-theme-teal.md-checkbox .md-ink-ripple{color:#009688}html .md-theme-green.md-checkbox.md-checked .md-checkbox-container{background-color:#4caf50;border-color:#4caf50}html .md-theme-green.md-checkbox .md-ink-ripple{color:#4caf50}html .md-theme-light-green.md-checkbox.md-checked .md-checkbox-container{background-color:#8bc34a;border-color:#8bc34a}html .md-theme-light-green.md-checkbox .md-ink-ripple{color:#8bc34a}html .md-theme-lime.md-checkbox.md-checked .md-checkbox-container{background-color:#cddc39;border-color:#cddc39}html .md-theme-lime.md-checkbox .md-ink-ripple{color:#cddc39}html .md-theme-yellow.md-checkbox.md-checked .md-checkbox-container{background-color:#ffeb3b;border-color:#ffeb3b}html .md-theme-yellow.md-checkbox .md-ink-ripple{color:#ffeb3b}html .md-theme-amber.md-checkbox.md-checked .md-checkbox-container{background-color:#ffc107;border-color:#ffc107}html .md-theme-amber.md-checkbox .md-ink-ripple{color:#ffc107}html .md-theme-orange.md-checkbox.md-checked .md-checkbox-container{background-color:#ff9800;border-color:#ff9800}html .md-theme-orange.md-checkbox .md-ink-ripple{color:#ff9800}html .md-theme-deep-orange.md-checkbox.md-checked .md-checkbox-container{background-color:#ff5722;border-color:#ff5722}html .md-theme-deep-orange.md-checkbox .md-ink-ripple{color:#ff5722}html .md-theme-brown.md-checkbox.md-checked .md-checkbox-container{background-color:#795548;border-color:#795548}html .md-theme-brown.md-checkbox .md-ink-ripple{color:#795548}html .md-theme-grey.md-checkbox.md-checked .md-checkbox-container{background-color:#9e9e9e;border-color:#9e9e9e}html .md-theme-grey.md-checkbox .md-ink-ripple{color:#9e9e9e}html .md-theme-blue-grey.md-checkbox.md-checked .md-checkbox-container{background-color:#607d8b;border-color:#607d8b}html .md-theme-blue-grey.md-checkbox .md-ink-ripple{color:#607d8b}html .md-theme-default.md-checkbox.md-checked .md-checkbox-container{background-color:#689f38;border-color:#689f38}html .md-theme-default.md-checkbox .md-ink-ripple{color:#689f38}.check-list .md-checkbox{display:flex}html .md-checkbox.with-help{margin-bottom:0}.checkbox-help{color:#757575}div.md-checkbox-with-note{margin:.2rem 0 1.2rem}div.md-checkbox-with-note div.mdc-form-field{margin:0!important}div.md-checkbox-with-note div.mdc-form-field>label{padding-left:0}div.md-checkbox-with-note .md-checkbox{display:flex}div.md-checkbox-with-note .md-checkbox-note,div.md-checkbox-with-note p.md-checkbox-note{color:#757575;margin-left:40px;margin-top:-6px;font-size:12px;line-height:18px}.md-dialog>div[style]{max-height:75vh}.md-dialog-content{height:100%}.md-dialog-content p+p{margin-top:1em}.ssa-iframe-dialog .mdc-dialog__container .md-dialog-content{padding:0}.ssa-iframe-dialog .mdc-dialog__container .mdc-dialog__surface{width:80%;height:80%;overflow:visible;position:relative}.ssa-iframe-dialog .mdc-dialog__container .mdc-touch-target-wrapper.close{background-color:#558b2f;border:0 none;border-radius:40px;box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12);color:#fff;cursor:pointer;height:40px;line-height:40px;margin:0;padding:0;position:absolute;right:-20px;text-align:center;top:-20px;width:40px;z-index:10}.ssa-dialog-iframe-container{height:100%;width:100%}.ssa-dialog-iframe-container iframe{height:100%!important;width:100%!important}.md-icon.small{font-size:20px;height:20px;min-height:20px;min-width:20px;width:20px}.md-input-container input,.md-input-container textarea{min-width:0}.md-input-container .md-helper-text{opacity:0}.md-input-container .md-select+.md-helper-text,.md-input-container .select2+.md-helper-text,.md-input-container.readonly .md-helper-text{opacity:1!important}.md-input-container.md-input-disabled .md-helper-text,.md-input-container.md-input-focused .md-helper-text{opacity:1}.md-input-container.readonly:after{width:0}html .md-input-container input,html .md-input-container textarea{font-size:16px}.md-layout .md-helper-text{margin-top:8px}.md-layout .md-layout{margin-bottom:2rem}.md-layout .md-layout .md-layout{margin-bottom:0}.md-layout .md-layout.md-column .md-card{margin-bottom:1rem;z-index:auto}.md-layout.col3-big-middle .md-layout{flex:none;width:100%}@media screen and (min-width:960px){.md-layout.col3-big-middle .md-layout{width:50%}.md-layout.col3-big-middle .md-layout:first-child,.md-layout.col3-big-middle .md-layout:last-child{width:25%}}.md-layout.page-layout{flex-wrap:wrap}@media screen and (min-width:601px){.md-layout.page-layout{flex-wrap:nowrap}}.md-layout.md-flex-none{flex:none}.list-container{max-width:400px}.md-list{background:#fff}.md-list.md-triple-line .nested-list .md-list-item:last-child{padding-bottom:24px}.md-list.md-triple-line .nested-list .md-list-item.md-inset .md-list-item-container{padding-left:96px}.md-list.md-triple-line .nested-list .md-list-item.md-inset .md-list-item-container .md-button{margin-left:0}.md-list.md-triple-line .nested-list .md-list-item .md-list-item-container{min-height:48px}.md-theme-default.md-list .md-list-item-expand .nested-list .md-list-item-container:focus,.md-theme-default.md-list .md-list-item-expand .nested-list .md-list-item-container:hover{background:#fff}.nested-list .md-list-item .md-list-item-container>.md-icon:first-child{margin-right:16px}.foxy-list-item-expandable{transition:background .3s ease-in}.foxy-list-item-expandable.status-abandoned,.foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-changing,.foxy-list-item-expandable.status-deleting{opacity:.4}.foxy-list-item-expandable.status-abandoned .foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-abandoned .foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-abandoned .foxy-list-item-expandable.status-deleting,.foxy-list-item-expandable.status-canceled .foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-canceled .foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-canceled .foxy-list-item-expandable.status-deleting,.foxy-list-item-expandable.status-canceling .foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-canceling .foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-canceling .foxy-list-item-expandable.status-deleting,.foxy-list-item-expandable.status-changing .foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-changing .foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-changing .foxy-list-item-expandable.status-deleting,.foxy-list-item-expandable.status-deleting .foxy-list-item-expandable.status-canceled,.foxy-list-item-expandable.status-deleting .foxy-list-item-expandable.status-canceling,.foxy-list-item-expandable.status-deleting .foxy-list-item-expandable.status-deleting{opacity:1}.foxy-list-item-expandable .md-list-text-container>*{width:100%}.foxy-list-item-expandable .md-list-text-container span span.required{color:#e64a19}.foxy-list-item-expandable .md-list-text-container span span.required:before{width:0;margin:0}.foxy-list-item-expandable:hover{background:#fafafa}.foxy-list-item-expandable .item-expandable-content-wrapper .foxy-list-item.status-abandoned,.foxy-list-item-expandable .item-expandable-content-wrapper .foxy-list-item.status-canceled,.foxy-list-item-expandable .item-expandable-content-wrapper .foxy-list-item.status-canceling,.foxy-list-item-expandable .item-expandable-content-wrapper .foxy-list-item.status-changing,.foxy-list-item-expandable .item-expandable-content-wrapper .foxy-list-item.status-deleting{opacity:.4}.md-list.webhook-list .md-list-item:hover{cursor:pointer}.sortable-list .md-list-item{cursor:move}.sortable-list .md-list-item.sortable-ghost{opacity:.2}.sortable-list .md-list-item.sortable-fixed{cursor:default}body .foxy-list-item .foxy-list-item-container .md-avatar:first-child{height:48px;margin-right:32px;width:48px}.md-list-item-container .md-switch:first-child{margin-right:1.5rem}.md-switch-with-helper .md-helper-text{color:#757575;margin:0 0 1em 42px}.md-list.md-triple-line .nested-list.md-triple-line .md-list-item.md-inset .md-list-item-container{min-height:88px}.md-list.md-triple-line .nested-list .md-list-item.md-inset .md-list-item-container .md-button{margin-left:-16px}.md-list-item span span.staff-with:before{display:none}.md-menu-content{width:auto}.md-boards{margin-bottom:2rem}html .md-theme-red.md-radio .md-radio-container{min-width:20px}html .md-theme-red.md-radio .md-radio-container:after{background-color:#f44336}html .md-theme-red.md-radio.md-checked .md-radio-container{border-color:#f44336}html .md-theme-red.md-radio .md-ink-ripple,html .md-theme-red.md-radio.md-checked .md-ink-ripple{color:#f44336}html .md-theme-pink.md-radio .md-radio-container{min-width:20px}html .md-theme-pink.md-radio .md-radio-container:after{background-color:#e91e63}html .md-theme-pink.md-radio.md-checked .md-radio-container{border-color:#e91e63}html .md-theme-pink.md-radio .md-ink-ripple,html .md-theme-pink.md-radio.md-checked .md-ink-ripple{color:#e91e63}html .md-theme-purple.md-radio .md-radio-container{min-width:20px}html .md-theme-purple.md-radio .md-radio-container:after{background-color:#9c27b0}html .md-theme-purple.md-radio.md-checked .md-radio-container{border-color:#9c27b0}html .md-theme-purple.md-radio .md-ink-ripple,html .md-theme-purple.md-radio.md-checked .md-ink-ripple{color:#9c27b0}html .md-theme-deep-purple.md-radio .md-radio-container{min-width:20px}html .md-theme-deep-purple.md-radio .md-radio-container:after{background-color:#673ab7}html .md-theme-deep-purple.md-radio.md-checked .md-radio-container{border-color:#673ab7}html .md-theme-deep-purple.md-radio .md-ink-ripple,html .md-theme-deep-purple.md-radio.md-checked .md-ink-ripple{color:#673ab7}html .md-theme-indigo.md-radio .md-radio-container{min-width:20px}html .md-theme-indigo.md-radio .md-radio-container:after{background-color:#3f51b5}html .md-theme-indigo.md-radio.md-checked .md-radio-container{border-color:#3f51b5}html .md-theme-indigo.md-radio .md-ink-ripple,html .md-theme-indigo.md-radio.md-checked .md-ink-ripple{color:#3f51b5}html .md-theme-blue.md-radio .md-radio-container{min-width:20px}html .md-theme-blue.md-radio .md-radio-container:after{background-color:#2196f3}html .md-theme-blue.md-radio.md-checked .md-radio-container{border-color:#2196f3}html .md-theme-blue.md-radio .md-ink-ripple,html .md-theme-blue.md-radio.md-checked .md-ink-ripple{color:#2196f3}html .md-theme-light-blue.md-radio .md-radio-container{min-width:20px}html .md-theme-light-blue.md-radio .md-radio-container:after{background-color:#03a9f4}html .md-theme-light-blue.md-radio.md-checked .md-radio-container{border-color:#03a9f4}html .md-theme-light-blue.md-radio .md-ink-ripple,html .md-theme-light-blue.md-radio.md-checked .md-ink-ripple{color:#03a9f4}html .md-theme-cyan.md-radio .md-radio-container{min-width:20px}html .md-theme-cyan.md-radio .md-radio-container:after{background-color:#00bcd4}html .md-theme-cyan.md-radio.md-checked .md-radio-container{border-color:#00bcd4}html .md-theme-cyan.md-radio .md-ink-ripple,html .md-theme-cyan.md-radio.md-checked .md-ink-ripple{color:#00bcd4}html .md-theme-teal.md-radio .md-radio-container{min-width:20px}html .md-theme-teal.md-radio .md-radio-container:after{background-color:#009688}html .md-theme-teal.md-radio.md-checked .md-radio-container{border-color:#009688}html .md-theme-teal.md-radio .md-ink-ripple,html .md-theme-teal.md-radio.md-checked .md-ink-ripple{color:#009688}html .md-theme-green.md-radio .md-radio-container{min-width:20px}html .md-theme-green.md-radio .md-radio-container:after{background-color:#4caf50}html .md-theme-green.md-radio.md-checked .md-radio-container{border-color:#4caf50}html .md-theme-green.md-radio .md-ink-ripple,html .md-theme-green.md-radio.md-checked .md-ink-ripple{color:#4caf50}html .md-theme-light-green.md-radio .md-radio-container{min-width:20px}html .md-theme-light-green.md-radio .md-radio-container:after{background-color:#8bc34a}html .md-theme-light-green.md-radio.md-checked .md-radio-container{border-color:#8bc34a}html .md-theme-light-green.md-radio .md-ink-ripple,html .md-theme-light-green.md-radio.md-checked .md-ink-ripple{color:#8bc34a}html .md-theme-lime.md-radio .md-radio-container{min-width:20px}html .md-theme-lime.md-radio .md-radio-container:after{background-color:#cddc39}html .md-theme-lime.md-radio.md-checked .md-radio-container{border-color:#cddc39}html .md-theme-lime.md-radio .md-ink-ripple,html .md-theme-lime.md-radio.md-checked .md-ink-ripple{color:#cddc39}html .md-theme-yellow.md-radio .md-radio-container{min-width:20px}html .md-theme-yellow.md-radio .md-radio-container:after{background-color:#ffeb3b}html .md-theme-yellow.md-radio.md-checked .md-radio-container{border-color:#ffeb3b}html .md-theme-yellow.md-radio .md-ink-ripple,html .md-theme-yellow.md-radio.md-checked .md-ink-ripple{color:#ffeb3b}html .md-theme-amber.md-radio .md-radio-container{min-width:20px}html .md-theme-amber.md-radio .md-radio-container:after{background-color:#ffc107}html .md-theme-amber.md-radio.md-checked .md-radio-container{border-color:#ffc107}html .md-theme-amber.md-radio .md-ink-ripple,html .md-theme-amber.md-radio.md-checked .md-ink-ripple{color:#ffc107}html .md-theme-orange.md-radio .md-radio-container{min-width:20px}html .md-theme-orange.md-radio .md-radio-container:after{background-color:#ff9800}html .md-theme-orange.md-radio.md-checked .md-radio-container{border-color:#ff9800}html .md-theme-orange.md-radio .md-ink-ripple,html .md-theme-orange.md-radio.md-checked .md-ink-ripple{color:#ff9800}html .md-theme-deep-orange.md-radio .md-radio-container{min-width:20px}html .md-theme-deep-orange.md-radio .md-radio-container:after{background-color:#ff5722}html .md-theme-deep-orange.md-radio.md-checked .md-radio-container{border-color:#ff5722}html .md-theme-deep-orange.md-radio .md-ink-ripple,html .md-theme-deep-orange.md-radio.md-checked .md-ink-ripple{color:#ff5722}html .md-theme-brown.md-radio .md-radio-container{min-width:20px}html .md-theme-brown.md-radio .md-radio-container:after{background-color:#795548}html .md-theme-brown.md-radio.md-checked .md-radio-container{border-color:#795548}html .md-theme-brown.md-radio .md-ink-ripple,html .md-theme-brown.md-radio.md-checked .md-ink-ripple{color:#795548}html .md-theme-grey.md-radio .md-radio-container{min-width:20px}html .md-theme-grey.md-radio .md-radio-container:after{background-color:#9e9e9e}html .md-theme-grey.md-radio.md-checked .md-radio-container{border-color:#9e9e9e}html .md-theme-grey.md-radio .md-ink-ripple,html .md-theme-grey.md-radio.md-checked .md-ink-ripple{color:#9e9e9e}html .md-theme-blue-grey.md-radio .md-radio-container{min-width:20px}html .md-theme-blue-grey.md-radio .md-radio-container:after{background-color:#607d8b}html .md-theme-blue-grey.md-radio.md-checked .md-radio-container{border-color:#607d8b}html .md-theme-blue-grey.md-radio .md-ink-ripple,html .md-theme-blue-grey.md-radio.md-checked .md-ink-ripple{color:#607d8b}html .md-theme-default.md-radio .md-radio-container:after{background-color:#689f38}html .md-theme-default.md-radio.md-checked .md-radio-container{border-color:#689f38}html .md-theme-default.md-radio .md-ink-rippe,html .md-theme-default.md-radio.md-checked .md-ink-ripple{color:#689f38}.radio-list{flex-direction:column}.radio-list,.radio-list .md-radio{display:flex}.radio-list .md-radio .md-radio-label{height:auto}.md-radio.md-disabled .md-radio-label{color:#9e9e9e}.md-select{min-width:64px}.md-select-content.md-direction-bottom-right{margin-left:0}.md-list-item span span:before{content:"";display:inline-block;height:1rem;margin-right:.5rem;vertical-align:baseline;width:1rem}.md-list-item span span.red:before{background-color:#f44336}.md-list-item span span.pink:before{background-color:#e91e63}.md-list-item span span.purple:before{background-color:#9c27b0}.md-list-item span span.deep-purple:before{background-color:#673ab7}.md-list-item span span.indigo:before{background-color:#3f51b5}.md-list-item span span.blue:before{background-color:#2196f3}.md-list-item span span.light-blue:before{background-color:#03a9f4}.md-list-item span span.cyan:before{background-color:#00bcd4}.md-list-item span span.teal:before{background-color:#009688}.md-list-item span span.green:before{background-color:#4caf50}.md-list-item span span.light-green:before{background-color:#8bc34a}.md-list-item span span.lime:before{background-color:#cddc39}.md-list-item span span.yellow:before{background-color:#ffeb3b}.md-list-item span span.amber:before{background-color:#ffc107}.md-list-item span span.orange:before{background-color:#ff9800}.md-list-item span span.deep-orange:before{background-color:#ff5722}.md-list-item span span.brown:before{background-color:#795548}.md-list-item span span.grey:before{background-color:#9e9e9e}.md-list-item span span.blue-grey:before{background-color:#607d8b}.md-select.label-select .md-select-value:before{content:"";display:inline-block;margin-right:.5rem;height:1rem;width:1rem}.md-select.label-select.md-theme-red .md-select-value:before{background:#f44336}.md-select.label-select.md-theme-pink .md-select-value:before{background:#e91e63}.md-select.label-select.md-theme-purple .md-select-value:before{background:#9c27b0}.md-select.label-select.md-theme-deep-purple .md-select-value:before{background:#673ab7}.md-select.label-select.md-theme-indigo .md-select-value:before{background:#3f51b5}.md-select.label-select.md-theme-blue .md-select-value:before{background:#2196f3}.md-select.label-select.md-theme-light-blue .md-select-value:before{background:#03a9f4}.md-select.label-select.md-theme-cyan .md-select-value:before{background:#00bcd4}.md-select.label-select.md-theme-teal .md-select-value:before{background:#009688}.md-select.label-select.md-theme-green .md-select-value:before{background:#4caf50}.md-select.label-select.md-theme-light-green .md-select-value:before{background:#8bc34a}.md-select.label-select.md-theme-lime .md-select-value:before{background:#cddc39}.md-select.label-select.md-theme-yellow .md-select-value:before{background:#ffeb3b}.md-select.label-select.md-theme-amber .md-select-value:before{background:#ffc107}.md-select.label-select.md-theme-orange .md-select-value:before{background:#ff9800}.md-select.label-select.md-theme-deep-orange .md-select-value:before{background:#ff5722}.md-select.label-select.md-theme-brown .md-select-value:before{background:#795548}.md-select.label-select.md-theme-grey .md-select-value:before{background:#9e9e9e}.md-select.label-select.md-theme-blue-grey .md-select-value:before{background:#607d8b}.md-input-container.title{width:auto}.md-input-container.title:after{background-color:transparent;height:0}.md-input-container.title .md-select:not(.md-select-icon):after{margin-top:0;top:40%;transform:translateY(-50%) scaleY(1) scaleX(1.6)}.md-input-container.title .md-select .md-select-value{font-size:20px;height:25px;letter-spacing:.005em;line-height:26px;padding-right:20px}.md-stepper{background:#fff}.md-stepper .md-step-header{font-size:1rem}.md-stepper .md-step:first-of-type .md-step-actions button[disabled]:not(.md-primary){display:none}.md-tabs-content{background:#fff}.md-title span.sub{display:block;font-size:14px}.md-heading-group .md-headline{margin-bottom:0}.md-heading-group .md-subheading{color:#607d8b}.caption-pair.md-subheading{margin-bottom:0}.caption-pair.md-caption{margin-top:0;font-size:12px;font-weight:400;letter-spacing:.02em;line-height:17px}.md-whiteframe{position:relative;z-index:1;box-shadow:0 1px 3px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14),0 2px 1px -1px rgba(0,0,0,.12)}.md-whiteframe.settings-whiteframe{background:#fff;max-width:100%;padding:1rem;position:relative}.dynamicColor.md-theme-red{color:#f44336!important}.dynamicColor.md-theme-pink{color:#e91e63!important}.dynamicColor.md-theme-purple{color:#9c27b0!important}.dynamicColor.md-theme-deep-purple{color:#673ab7!important}.dynamicColor.md-theme-indigo{color:#3f51b5!important}.dynamicColor.md-theme-blue{color:#2196f3!important}.dynamicColor.md-theme-light-blue{color:#03a9f4!important}.dynamicColor.md-theme-cyan{color:#00bcd4!important}.dynamicColor.md-theme-teal{color:#009688!important}.dynamicColor.md-theme-green{color:#4caf50!important}.dynamicColor.md-theme-light-green{color:#8bc34a!important}.dynamicColor.md-theme-lime{color:#cddc39!important}.dynamicColor.md-theme-yellow{color:#ffeb3b!important}.dynamicColor.md-theme-amber{color:#ffc107!important}.dynamicColor.md-theme-orange{color:#ff9800!important}.dynamicColor.md-theme-deep-orange{color:#ff5722!important}.dynamicColor.md-theme-brown{color:#795548!important}.dynamicColor.md-theme-grey{color:#9e9e9e!important}.dynamicColor.md-theme-blue-grey{color:#607d8b!important}.dynamicBgTextColor.md-theme-red{background:#f44336;color:#fff}.dynamicBgTextColor.md-theme-pink{background:#e91e63;color:#fff}.dynamicBgTextColor.md-theme-purple{background:#9c27b0;color:#fff}.dynamicBgTextColor.md-theme-deep-purple{background:#673ab7;color:#fff}.dynamicBgTextColor.md-theme-indigo{background:#3f51b5;color:#fff}.dynamicBgTextColor.md-theme-blue{background:#2196f3;color:#fff}.dynamicBgTextColor.md-theme-light-blue{background:#03a9f4;color:#000}.dynamicBgTextColor.md-theme-cyan{background:#00bcd4;color:#000}.dynamicBgTextColor.md-theme-teal{background:#009688;color:#fff}.dynamicBgTextColor.md-theme-green{background:#4caf50;color:#000}.dynamicBgTextColor.md-theme-light-green{background:#8bc34a;color:#000}.dynamicBgTextColor.md-theme-lime{background:#cddc39;color:#000}.dynamicBgTextColor.md-theme-yellow{background:#ffeb3b;color:#000}.dynamicBgTextColor.md-theme-amber{background:#ffc107;color:#000}.dynamicBgTextColor.md-theme-orange{background:#ff9800;color:#000}.dynamicBgTextColor.md-theme-deep-orange{background:#ff5722;color:#fff}.dynamicBgTextColor.md-theme-brown{background:#795548;color:#fff}.dynamicBgTextColor.md-theme-grey{background:#9e9e9e;color:#000}.dynamicBgTextColor.md-theme-blue-grey{background:#607d8b;color:#fff}.labels-field-container.md-theme-red .textfield-label label.mdc-text-field .material-icons{color:#f44336!important}.labels-field-container.md-theme-pink .textfield-label label.mdc-text-field .material-icons{color:#e91e63!important}.labels-field-container.md-theme-purple .textfield-label label.mdc-text-field .material-icons{color:#9c27b0!important}.labels-field-container.md-theme-deep-purple .textfield-label label.mdc-text-field .material-icons{color:#673ab7!important}.labels-field-container.md-theme-indigo .textfield-label label.mdc-text-field .material-icons{color:#3f51b5!important}.labels-field-container.md-theme-blue .textfield-label label.mdc-text-field .material-icons{color:#2196f3!important}.labels-field-container.md-theme-light-blue .textfield-label label.mdc-text-field .material-icons{color:#03a9f4!important}.labels-field-container.md-theme-cyan .textfield-label label.mdc-text-field .material-icons{color:#00bcd4!important}.labels-field-container.md-theme-teal .textfield-label label.mdc-text-field .material-icons{color:#009688!important}.labels-field-container.md-theme-green .textfield-label label.mdc-text-field .material-icons{color:#4caf50!important}.labels-field-container.md-theme-light-green .textfield-label label.mdc-text-field .material-icons{color:#8bc34a!important}.labels-field-container.md-theme-lime .textfield-label label.mdc-text-field .material-icons{color:#cddc39!important}.labels-field-container.md-theme-yellow .textfield-label label.mdc-text-field .material-icons{color:#ffeb3b!important}.labels-field-container.md-theme-amber .textfield-label label.mdc-text-field .material-icons{color:#ffc107!important}.labels-field-container.md-theme-orange .textfield-label label.mdc-text-field .material-icons{color:#ff9800!important}.labels-field-container.md-theme-deep-orange .textfield-label label.mdc-text-field .material-icons{color:#ff5722!important}.labels-field-container.md-theme-brown .textfield-label label.mdc-text-field .material-icons{color:#795548!important}.labels-field-container.md-theme-grey .textfield-label label.mdc-text-field .material-icons{color:#9e9e9e!important}.labels-field-container.md-theme-blue-grey .textfield-label label.mdc-text-field .material-icons{color:#607d8b!important}.labels-field-container .textfield-label input.mdc-text-field__input{text-align:left;margin-left:6px}.md-theme-default code,.mdc-theme-name--default code,.wizard-complete code{background-color:rgba(255,158,128,.2);color:#d84315}.textfield-container.foxy-phone-container.mdc-text-field .vue-tel-input input{color:rgba(0,0,0,.87)}.textfield-container.foxy-phone-container.mdc-text-field .mdc-text-field-helper-line{color:rgba(0,0,0,.6);margin-top:-4px}.availability-table{width:auto;overflow:auto}table.availability{border:none;border-collapse:collapse;border-spacing:0;display:table;margin:2rem 0;max-width:42rem;width:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;table-layout:fixed}table.availability td,table.availability th{border:none;display:table-cell;padding:0;vertical-align:middle;white-space:nowrap}table.availability th{padding:.25rem}table.availability thead{border-bottom:1px solid #e0e0e0}table.availability thead th{text-align:center;width:12%}table.availability thead th:first-of-type{width:16%}table.availability>thead>tr{border-bottom:1px solid #e0e0e0}table.availability>tbody>tr{border-top:1px dashed #e0e0e0}table.availability>tbody>tr.hour{border-top-color:#bdbdbd;border-top-style:solid}table.availability>tbody>tr.hour td.selected{border-top:1px solid #eee}table.availability td{background:#fff;border-left:1px solid #e0e0e0;overflow:hidden;padding:0}table.availability td input{position:absolute;clip:rect(0,0,0,0)}table.availability td label{box-sizing:border-box;display:block;height:100%;padding:.25rem;text-indent:-9999em;width:100%}table.availability tfoot tr{border-top:1px solid #e0e0e0}table.availability tfoot td{border:0 none}table.availability .addTimeBeforeBtn .mdc-icon-button{margin-bottom:-8px}table.availability .addTimeAfterBtn .mdc-icon-button{margin-top:-8px}table.availability tfoot th,table.availability thead th{position:relative}table.availability tfoot .md-button.md-icon-button.md-dense,table.availability thead .md-button.md-icon-button.md-dense{position:absolute;left:50%;margin-left:-12px}table.availability tfoot .md-button.md-icon-button.md-dense{top:-6px}table.availability thead .md-button.md-icon-button.md-dense{bottom:-6px}table.availability tbody td,table.availability tbody td label{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNkJEMEExNzA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxNkJEMEExODA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE2QkQwQTE1MDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE2QkQwQTE2MDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+fn1Y2wAAALZJREFUeNq81FENAyEMBuBmCk7CJFQSczAJdVAJzAESkIAEcDAJjBK6EJ6u3DKSP8c93JcfAgcAkFpyC7fcYXNkZq7OuXocRx2osyIsgAzvvSAaE4TSQAGdj1YmKCmQUuqt5GmFnoJIg3nsQDQ3uQK5f0H8K8hfgohIz9EetBxGCZmgqcGa85u9foyINYTQ57eTyKvl8b0niBBjhFKKvBbrZZU96A3k5rf5W8ydXweNJWUFPgIMAEg95920+FEhAAAAAElFTkSuQmCC),cell}table.availability tbody td.selected,table.availability tbody td.selected label{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNkJEMEExMzA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxNkJEMEExNDA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE2QkQwQTExMDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE2QkQwQTEyMDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kUm+3gAAAL5JREFUeNqslAENxCAMRZmDSkACkpCCEyQgBQmTUAk9/sIIxw4Y5H7yMwjj0ZIWpZ4yyWeyJMdkUhsChDNEdmEFQkTinKthnNensvcmQGKMAoUQrvlbWIForQsEwrgCTWHXT8YYYeYRZAp7gFoIxt77Nk3bTQ2wZsPXneGL9Kvo+rDaNeQWosaBr2Htxe/AuBfNBDYuzIWo1DIM81lqXRiqvFNfdrmJ0X8rLdOK8guw1cQj2E/IkdJW/9BHgAEAJJBOBjH2tFIAAAAASUVORK5CYII=),not-allowed}table.availability.erasing tbody td,table.availability.erasing tbody td label{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNkJEMEExMzA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxNkJEMEExNDA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE2QkQwQTExMDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE2QkQwQTEyMDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kUm+3gAAAL5JREFUeNqslAENxCAMRZmDSkACkpCCEyQgBQmTUAk9/sIIxw4Y5H7yMwjj0ZIWpZ4yyWeyJMdkUhsChDNEdmEFQkTinKthnNensvcmQGKMAoUQrvlbWIForQsEwrgCTWHXT8YYYeYRZAp7gFoIxt77Nk3bTQ2wZsPXneGL9Kvo+rDaNeQWosaBr2Htxe/AuBfNBDYuzIWo1DIM81lqXRiqvFNfdrmJ0X8rLdOK8guw1cQj2E/IkdJW/9BHgAEAJJBOBjH2tFIAAAAASUVORK5CYII=),not-allowed!important}table.availability.drawing tbody td.selected,table.availability.drawing tbody td.selected label{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNkJEMEExNzA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxNkJEMEExODA3QkYxMUU3OTdGQ0ZGQkY0OEZCMkIxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE2QkQwQTE1MDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE2QkQwQTE2MDdCRjExRTc5N0ZDRkZCRjQ4RkIyQjFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+fn1Y2wAAALZJREFUeNq81FENAyEMBuBmCk7CJFQSczAJdVAJzAESkIAEcDAJjBK6EJ6u3DKSP8c93JcfAgcAkFpyC7fcYXNkZq7OuXocRx2osyIsgAzvvSAaE4TSQAGdj1YmKCmQUuqt5GmFnoJIg3nsQDQ3uQK5f0H8K8hfgohIz9EetBxGCZmgqcGa85u9foyINYTQ57eTyKvl8b0niBBjhFKKvBbrZZU96A3k5rf5W8ydXweNJWUFPgIMAEg95920+FEhAAAAAElFTkSuQmCC),cell!important}@media screen and (max-width:600px){table.availability td:first-child,table.availability th:first-child{position:sticky;left:0;background-color:#fff;z-index:10}table.availability tfoot th:first-child,table.availability thead th:first-child{z-index:20}}.md-theme-default table.availability td input:focus+label{outline:2px solid #aed581;outline-offset:-2px}.md-theme-default table.availability td input:checked+label{background:#8bc34a}.md-theme-default table.availability td input:checked:focus+label{background:#689f38;outline:2px solid #33691e;outline-offset:-2px}.md-theme-red table.availability td input:focus+label{outline:2px solid #e57373;outline-offset:-2px}.md-theme-red table.availability td input:checked+label{background:#f44336}.md-theme-red table.availability td input:checked:focus+label{background:#d32f2f;outline:2px solid #b71c1c;outline-offset:-2px}.md-theme-pink table.availability td input:focus+label{outline:2px solid #f06292;outline-offset:-2px}.md-theme-pink table.availability td input:checked+label{background:#e91e63}.md-theme-pink table.availability td input:checked:focus+label{background:#c2185b;outline:2px solid #880e4f;outline-offset:-2px}.md-theme-purple table.availability td input:focus+label{outline:2px solid #ba68c8;outline-offset:-2px}.md-theme-purple table.availability td input:checked+label{background:#9c27b0}.md-theme-purple table.availability td input:checked:focus+label{background:#7b1fa2;outline:2px solid #4a148c;outline-offset:-2px}.md-theme-deep-purple table.availability td input:focus+label{outline:2px solid #9575cd;outline-offset:-2px}.md-theme-deep-purple table.availability td input:checked+label{background:#673ab7}.md-theme-deep-purple table.availability td input:checked:focus+label{background:#512da8;outline:2px solid #311b92;outline-offset:-2px}.md-theme-indigo table.availability td input:focus+label{outline:2px solid #7986cb;outline-offset:-2px}.md-theme-indigo table.availability td input:checked+label{background:#3f51b5}.md-theme-indigo table.availability td input:checked:focus+label{background:#303f9f;outline:2px solid #1a237e;outline-offset:-2px}.md-theme-blue table.availability td input:focus+label{outline:2px solid #64b5f6;outline-offset:-2px}.md-theme-blue table.availability td input:checked+label{background:#2196f3}.md-theme-blue table.availability td input:checked:focus+label{background:#1976d2;outline:2px solid #0d47a1;outline-offset:-2px}.md-theme-light-blue table.availability td input:focus+label{outline:2px solid #4fc3f7;outline-offset:-2px}.md-theme-light-blue table.availability td input:checked+label{background:#03a9f4}.md-theme-light-blue table.availability td input:checked:focus+label{background:#0288d1;outline:2px solid #01579b;outline-offset:-2px}.md-theme-cyan table.availability td input:focus+label{outline:2px solid #4dd0e1;outline-offset:-2px}.md-theme-cyan table.availability td input:checked+label{background:#00bcd4}.md-theme-cyan table.availability td input:checked:focus+label{background:#0097a7;outline:2px solid #006064;outline-offset:-2px}.md-theme-teal table.availability td input:focus+label{outline:2px solid #4db6ac;outline-offset:-2px}.md-theme-teal table.availability td input:checked+label{background:#009688}.md-theme-teal table.availability td input:checked:focus+label{background:#00796b;outline:2px solid #004d40;outline-offset:-2px}.md-theme-green table.availability td input:focus+label{outline:2px solid #81c784;outline-offset:-2px}.md-theme-green table.availability td input:checked+label{background:#4caf50}.md-theme-green table.availability td input:checked:focus+label{background:#388e3c;outline:2px solid #1b5e20;outline-offset:-2px}.md-theme-light-green table.availability td input:focus+label{outline:2px solid #aed581;outline-offset:-2px}.md-theme-light-green table.availability td input:checked+label{background:#8bc34a}.md-theme-light-green table.availability td input:checked:focus+label{background:#689f38;outline:2px solid #33691e;outline-offset:-2px}.md-theme-lime table.availability td input:focus+label{outline:2px solid #dce775;outline-offset:-2px}.md-theme-lime table.availability td input:checked+label{background:#cddc39}.md-theme-lime table.availability td input:checked:focus+label{background:#afb42b;outline:2px solid #827717;outline-offset:-2px}.md-theme-yellow table.availability td input:focus+label{outline:2px solid #fff176;outline-offset:-2px}.md-theme-yellow table.availability td input:checked+label{background:#ffeb3b}.md-theme-yellow table.availability td input:checked:focus+label{background:#fbc02d;outline:2px solid #f57f17;outline-offset:-2px}.md-theme-amber table.availability td input:focus+label{outline:2px solid #ffd54f;outline-offset:-2px}.md-theme-amber table.availability td input:checked+label{background:#ffc107}.md-theme-amber table.availability td input:checked:focus+label{background:#ffa000;outline:2px solid #ff6f00;outline-offset:-2px}.md-theme-orange table.availability td input:focus+label{outline:2px solid #ffb74d;outline-offset:-2px}.md-theme-orange table.availability td input:checked+label{background:#ff9800}.md-theme-orange table.availability td input:checked:focus+label{background:#f57c00;outline:2px solid #e65100;outline-offset:-2px}.md-theme-deep-orange table.availability td input:focus+label{outline:2px solid #ff8a65;outline-offset:-2px}.md-theme-deep-orange table.availability td input:checked+label{background:#ff5722}.md-theme-deep-orange table.availability td input:checked:focus+label{background:#e64a19;outline:2px solid #bf360c;outline-offset:-2px}.md-theme-brown table.availability td input:focus+label{outline:2px solid #a1887f;outline-offset:-2px}.md-theme-brown table.availability td input:checked+label{background:#795548}.md-theme-brown table.availability td input:checked:focus+label{background:#5d4037;outline:2px solid #3e2723;outline-offset:-2px}.md-theme-grey table.availability td input:focus+label{outline:2px solid #e0e0e0;outline-offset:-2px}.md-theme-grey table.availability td input:checked+label{background:#9e9e9e}.md-theme-grey table.availability td input:checked:focus+label{background:#616161;outline:2px solid #212121;outline-offset:-2px}.md-theme-blue-grey table.availability td input:focus+label{outline:2px solid #90a4ae;outline-offset:-2px}.md-theme-blue-grey table.availability td input:checked+label{background:#607d8b}.md-theme-blue-grey table.availability td input:checked:focus+label{background:#455a64;outline:2px solid #263238;outline-offset:-2px}.start-time-table{max-width:100%;overflow:auto}table.start-times{border:none;border-collapse:collapse;border-spacing:0;display:table;margin:2rem 0;max-width:42rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}table.start-times td,table.start-times th{border:none;display:table-cell;padding:0;vertical-align:middle;white-space:nowrap}table.start-times th{padding:.25rem}table.start-times thead{border-bottom:1px solid #e0e0e0}table.start-times thead th{text-align:center;width:12%}table.start-times thead th:first-of-type{width:16%}table.start-times>thead>tr td,table.start-times>thead>tr th{border-bottom:1px solid #e0e0e0}table.start-times>tbody>tr td,table.start-times>tbody>tr th{border-top:1px dashed #e0e0e0}table.start-times>tbody>tr.hour td,table.start-times>tbody>tr.hour th{border-top-color:#bdbdbd;border-top-style:solid}table.start-times td{background:transparent;overflow:hidden;padding:0;position:relative;text-align:center}table.start-times td label{box-sizing:border-box;display:block;height:100%;left:0;padding:.25rem;position:absolute;text-indent:-9999em;top:0;width:100%}table.start-times td label:before{background:#f5f5f5;border:2px solid #f5f5f5;border-radius:100%;content:"";display:block;height:1em;left:50%;position:absolute;margin:-.5em 0 0 -.5em;top:50%;width:1em}table.start-times td input{opacity:0}table.start-times tbody th{text-align:left}table.start-times tfoot tr{border-top:1px solid #e0e0e0}table.start-times .md-button.md-icon-button.md-dense{width:24px;min-width:24px;height:24px;min-height:24px;line-height:24px}table.start-times .md-button.md-icon-button.md-dense .md-icon{font-size:16px;width:16px;min-width:16px;height:16px;min-height:16px}table.start-times tfoot th,table.start-times thead th{position:relative}table.start-times tfoot .md-button.md-icon-button.md-dense,table.start-times thead .md-button.md-icon-button.md-dense{position:absolute;left:50%;margin-left:-12px}table.start-times tfoot .md-button.md-icon-button.md-dense{top:-6px}table.start-times thead .md-button.md-icon-button.md-dense{bottom:-6px}table.start-times th button{background:transparent;border:0 none;font-family:inherit;font-size:inherit;font-weight:inherit}.md-theme-red table.start-times td input:focus+label{outline:2px dashed #e57373;outline-offset:-2px}.md-theme-red table.start-times td input:focus+label:before{border-color:#e57373}.md-theme-red table.start-times td input:checked+label:before{background:#f44336;border-color:#f44336}.md-theme-red table.start-times td input:checked:focus+label{outline:2px dashed #f44336;outline-offset:-2px}.md-theme-pink table.start-times td input:focus+label{outline:2px dashed #f06292;outline-offset:-2px}.md-theme-pink table.start-times td input:focus+label:before{border-color:#f06292}.md-theme-pink table.start-times td input:checked+label:before{background:#e91e63;border-color:#e91e63}.md-theme-pink table.start-times td input:checked:focus+label{outline:2px dashed #e91e63;outline-offset:-2px}.md-theme-purple table.start-times td input:focus+label{outline:2px dashed #ba68c8;outline-offset:-2px}.md-theme-purple table.start-times td input:focus+label:before{border-color:#ba68c8}.md-theme-purple table.start-times td input:checked+label:before{background:#9c27b0;border-color:#9c27b0}.md-theme-purple table.start-times td input:checked:focus+label{outline:2px dashed #9c27b0;outline-offset:-2px}.md-theme-deep-purple table.start-times td input:focus+label{outline:2px dashed #9575cd;outline-offset:-2px}.md-theme-deep-purple table.start-times td input:focus+label:before{border-color:#9575cd}.md-theme-deep-purple table.start-times td input:checked+label:before{background:#673ab7;border-color:#673ab7}.md-theme-deep-purple table.start-times td input:checked:focus+label{outline:2px dashed #673ab7;outline-offset:-2px}.md-theme-indigo table.start-times td input:focus+label{outline:2px dashed #7986cb;outline-offset:-2px}.md-theme-indigo table.start-times td input:focus+label:before{border-color:#7986cb}.md-theme-indigo table.start-times td input:checked+label:before{background:#3f51b5;border-color:#3f51b5}.md-theme-indigo table.start-times td input:checked:focus+label{outline:2px dashed #3f51b5;outline-offset:-2px}.md-theme-blue table.start-times td input:focus+label{outline:2px dashed #64b5f6;outline-offset:-2px}.md-theme-blue table.start-times td input:focus+label:before{border-color:#64b5f6}.md-theme-blue table.start-times td input:checked+label:before{background:#2196f3;border-color:#2196f3}.md-theme-blue table.start-times td input:checked:focus+label{outline:2px dashed #2196f3;outline-offset:-2px}.md-theme-light-blue table.start-times td input:focus+label{outline:2px dashed #4fc3f7;outline-offset:-2px}.md-theme-light-blue table.start-times td input:focus+label:before{border-color:#4fc3f7}.md-theme-light-blue table.start-times td input:checked+label:before{background:#03a9f4;border-color:#03a9f4}.md-theme-light-blue table.start-times td input:checked:focus+label{outline:2px dashed #03a9f4;outline-offset:-2px}.md-theme-cyan table.start-times td input:focus+label{outline:2px dashed #4dd0e1;outline-offset:-2px}.md-theme-cyan table.start-times td input:focus+label:before{border-color:#4dd0e1}.md-theme-cyan table.start-times td input:checked+label:before{background:#00bcd4;border-color:#00bcd4}.md-theme-cyan table.start-times td input:checked:focus+label{outline:2px dashed #00bcd4;outline-offset:-2px}.md-theme-teal table.start-times td input:focus+label{outline:2px dashed #4db6ac;outline-offset:-2px}.md-theme-teal table.start-times td input:focus+label:before{border-color:#4db6ac}.md-theme-teal table.start-times td input:checked+label:before{background:#009688;border-color:#009688}.md-theme-teal table.start-times td input:checked:focus+label{outline:2px dashed #009688;outline-offset:-2px}.md-theme-green table.start-times td input:focus+label{outline:2px dashed #81c784;outline-offset:-2px}.md-theme-green table.start-times td input:focus+label:before{border-color:#81c784}.md-theme-green table.start-times td input:checked+label:before{background:#4caf50;border-color:#4caf50}.md-theme-green table.start-times td input:checked:focus+label{outline:2px dashed #4caf50;outline-offset:-2px}.md-theme-light-green table.start-times td input:focus+label{outline:2px dashed #aed581;outline-offset:-2px}.md-theme-light-green table.start-times td input:focus+label:before{border-color:#aed581}.md-theme-light-green table.start-times td input:checked+label:before{background:#8bc34a;border-color:#8bc34a}.md-theme-light-green table.start-times td input:checked:focus+label{outline:2px dashed #8bc34a;outline-offset:-2px}.md-theme-lime table.start-times td input:focus+label{outline:2px dashed #dce775;outline-offset:-2px}.md-theme-lime table.start-times td input:focus+label:before{border-color:#dce775}.md-theme-lime table.start-times td input:checked+label:before{background:#cddc39;border-color:#cddc39}.md-theme-lime table.start-times td input:checked:focus+label{outline:2px dashed #cddc39;outline-offset:-2px}.md-theme-yellow table.start-times td input:focus+label{outline:2px dashed #fff176;outline-offset:-2px}.md-theme-yellow table.start-times td input:focus+label:before{border-color:#fff176}.md-theme-yellow table.start-times td input:checked+label:before{background:#ffeb3b;border-color:#ffeb3b}.md-theme-yellow table.start-times td input:checked:focus+label{outline:2px dashed #ffeb3b;outline-offset:-2px}.md-theme-amber table.start-times td input:focus+label{outline:2px dashed #ffd54f;outline-offset:-2px}.md-theme-amber table.start-times td input:focus+label:before{border-color:#ffd54f}.md-theme-amber table.start-times td input:checked+label:before{background:#ffc107;border-color:#ffc107}.md-theme-amber table.start-times td input:checked:focus+label{outline:2px dashed #ffc107;outline-offset:-2px}.md-theme-orange table.start-times td input:focus+label{outline:2px dashed #ffb74d;outline-offset:-2px}.md-theme-orange table.start-times td input:focus+label:before{border-color:#ffb74d}.md-theme-orange table.start-times td input:checked+label:before{background:#ff9800;border-color:#ff9800}.md-theme-orange table.start-times td input:checked:focus+label{outline:2px dashed #ff9800;outline-offset:-2px}.md-theme-deep-orange table.start-times td input:focus+label{outline:2px dashed #ff8a65;outline-offset:-2px}.md-theme-deep-orange table.start-times td input:focus+label:before{border-color:#ff8a65}.md-theme-deep-orange table.start-times td input:checked+label:before{background:#ff5722;border-color:#ff5722}.md-theme-deep-orange table.start-times td input:checked:focus+label{outline:2px dashed #ff5722;outline-offset:-2px}.md-theme-brown table.start-times td input:focus+label{outline:2px dashed #a1887f;outline-offset:-2px}.md-theme-brown table.start-times td input:focus+label:before{border-color:#a1887f}.md-theme-brown table.start-times td input:checked+label:before{background:#795548;border-color:#795548}.md-theme-brown table.start-times td input:checked:focus+label{outline:2px dashed #795548;outline-offset:-2px}.md-theme-grey table.start-times td input:focus+label{outline:2px dashed #e0e0e0;outline-offset:-2px}.md-theme-grey table.start-times td input:focus+label:before{border-color:#e0e0e0}.md-theme-grey table.start-times td input:checked+label:before{background:#9e9e9e;border-color:#9e9e9e}.md-theme-grey table.start-times td input:checked:focus+label{outline:2px dashed #9e9e9e;outline-offset:-2px}.md-theme-blue-grey table.start-times td input:focus+label{outline:2px dashed #90a4ae;outline-offset:-2px}.md-theme-blue-grey table.start-times td input:focus+label:before{border-color:#90a4ae}.md-theme-blue-grey table.start-times td input:checked+label:before{background:#607d8b;border-color:#607d8b}.md-theme-blue-grey table.start-times td input:checked:focus+label{outline:2px dashed #607d8b;outline-offset:-2px}.foxy-table{display:flex;flex-flow:column wrap;overflow-x:auto}.foxy-table table{width:100%;border-spacing:0;border-collapse:collapse;overflow:hidden}.foxy-table tbody tr{border-top:1px solid #e0e0e0;text-wrap:nowrap}.foxy-table thead{padding:0;position:relative;color:rgba(0,0,0,.54);font-size:12px;line-height:16px;text-align:left}.foxy-table thead th{height:56px;padding:14px 0;transition:all .4s cubic-bezier(.25,.8,.25,1)}.foxy-table thead th:first-child{padding-left:20px}.foxy-table tbody td{height:42px;position:relative;transition:all .4s cubic-bezier(.25,.8,.25,1);color:rgba(0,0,0,.87);font-size:13px;line-height:18px;padding-right:40px}.foxy-table tbody td:first-child{padding-left:20px}.foxy-table tbody td:last-child{display:flex;align-items:center;justify-content:space-between}.foxy-table tbody td:last-child i.material-icons{font-size:smaller}.translations-table tbody td{height:48px;padding-right:0}.staff-listing .staff-list{list-style:none;padding:20px 0;margin:0}.staff-listing .staff-list li.list-item{min-height:72px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #d3d3d3}.staff-listing .staff-list li.list-item:not(.hover-off):hover{background:#f5f5f5;cursor:pointer}.staff-listing .staff-list li.list-item .foxy-list .foxy-list-item .mdc-deprecated-list-item__text{white-space:nowrap}.staff-listing .staff-list li.list-item .foxy-avatar{margin-right:32px;margin-left:10px;width:48px}.staff-listing .staff-list li.list-item .md-list-item-container{min-height:88px;display:flex;align-self:center;align-items:center;width:100%;font-size:16px}.staff-listing .staff-list li.list-item .md-list-item-container .md-list-text-container{display:flex;flex-direction:column}.staff-listing .staff-list li.list-item .md-list-item-container .md-list-text-container span{line-height:1.4}.staff-listing .staff-list li.list-item .md-list-item-container .md-list-text-container>:nth-child(2){font-size:14px;color:rgba(0,0,0,.74)}.staff-listing .staff-list li.list-item .md-list-item-container .md-list-text-container>:nth-child(3){font-size:14px;color:rgba(0,0,0,.54)}.staff-listing .staff-list li.list-item .md-list-item-container .staff-wp-indicator{text-decoration:none;margin-left:7px}.staff-list-assossiated{display:flex;flex-direction:column}.staff-list-assossiated label{display:inline-flex;align-items:center;gap:6px}.appt-type-review h3.md-title{margin:0}.appt-type-review p.md-caption{margin:0 0 1rem 0}.availability-list{list-style-type:none;padding-left:0;margin:1rem 0}.availability-list li{background:#fff;border-bottom:1px solid transparent;border-top:1px solid transparent;display:flex;justify-content:space-between;max-width:20rem;padding:8px}.availability-list li.selected{background:#dcedc8;border-bottom-color:#c5e1a5;border-top-color:#c5e1a5}.availability-list li+li{border-top-color:#eee;margin-top:0!important}.availability-list li+li.selected{border-bottom-color:#c5e1a5;border-top-color:#c5e1a5}.availability-list .avail{text-align:right}.availability-list .avail .times{line-height:28px}.options-list{list-style-type:none;margin:1rem 0;padding:0}.options-list li{display:flex}.options-list li span{flex-grow:1;padding-left:.5rem}.appt-type-list.disabled{opacity:.5}.appt-type-list .md-list-item{margin-left:-1rem;margin-right:-1rem;transition:background .3s ease}@media screen and (min-width:601px){.appt-type-list .md-list-item{margin-left:0;margin-right:0}}.appt-type-list .md-list-item span span:before{display:none}@media screen and (min-width:601px){.appt-type-list .md-list-item .md-list-item-container{padding:0}}.appt-type-list .md-list-item .md-list-item-container .md-list-action:last-child{margin-right:0}.appt-types .md-toolbar.md-transparent{align-items:flex-start;flex-flow:column nowrap;padding:0}@media screen and (min-width:601px){.appt-types .md-toolbar.md-transparent{align-items:center;flex-flow:row wrap}}.appt-types .md-toolbar.md-transparent .md-title:first-child{margin-left:0}.icon-toggle{margin-right:18px}.icon-toggle .md-checkbox,.icon-toggle .mdc-form-field{display:none}.icon-toggle.bulk-edit,.icon-toggle.bulk-edit-avail:hover{margin-right:10px;margin-left:-8px}.icon-toggle.bulk-edit .md-checkbox,.icon-toggle.bulk-edit .mdc-form-field,.icon-toggle.bulk-edit-avail:hover .md-checkbox,.icon-toggle.bulk-edit-avail:hover .mdc-form-field{display:inline-block}.icon-toggle.bulk-edit .md-icon,.icon-toggle.bulk-edit-avail:hover .md-icon{display:none}.appt-type-scheduling p{font-size:14px}.subsection-title{font-size:24px;font-weight:400;line-height:1.5;margin-bottom:0}.subsection-description{font-size:14px;color:#9e9e9e;margin:0}.label-inline{display:inline-block;font-weight:400;padding:0 .5rem;border-radius:15px}.label-inline.md-theme-red{background:#f44336;color:#fff}.label-inline.md-theme-pink{background:#e91e63;color:#fff}.label-inline.md-theme-purple{background:#9c27b0;color:#fff}.label-inline.md-theme-deep-purple{background:#673ab7;color:#fff}.label-inline.md-theme-indigo{background:#3f51b5;color:#fff}.label-inline.md-theme-blue{background:#2196f3;color:#fff}.label-inline.md-theme-light-blue{background:#03a9f4;color:#000}.label-inline.md-theme-cyan{background:#00bcd4;color:#000}.label-inline.md-theme-teal{background:#009688;color:#fff}.label-inline.md-theme-green{background:#4caf50;color:#000}.label-inline.md-theme-light-green{background:#8bc34a;color:#000}.label-inline.md-theme-lime{background:#cddc39;color:#000}.label-inline.md-theme-yellow{background:#ffeb3b;color:#000}.label-inline.md-theme-amber{background:#ffc107;color:#000}.label-inline.md-theme-orange{background:#ff9800;color:#000}.label-inline.md-theme-deep-orange{background:#ff5722;color:#fff}.label-inline.md-theme-brown{background:#795548;color:#fff}.label-inline.md-theme-grey{background:#9e9e9e;color:#000}.label-inline.md-theme-blue-grey{background:#607d8b;color:#fff}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-red{background-color:#f44336}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-pink{background-color:#e91e63}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-purple{background-color:#9c27b0}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-deep-purple{background-color:#673ab7}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-indigo{background-color:#3f51b5}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-blue{background-color:#2196f3}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-light-blue{background-color:#03a9f4}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-cyan{background-color:#00bcd4}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-teal{background-color:#009688}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-green{background-color:#4caf50}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-light-green{background-color:#8bc34a}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-lime{background-color:#cddc39}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-yellow{background-color:#ffeb3b}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-amber{background-color:#ffc107}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-orange{background-color:#ff9800}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-deep-orange{background-color:#ff5722}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-brown{background-color:#795548}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-grey{background-color:#9e9e9e}.labels-field-container .squares-wrapper .wrapper input+label.md-theme-blue-grey{background-color:#607d8b}.labels-field-container .squares-wrapper .wrapper input+label:before{background-color:inherit}.appt-types .appt-type-editable-list{list-style:none;padding:20px 0;margin:0}.appt-types .appt-type-editable-list li.list-item{min-height:72px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #d3d3d3}.appt-types .appt-type-editable-list li.list-item:hover{background:#f5f5f5;cursor:pointer}.appt-types .appt-type-editable-list li.list-item.deleted{opacity:.5}.appt-types .appt-type-editable-list li.list-item .text-container{font-weight:400;flex:1;display:flex;flex-direction:column}.appt-types .appt-type-editable-list li.list-item .text-container .appt-type-item-title{font-size:16px}.appt-types .appt-type-editable-list li.list-item .text-container .appt-type-item-desc{color:rgba(0,0,0,.54);font-size:14px}.appt-type-bulk-edit .ssa-accordion-item-header .md-icon,.appt-type-edit .ssa-accordion-item-header .md-icon{color:#000}.appt-type-bulk-edit .md-layout,.appt-type-edit .md-layout{margin-bottom:0}.appt-type-bulk-edit .mdc-form-field>label,.appt-type-edit .mdc-form-field>label{padding-left:0}.appt-type-bulk-edit .mdc-form-field,.appt-type-edit .mdc-form-field{margin:6px 8px 8px 0!important}.appt-type-bulk-edit .mdc-form-field .mdc-radio,.appt-type-edit .mdc-form-field .mdc-radio{margin-right:8px;padding:0}.appt-type-bulk-edit .mdc-form-field .mdc-radio input,.appt-type-edit .mdc-form-field .mdc-radio input{width:20px;height:20px}.appt-type-bulk-edit .foxy-list .foxy-list-item a,.appt-type-edit .foxy-list .foxy-list-item a{width:100%;display:flex;align-items:center}.appt-type-bulk-edit .foxy-list .foxy-list-item a span,.appt-type-edit .foxy-list .foxy-list-item a span{flex:1}.appt-type-bulk-edit .foxy-list .foxy-list-item a span .md-list-item-container,.appt-type-edit .foxy-list .foxy-list-item a span .md-list-item-container{display:flex;align-self:center;align-items:center;width:100%;font-size:16px}.appt-type-bulk-edit .foxy-list .foxy-list-item a span .md-list-item-container .md-list-text-container>:nth-child(2),.appt-type-edit .foxy-list .foxy-list-item a span .md-list-item-container .md-list-text-container>:nth-child(2){font-size:14px;color:rgba(0,0,0,.54)}.appt-type-bulk-edit .ssa-web-meetings-type a>:nth-child(2) .mdc-form-field label,.appt-type-edit .ssa-web-meetings-type a>:nth-child(2) .mdc-form-field label{font-size:16px}.appt-type-bulk-edit .appt-type-notifications p,.appt-type-bulk-edit .resources-list legend,.appt-type-edit .appt-type-notifications p,.appt-type-edit .resources-list legend{font-size:14px}.appt-type-bulk-edit .appt-type-notifications a,.appt-type-edit .appt-type-notifications a{min-height:72px}.appt-type-bulk-edit .appt-type-notifications .appt-type-notifications__opt-in h3~p,.appt-type-bulk-edit .appt-type-notifications .appt-type-notifications__selected h3~p,.appt-type-edit .appt-type-notifications .appt-type-notifications__opt-in h3~p,.appt-type-edit .appt-type-notifications .appt-type-notifications__selected h3~p{margin-top:0}.appt-type-bulk-edit .appt-type-customer-information,.appt-type-edit .appt-type-customer-information{display:flex;flex-direction:column;gap:.5rem}.appt-type-bulk-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2),.appt-type-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2){gap:2rem}.appt-type-bulk-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container span span.required,.appt-type-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container span span.required{color:#e64a19}.appt-type-bulk-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container span span.required:before,.appt-type-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container span span.required:before{width:0;margin:0}.appt-type-bulk-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container>:nth-child(2),.appt-type-edit .appt-type-customer-information .foxy-list .foxy-list-item a>:nth-child(2) .md-list-text-container>:nth-child(2){font-size:14px;color:rgba(0,0,0,.54)}.appt-type-bulk-edit .appt-type-customer-information .customer-inforamtion-plus-dialog .mdc-dialog__content,.appt-type-edit .appt-type-customer-information .customer-inforamtion-plus-dialog .mdc-dialog__content{overflow:visible}.hello{background:linear-gradient(180deg,#80deea 0,#e1f5fe 50%,#eceff1)}.content-wrap{position:relative;z-index:2}@-webkit-keyframes animateCloud{0%{margin-left:-850px}to{margin-left:100%}}@keyframes animateCloud{0%{margin-left:-850px}to{margin-left:100%}}.cloud-wrap{left:0;position:fixed;right:0;top:0;z-index:1}.cloud{background:#fff;background:linear-gradient(180deg,#fff 5%,#f1f1f1);border-radius:100px;box-shadow:0 4px 2px rgba(0,0,0,.05);height:120px;position:relative;width:350px}.cloud:after,.cloud:before{background:#fff;content:"";position:absolute;z-index:-1}.cloud:after{border-radius:100px;height:100px;left:50px;top:-50px;width:100px}.cloud:before{border-radius:200px;height:180px;right:50px;top:-90px;width:180px}.cloud-1{-webkit-animation:animateCloud 48s linear infinite;animation:animateCloud 48s linear infinite;margin-top:5%;transform:scale(.5)}.cloud-2{-webkit-animation:animateCloud 24s linear infinite;animation:animateCloud 24s linear infinite;margin-top:-15%;transform:scale(.25)}.cloud-3{-webkit-animation:animateCloud 36s linear infinite;animation:animateCloud 36s linear infinite;transform:scale(.4)}.cloud-4{-webkit-animation:animateCloud 14s linear infinite;animation:animateCloud 14s linear infinite;transform:scale(.2)}.cloud-5{-webkit-animation:animateCloud 54s linear infinite;animation:animateCloud 54s linear infinite;margin-top:-10%;transform:scale(.6)}.md-theme-red .cov-date-monthly{background-color:#c62828;color:#fff}.md-theme-pink .cov-date-monthly{background-color:#ad1457;color:#fff}.md-theme-purple .cov-date-monthly{background-color:#6a1b9a;color:#fff}.md-theme-deep-purple .cov-date-monthly{background-color:#4527a0;color:#fff}.md-theme-indigo .cov-date-monthly{background-color:#283593;color:#fff}.md-theme-blue .cov-date-monthly{background-color:#1565c0;color:#fff}.md-theme-light-blue .cov-date-monthly{background-color:#0277bd;color:#fff}.md-theme-cyan .cov-date-monthly{background-color:#00838f;color:#fff}.md-theme-teal .cov-date-monthly{background-color:#00695c;color:#fff}.md-theme-green .cov-date-monthly{background-color:#2e7d32;color:#fff}.md-theme-light-green .cov-date-monthly{background-color:#558b2f;color:#fff}.md-theme-lime .cov-date-monthly{background-color:#9e9d24;color:#fff}.md-theme-yellow .cov-date-monthly{background-color:#f9a825;color:#fff}.md-theme-amber .cov-date-monthly{background-color:#ff8f00;color:#fff}.md-theme-orange .cov-date-monthly{background-color:#ef6c00;color:#fff}.md-theme-deep-orange .cov-date-monthly{background-color:#d84315;color:#fff}.md-theme-brown .cov-date-monthly{background-color:#4e342e;color:#fff}.md-theme-grey .cov-date-monthly{background-color:#424242;color:#fff}.md-theme-blue-grey .cov-date-monthly{background-color:#37474f;color:#fff}.cov-date-body{font-size:1rem;box-shadow:0 1px 3px 0 rgba(0,0,0,.2);margin-bottom:2rem;width:100%}.cov-picker-box{background:#fff;box-sizing:border-box;padding:1rem;text-align:start!important;width:100%}.cov-date-monthly{align-items:center;display:flex}.cov-date-monthly>div{padding:24px 0;text-align:center;cursor:pointer}.cov-date-monthly .cov-date-caption{box-sizing:border-box;flex:0 1 60%;font-size:1.8rem;max-width:60%}.cov-date-monthly .cov-date-caption button{background:transparent;border:0 none;color:#fff;display:block;font:inherit;line-height:1.1;margin:0 auto;padding:0;transition:background .3s ease-in-out}.cov-date-monthly .cov-date-caption button:first-child{font-size:1.5rem}.cov-date-monthly .cov-date-caption button:focus,.cov-date-monthly .cov-date-caption button:hover{background:hsla(0,0%,100%,.1)}.cov-date-monthly .cov-date-caption button:focus{outline:1px dotted #fff}.cov-date-monthly .cov-date-next,.cov-date-monthly .cov-date-previous{background:transparent;border:0 none;color:#fff;flex:0 1 20%;font:inherit;max-width:20%;padding:0;transition:background .3s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cov-date-monthly .cov-date-next:focus,.cov-date-monthly .cov-date-next:hover,.cov-date-monthly .cov-date-previous:focus,.cov-date-monthly .cov-date-previous:hover{background:hsla(0,0%,100%,.1)}.cov-date-monthly .cov-date-next:focus,.cov-date-monthly .cov-date-previous:focus{outline:1px dotted #fff}.days{display:flex;flex-wrap:wrap}.days .day{border-radius:3px;cursor:pointer;line-height:34px;padding:0;text-align:center;transition:all .3s ease-in-out;vertical-align:middle;width:14.2857142857%}.days .day:hover{background:#eee}.days .day.unavailable{color:#bdbdbd;cursor:not-allowed}.days .day.unavailable.selected{cursor:pointer}.days .day.unavailable:hover{background:transparent}.days .day.passive-day{color:#e0e0e0}.days .day.passive-day:hover{color:#bdbdbd}.days .day.selected{background:#f57c00;color:#fff!important}.days .day.selected:hover{background:#ff9800}.days .day.readonly{cursor:not-allowed;background:#9e9e9e}.days .day.readonly:hover{background:#9e9e9e}.week ul{display:flex;list-style:none;margin:8px 0;padding:0}.week ul li{font-weight:700;text-align:center;width:14.2857142857%}.week ul li+li{margin-top:0}.date-list{overflow:auto;max-height:288px;vertical-align:top;padding:0}.date-list .date-item{display:block;cursor:pointer;font-size:20px;text-align:center;padding:10px 0}.date-list .date-item:focus-within,.date-list .date-item:hover{background:#eee}fieldset.check-list{background:transparent;border:0 none;margin:1rem 0;padding:0}fieldset.check-list legend{font-size:1rem;font-weight:400;letter-spacing:.01em;line-height:1.5}fieldset.check-list ul{list-style-type:none;margin:1rem 0;padding:0}fieldset.check-list ul li+li{margin-top:0}fieldset.check-list li .md-icon:first-child{margin:8px}.md-fieldset.field-wrapper{margin-bottom:0;margin-top:0!important;padding-bottom:16px;position:relative}.md-fieldset.field-wrapper .helper-text{color:#9e9e9e;bottom:0;font-size:12px;left:0;line-height:1;position:absolute;right:0}.md-fieldset.field-wrapper.invalid .helper-text{color:#ff5722}.md-fieldset.field-wrapper p{font-size:14px}.md-list-item.foxy-saving{opacity:.5}#ssa-admin-app{--mdc-dialog-z-index:9999}#ssa-admin-app .foxy-button-ghost .mdc-button__label,#ssa-admin-app .mdc-button .mdc-button__label{letter-spacing:normal;white-space:nowrap}.md-input-invalid .md-error{color:#d84315}ul.icon-list{list-style-type:none;margin:1rem 0;padding:0}ul.icon-list li{align-items:flex-start;display:flex;margin-bottom:1.5rem}ul.icon-list li .icon{padding-right:1rem}ul.icon-list li .details{flex:1}ul.icon-list li .details .detail-header{font-size:16px;font-weight:400;letter-spacing:.01em;line-height:1.5;margin:0}ul.icon-list li .details p{color:#616161;margin:0;overflow-wrap:anywhere}ul.icon-list li .details p a{color:#d84315}.notification-box{border:1px solid #eee}.notification-box.md-theme-red{background:#ffebee;border-color:#ffcdd2;border-left:5px solid #f44336}.notification-box.md-theme-pink{background:#fce4ec;border-color:#f8bbd0;border-left:5px solid #e91e63}.notification-box.md-theme-purple{background:#f3e5f5;border-color:#e1bee7;border-left:5px solid #9c27b0}.notification-box.md-theme-deep-purple{background:#ede7f6;border-color:#d1c4e9;border-left:5px solid #673ab7}.notification-box.md-theme-indigo{background:#e8eaf6;border-color:#c5cae9;border-left:5px solid #3f51b5}.notification-box.md-theme-blue{background:#e3f2fd;border-color:#bbdefb;border-left:5px solid #2196f3}.notification-box.md-theme-light-blue{background:#e1f5fe;border-color:#b3e5fc;border-left:5px solid #03a9f4}.notification-box.md-theme-cyan{background:#e0f7fa;border-color:#b2ebf2;border-left:5px solid #00bcd4}.notification-box.md-theme-teal{background:#e0f2f1;border-color:#b2dfdb;border-left:5px solid #009688}.notification-box.md-theme-green{background:#e8f5e9;border-color:#c8e6c9;border-left:5px solid #4caf50}.notification-box.md-theme-light-green{background:#f1f8e9;border-color:#dcedc8;border-left:5px solid #8bc34a}.notification-box.md-theme-lime{background:#f9fbe7;border-color:#f0f4c3;border-left:5px solid #cddc39}.notification-box.md-theme-yellow{background:#fffde7;border-color:#fff9c4;border-left:5px solid #ffeb3b}.notification-box.md-theme-amber{background:#fff8e1;border-color:#ffecb3;border-left:5px solid #ffc107}.notification-box.md-theme-orange{background:#fff3e0;border-color:#ffe0b2;border-left:5px solid #ff9800}.notification-box.md-theme-deep-orange{background:#fbe9e7;border-color:#ffccbc;border-left:5px solid #ff5722}.notification-box.md-theme-brown{background:#efebe9;border-color:#d7ccc8;border-left:5px solid #795548}.notification-box.md-theme-grey{background:#fafafa;border-color:#f5f5f5;border-left:5px solid #9e9e9e}.notification-box.md-theme-blue-grey{background:#eceff1;border-color:#cfd8dc;border-left:5px solid #607d8b}@media screen and (max-width:600px){.notification-box .notification-text .foxy-button-ghost,.notification-box .notification-text .mdc-button{font-size:smaller}}.link-hint{color:#e64a19}.preview{background:#fff;border:1px solid #bdbdbd;border-radius:4px;padding:.5rem;padding-bottom:4rem;overflow-wrap:break-word}.preview .emoji{width:1em;height:1em;vertical-align:-.1em;display:inline-block}.preview a,.preview p{overflow-wrap:break-word}.preview a{text-decoration:none;background:transparent;border:0 none;color:#558b2f!important;cursor:pointer;display:inline-block;font-family:inherit;font-size:inherit;margin:0;padding:0}.preview a:focus,.preview a:hover{text-decoration:underline}.promo-close-fab{margin:0;position:absolute;right:0;top:0}.promo-close-fab button{background:transparent;box-shadow:none}.side-settings-container .mdc-card.promo-google-calendar .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-google-calendar .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.promo-payment-upsell .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-payment-upsell .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.promo-plus .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-plus .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.promo-pro .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-pro .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.promo-zoom-announce .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-zoom-announce .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.promo-zoom-upgrade .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.promo-zoom-upgrade .mdc-card__actions .mdc-touch-target-wrapper .mdc-button,.side-settings-container .mdc-card.sidebar-promo.gravity-form-upsell .mdc-card__actions .mdc-touch-target-wrapper .foxy-button-ghost,.side-settings-container .mdc-card.sidebar-promo.gravity-form-upsell .mdc-card__actions .mdc-touch-target-wrapper .mdc-button{font-size:smaller!important}.settings-all .resources_settings_group .resources-list-items-cards .md-card-actions .foxy-list .foxy-list-item .mdc-deprecated-list-item__text{white-space:nowrap}.single-appointment{padding:0 1rem 1rem}.single-appointment h3{display:flex;align-items:center;gap:.5rem}.single-appointment h3 .md-avatar{margin:0}.single-appointment .customer-name{font-size:24px;font-weight:400;margin-bottom:0}.single-appointment .type{font-size:16px;margin-bottom:0;margin-top:8px}.single-appointment .type .link{font-size:14px;margin-left:.5em}.single-appointment .meeting{display:flex;margin-bottom:1.5rem;margin-top:1.5rem}.single-appointment .meeting i{margin:0 1rem 0 0}.single-appointment .meeting .link{margin-left:.5rem}.single-appointment .time{color:#616161;font-size:14px;margin-top:0}.single-appointment .customer-information{list-style-type:none;margin:1rem 0;padding-left:0;display:flex;flex-direction:column;gap:10px}.single-appointment .customer-information li{display:flex;align-items:center;font-size:14px;color:#757575}.single-appointment .customer-information li .md-icon{margin:0 1rem 0 0;width:24px}.single-appointment .customer-information li .md-list-text-container{display:flex;flex-flow:column nowrap;flex:1;overflow:hidden;line-height:1.25em;white-space:normal}.single-appointment .customer-information li span{flex:1}.single-appointment .customer-information li span span{display:block}.single-appointment .customer-information li .md-list-text-container span:first-child,.single-appointment .customer-information li span span:first-child{font-size:16px;color:#000}.single-appointment .appointment-details{border-top:1px solid #eee;display:flex;flex-direction:column;margin:2rem 0;min-width:75%;gap:10px;padding-top:2rem}.single-appointment .appointment-details .appointment-detail{display:flex;flex-direction:column;margin:0;font-size:14px}.single-appointment .appointment-details .appointment-detail dd,.single-appointment .appointment-details .appointment-detail dt{padding:.5rem;box-sizing:border-box}.single-appointment .appointment-details .appointment-detail dt{flex:1;font-weight:700;padding-left:0;width:100%!important}.single-appointment .appointment-details .appointment-detail dd{flex:0 0 70%;margin:0;padding:0}.single-appointment .appointment-details .appointment-detail a:not(.link){text-decoration:none}@media screen and (min-width:601px){.single-appointment .appointment-details{gap:0}.single-appointment .appointment-details .appointment-detail{flex-direction:row;gap:1rem}.single-appointment .appointment-details .appointment-detail dd{align-items:center;display:flex;gap:5px;padding:8px}.single-appointment .appointment-details .appointment-detail dt{flex:0 0 calc(30% - 1rem);width:25%}}.appointment-payments{border-top:1px solid #eee;margin:2rem 0;padding-top:2rem}.appointment-payments .payment-row{display:flex;justify-content:space-between}.appointment-payments .amount{font-size:1.2rem}.appointment-payments .amount.failed{color:#757575}.appointment-payments .amount .currency{font-size:.75rem}.appointment-payments .gateway-name{font-weight:700}.appointment-payments a.gateway-id{background:#e1f5fe;color:#0277bd;font-family:monospace;padding:0 .25em;transition:color .3s}.appointment-payments a.gateway-id:hover{color:#01579b}.appointment-payments .mode-tag{font-size:.75em;padding:2px 22px;text-transform:uppercase;border-radius:10px}.appointment-payments .mode-tag.test{background:#ffc107}.appointment-payments .cc-number{padding:0 1rem}.appointment-payments .payment-list-item+.payment-list-item{border-top:1px solid #eee;margin-top:1rem;padding-top:1rem}.appointment-filter #filter-time{width:260px}.appointment-filter .foxy-toolbar{gap:12px}@media screen and (max-width:600px){.appointment-filter .select-wrapper,.appointment-filter .select-wrapper #filter-time{width:100%}}.appointment-filter #icsSubscribeDialog .mdc-dialog__container{width:80%}.appointment-filter #icsSubscribeDialog .mdc-dialog__container .mdc-dialog__surface{min-width:100%}.appointment-filter #icsSubscribeDialog .mdc-dialog__container .mdc-dialog__surface code{background-color:rgba(255,158,128,.2);color:#d84315;word-break:break-all}fieldset.appointment-filter-bar{background:#f1f8e9;border-bottom:2px solid #8bc34a;border-top:2px solid #8bc34a;margin:0}fieldset.appointment-filter-bar legend{float:left;width:100%}fieldset.appointment-filter-bar legend+.clear{clear:both}fieldset.appointment-filter-bar .appointment-filter-bar-wrap{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:space-between;align-items:center;gap:10px;width:100%}@media screen and (min-width:601px){fieldset.appointment-filter-bar .appointment-filter-bar-wrap{flex-direction:row}}fieldset.appointment-filter-bar .filter-field{flex:1 1 auto;overflow:visible;flex-grow:1;width:100%}@media screen and (min-width:601px){fieldset.appointment-filter-bar .filter-field{max-width:100%;flex-grow:1;min-width:20%}}fieldset.appointment-filter-bar .textfield-container{display:grid}fieldset.appointment-filter-bar .exception .filter-field{overflow:visible}fieldset.appointment-filter-bar .filter-button{margin:0 12px}fieldset.appointment-filter-bar .filter-button.full-width{flex:1;text-align:right}fieldset.appointment-filter-bar .filter-button .md-button{padding-left:0;padding-right:0}#apptChangeStatus .mdc-dialog__surface{width:700px}#apptChangeStatus .mdc-dialog__actions{margin-top:28px}.appointments li.foxy-list-item-expandable .item-expandable-content-wrapper li.foxy-list-item .md-icon{width:24px}.appointment-group-list-items .foxy-list-container{justify-content:flex-start}.appointment-group-list-items .foxy-list-container.status-abandoned,.appointment-group-list-items .foxy-list-container.status-canceled,.appointment-group-list-items .foxy-list-container.status-canceling,.appointment-group-list-items .foxy-list-container.status-changing,.appointment-group-list-items .foxy-list-container.status-deleting{opacity:.4}.appointment-group-list-items .foxy-list-container>i{margin-right:12px}.appointment-group-list-items .foxy-list-container .foxy-list-text-container{display:flex;flex-flow:column nowrap;flex:1;overflow:hidden;line-height:1.25em;white-space:normal}.appointment-group-list-items .foxy-list-container .foxy-list-text-container p{margin:0;padding:0;color:rgba(0,0,0,.54);font-size:14px}.appointment-group-list-items .foxy-list-container .foxy-list-text-container>:nth-child(2){font-size:14px}.appointment-group-list-items .foxy-list-container .foxy-list-text-container .labeled{background:#f5f5f5;display:inline-block;font-size:.75em;padding:.13em .5em .12em;font-style:normal;margin-left:10px}.about-appt-type-list{border-bottom:1px solid #e0e0e0;margin-bottom:1rem}.about-appt-type-list .prop-title{font-size:1rem;font-weight:400;letter-spacing:.01em;line-height:1.5;margin-bottom:0}.about-appt-type-list .prop-desc{color:#616161;font-size:.75rem;font-weight:400;letter-spacing:.02em;line-height:1.417;margin-top:0}.about-appt-type-list .prop-value{font-size:1.1rem;margin-left:1em}.about-appt-type-list .prop-explanation{color:#616161}.time-picker-option{border:2px solid transparent;border-radius:3px;box-shadow:0 1px 3px #bdbdbd,0 1px 1px #f5f5f5,0 2px 1px -1px #eee;display:block;margin:0 0 .5rem 0}.time-picker-option button.time-button,.time-picker-option button.time-button[disabled]{background:transparent;border:0 none;border-radius:2px;color:#000;display:block;padding:.5rem;width:100%}.time-picker-option button.time-button:not(:disabled),.time-picker-option button.time-button[disabled]:not(:disabled){cursor:pointer}.time-picker-option button.time-button:not(:disabled):hover,.time-picker-option button.time-button[disabled]:not(:disabled):hover{background-color:rgba(0,0,0,.03)}.time-picker-option.checking{border-color:#e0e0e0}.time-picker-option.available{border-color:#81c784}.time-picker-option.not-available{border-color:#e57373}.time-picker-option .checking{color:#616161;padding:.5rem;text-align:center}.time-picker-option .checking .md-spinner{vertical-align:middle}.status-message{text-align:center}.status-message .message-container{padding:4px}.status-message .explanation{padding-bottom:.5rem}.status-message .explanation>div>p:first-child{border-top:1px solid #e0e0e0;padding-top:12px;margin:0 16px}.status-message .explanation p:nth-child(2){margin-top:0;font-size:smaller}.status-tag{background:#f5f5f5;border:1px solid #eee;border-radius:3px;display:inline-block;font-size:.8rem;padding:.1rem .75rem;margin-bottom:.5rem;text-transform:uppercase}.available .status-tag{background:#c8e6c9;border-color:#a5d6a7}.not-available .status-tag{background:#ffcdd2;border-color:#ef9a9a}.radio-wrapper{position:relative}.radio-wrapper label{border:1px solid transparent;color:#689f38;padding:.5rem;text-align:center}.radio-wrapper input{height:3rem;left:0;opacity:0;position:absolute;top:0;width:3rem}.radio-wrapper input:checked+label{background:#689f38;border-color:#689f38;box-shadow:none;color:#fff}.radio-wrapper input:focus+label{border-color:#689f38}.availability-support{border-top:1px solid #e0e0e0;margin:1rem;padding:1rem;margin-bottom:0;padding-bottom:0}.availability-support>p:first-child{margin:4px;font-size:smaller}.availability-support button{display:block;margin-left:auto;margin-right:auto}.ssa-booking-dialog .md-dialog{width:80%;height:80%;overflow:visible}.ssa-booking-dialog .md-dialog .close{position:absolute;top:-20px;right:-20px;z-index:10;width:40px;height:40px;padding:0;margin:0;border:none;line-height:40px;text-align:center;color:#fff;cursor:pointer;background-color:#689f38;border-radius:40px;box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.ssa-booking-dialog .md-dialog .md-dialog-content{padding:0}.ssa-booking-iframe-container{width:100%;height:100%}.ssa-booking-iframe-container .ssa_booking_iframe{width:100%!important;height:100%!important}.ssa-booking-dialog .close{position:absolute;top:-12px;right:-11px}.ssa-booking-dialog .mdc-dialog__container .mdc-dialog__surface{width:100vw;height:75vh;overflow:visible;max-width:80%!important}.ssa-booking-dialog .mdc-dialog__container .mdc-dialog__surface .md-dialog-content{padding:0}.appointment .single-appointment .type .mdc-dialog__container .mdc-dialog__surface{width:100vw}.appointment .single-appointment .type .mdc-dialog__container .mdc-dialog__surface .mdc-dialog__title{padding:24px 24px 0!important;display:flex!important}.cancel-dialog .mdc-dialog__container .mdc-dialog__surface{max-width:68%!important}.ssa-iframe-dialog .mdc-dialog__container .mdc-dialog__surface{width:100vw;height:75vh;max-width:80%!important}.ssa-iframe--delete-dialog .mdc-dialog__container .mdc-dialog__surface{width:100vw;max-width:80%!important}.support-contact-dialog .mdc-dialog__surface{min-width:80vw!important}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface{overflow:visible}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content{display:flex;flex-direction:column;gap:1.5rem}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .md-layout,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .md-layout{align-items:center}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface{min-width:64px;width:inherit}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface ul li,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface ul li{align-items:center;justify-content:center}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface ul li.icon-list-item a,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content .mdc-menu-surface ul li.icon-list-item a{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.appt-type-bulk-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content #icon .mdc-select__anchor,.appt-type-edit .appt-type-customer-information .mdc-dialog__surface .mdc-dialog__content #icon .mdc-select__anchor{min-width:100px}body.mdc-dialog-scroll-lock div.md-toolbar.main-app-toolbar{z-index:1}.ssa-guides{margin-bottom:1rem}.ssa-guides .md-card-header a{color:#d84315;text-decoration:none;font-size:14px}.ssa-guides .md-card-header a:hover{text-decoration:underline}.ssa-guides span{padding:8px 0;width:100%}.ssa-guides .foxy-list .foxy-list-item span{align-items:flex-start;gap:0}.ssa-guides .foxy-list .foxy-list-item span .md-avatar{margin:0}.ssa-guides .foxy-list .foxy-list-item span .md-avatar:first-child{width:24px;min-width:24px;height:24px;min-height:24px;margin-top:0;margin-bottom:0;margin-right:8px}.ssa-guides .foxy-list .foxy-list-item span .ssa-guide-label{margin-top:2px;white-space:normal;line-height:1.5}.menu-footer-btn .mdc-button--secondary:not(:disabled){padding:0 16px;color:#000!important}.notifications-settings .md-card-media{flex:1;width:100%;margin-left:0!important}.notifications-settings .md-card-header-text{min-height:80px}.notifications-settings .md-card .md-card-header.md-card-header-flex{align-items:flex-start;flex-direction:column;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}@media(min-width:500px){.notifications-settings .md-card .md-card-header.md-card-header-flex{flex-direction:row}.notifications-settings .md-card .md-card-header.md-card-header-flex .md-card-media{width:80px;flex:0 0 80px;height:80px;margin-left:16px}}.notifications-settings .md-card .md-card-actions{padding:8px 16px 8px 16px}.notifications-settings .notification-list{list-style:none;padding:20px 0;margin:0}.notifications-settings .notification-list .notification-list-item{min-height:72px;display:flex;align-items:center;justify-content:space-between}.notifications-settings .notification-list .notification-list-item:not(.hover-off):hover{background:#f5f5f5;cursor:pointer}.notifications-settings .notification-list .notification-list-item .mdc-form-field{margin-right:32px;margin-left:10px;width:48px}.notifications-settings .notification-list .notification-list-item .md-list-item-container{min-height:70px;display:flex;align-self:center;align-items:center;width:100%;font-size:16px}.notifications-settings .notification-list .notification-list-item .md-list-item-container .md-list-text-container{display:flex;flex-direction:column}.notifications-settings .notification-list .notification-list-item .md-list-item-container .md-list-text-container span{line-height:1.4;font-size:14px}.notifications-settings .notification-list .notification-list-item .md-list-item-container .md-list-text-container>:first-child{display:inline-flex;gap:6px}.notifications-settings .notification-list .notification-list-item .md-list-item-container .md-list-text-container>:nth-child(2),.notifications-settings .notification-list .notification-list-item .md-list-item-container .md-list-text-container>:nth-child(3){color:rgba(0,0,0,.54)}.notifications-settings .notification-list .notification-list-item .mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;overflow:visible}.payments-settings{padding-bottom:1rem}.payments-settings .settings-list-container{margin-bottom:4rem!important}.payments-settings.settings-list .mdc-select2{margin-bottom:2rem}.notifications-sms .ssa-accordion-item .mdc-text-field-helper-line{color:#558b2f!important}.notifications-sms .ssa-accordion-item-content .mdc-text-field-helper-text a{background:transparent;border:0 none;color:#558b2f!important;cursor:pointer;display:inline-block;font-family:inherit;font-size:inherit;margin:0;padding:0;text-decoration:none}.notifications-sms .ssa-accordion-item-content .mdc-text-field-helper-text a:focus,.notifications-sms .ssa-accordion-item-content .mdc-text-field-helper-text a:hover{text-decoration:underline}.mailchimp-settings .mdc-text-field-helper-line a{background:transparent;border:0 none;color:#558b2f!important;cursor:pointer;display:inline-block;font-family:inherit;font-size:inherit;margin:0;padding:0;text-decoration:none}.mailchimp-settings .mdc-text-field-helper-line a:focus,.mailchimp-settings .mdc-text-field-helper-line a:hover{text-decoration:underline}.app-error{width:100%;max-width:960px}.ssa-accordion{margin:0}.ssa-accordion-item{border:1px solid #aed581;border-top:0 none;box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);margin:0 8px;transition:margin .35s cubic-bezier(.25,.46,.45,.94)}.ssa-accordion-item.active+.ssa-accordion-item,.ssa-accordion-item:first-child{border-top:1px solid #aed581}.ssa-accordion-item .accordion-toggle{transition:transform .25s}.ssa-accordion-item.active{border-top:1px solid #aed581;box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15);margin:8px 0}.ssa-accordion-item.active .accordion-toggle{transform:rotate(180deg)}.ssa-accordion-item-header{background:#fff;border:0 none;box-sizing:border-box;cursor:pointer;display:flex;line-height:1.5;padding:1rem;text-align:left;transition:background .25s ease-in;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.active .ssa-accordion-item-header{border-bottom:1px solid #aed581}.ssa-accordion-item-header:active,.ssa-accordion-item-header:focus,.ssa-accordion-item-header:hover{background:#dcedc8;outline:0}.error .ssa-accordion-item-header{background-color:#ffe0b2!important;border-top-color:#ff9800!important}.ssa-accordion-item-header .text-container{flex:1}.ssa-accordion-item-header .text-container span{display:block}.ssa-accordion-item-header .text-container .label{font-size:16px}.ssa-accordion-item-header .text-container .message{color:#9e9e9e;font-size:14px}.ssa-accordion-item-header .md-icon{margin-right:1rem!important;margin:auto;color:#000!important}.ssa-accordion-item-content{background-color:#fff;border-bottom:1px solid #aed581}.ssa-accordion-item-wrap{padding:1rem}.md-theme-red .ssa-accordion,.md-theme-red .ssa-accordion-item{border-color:#e57373}.md-theme-red .active,.md-theme-red .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#e57373}.md-theme-red .active .ssa-accordion-item-header{background-color:#ffebee}.md-theme-red .active .text-container label{color:#f44336}.md-theme-red .active .text-container .message{color:#d32f2f}.md-theme-red .ssa-accordion-item-header{border-color:#e57373}.md-theme-red .ssa-accordion-item-header:active,.md-theme-red .ssa-accordion-item-header:focus,.md-theme-red .ssa-accordion-item-header:hover{background-color:#ffebee}.md-theme-red .ssa-accordion-item-header:active .text-container label,.md-theme-red .ssa-accordion-item-header:focus .text-container label,.md-theme-red .ssa-accordion-item-header:hover .text-container label{color:#f44336}.md-theme-red .ssa-accordion-item-header:active .text-container .message,.md-theme-red .ssa-accordion-item-header:focus .text-container .message,.md-theme-red .ssa-accordion-item-header:hover .text-container .message{color:#d32f2f}.md-theme-pink .ssa-accordion,.md-theme-pink .ssa-accordion-item{border-color:#f06292}.md-theme-pink .active,.md-theme-pink .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#f06292}.md-theme-pink .active .ssa-accordion-item-header{background-color:#fce4ec}.md-theme-pink .active .text-container label{color:#e91e63}.md-theme-pink .active .text-container .message{color:#c2185b}.md-theme-pink .ssa-accordion-item-header{border-color:#f06292}.md-theme-pink .ssa-accordion-item-header:active,.md-theme-pink .ssa-accordion-item-header:focus,.md-theme-pink .ssa-accordion-item-header:hover{background-color:#fce4ec}.md-theme-pink .ssa-accordion-item-header:active .text-container label,.md-theme-pink .ssa-accordion-item-header:focus .text-container label,.md-theme-pink .ssa-accordion-item-header:hover .text-container label{color:#e91e63}.md-theme-pink .ssa-accordion-item-header:active .text-container .message,.md-theme-pink .ssa-accordion-item-header:focus .text-container .message,.md-theme-pink .ssa-accordion-item-header:hover .text-container .message{color:#c2185b}.md-theme-purple .ssa-accordion,.md-theme-purple .ssa-accordion-item{border-color:#ba68c8}.md-theme-purple .active,.md-theme-purple .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#ba68c8}.md-theme-purple .active .ssa-accordion-item-header{background-color:#f3e5f5}.md-theme-purple .active .text-container label{color:#9c27b0}.md-theme-purple .active .text-container .message{color:#7b1fa2}.md-theme-purple .ssa-accordion-item-header{border-color:#ba68c8}.md-theme-purple .ssa-accordion-item-header:active,.md-theme-purple .ssa-accordion-item-header:focus,.md-theme-purple .ssa-accordion-item-header:hover{background-color:#f3e5f5}.md-theme-purple .ssa-accordion-item-header:active .text-container label,.md-theme-purple .ssa-accordion-item-header:focus .text-container label,.md-theme-purple .ssa-accordion-item-header:hover .text-container label{color:#9c27b0}.md-theme-purple .ssa-accordion-item-header:active .text-container .message,.md-theme-purple .ssa-accordion-item-header:focus .text-container .message,.md-theme-purple .ssa-accordion-item-header:hover .text-container .message{color:#7b1fa2}.md-theme-deep-purple .ssa-accordion,.md-theme-deep-purple .ssa-accordion-item{border-color:#9575cd}.md-theme-deep-purple .active,.md-theme-deep-purple .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#9575cd}.md-theme-deep-purple .active .ssa-accordion-item-header{background-color:#ede7f6}.md-theme-deep-purple .active .text-container label{color:#673ab7}.md-theme-deep-purple .active .text-container .message{color:#512da8}.md-theme-deep-purple .ssa-accordion-item-header{border-color:#9575cd}.md-theme-deep-purple .ssa-accordion-item-header:active,.md-theme-deep-purple .ssa-accordion-item-header:focus,.md-theme-deep-purple .ssa-accordion-item-header:hover{background-color:#ede7f6}.md-theme-deep-purple .ssa-accordion-item-header:active .text-container label,.md-theme-deep-purple .ssa-accordion-item-header:focus .text-container label,.md-theme-deep-purple .ssa-accordion-item-header:hover .text-container label{color:#673ab7}.md-theme-deep-purple .ssa-accordion-item-header:active .text-container .message,.md-theme-deep-purple .ssa-accordion-item-header:focus .text-container .message,.md-theme-deep-purple .ssa-accordion-item-header:hover .text-container .message{color:#512da8}.md-theme-indigo .ssa-accordion,.md-theme-indigo .ssa-accordion-item{border-color:#7986cb}.md-theme-indigo .active,.md-theme-indigo .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#7986cb}.md-theme-indigo .active .ssa-accordion-item-header{background-color:#e8eaf6}.md-theme-indigo .active .text-container label{color:#3f51b5}.md-theme-indigo .active .text-container .message{color:#303f9f}.md-theme-indigo .ssa-accordion-item-header{border-color:#7986cb}.md-theme-indigo .ssa-accordion-item-header:active,.md-theme-indigo .ssa-accordion-item-header:focus,.md-theme-indigo .ssa-accordion-item-header:hover{background-color:#e8eaf6}.md-theme-indigo .ssa-accordion-item-header:active .text-container label,.md-theme-indigo .ssa-accordion-item-header:focus .text-container label,.md-theme-indigo .ssa-accordion-item-header:hover .text-container label{color:#3f51b5}.md-theme-indigo .ssa-accordion-item-header:active .text-container .message,.md-theme-indigo .ssa-accordion-item-header:focus .text-container .message,.md-theme-indigo .ssa-accordion-item-header:hover .text-container .message{color:#303f9f}.md-theme-blue .ssa-accordion,.md-theme-blue .ssa-accordion-item{border-color:#64b5f6}.md-theme-blue .active,.md-theme-blue .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#64b5f6}.md-theme-blue .active .ssa-accordion-item-header{background-color:#e3f2fd}.md-theme-blue .active .text-container label{color:#2196f3}.md-theme-blue .active .text-container .message{color:#1976d2}.md-theme-blue .ssa-accordion-item-header{border-color:#64b5f6}.md-theme-blue .ssa-accordion-item-header:active,.md-theme-blue .ssa-accordion-item-header:focus,.md-theme-blue .ssa-accordion-item-header:hover{background-color:#e3f2fd}.md-theme-blue .ssa-accordion-item-header:active .text-container label,.md-theme-blue .ssa-accordion-item-header:focus .text-container label,.md-theme-blue .ssa-accordion-item-header:hover .text-container label{color:#2196f3}.md-theme-blue .ssa-accordion-item-header:active .text-container .message,.md-theme-blue .ssa-accordion-item-header:focus .text-container .message,.md-theme-blue .ssa-accordion-item-header:hover .text-container .message{color:#1976d2}.md-theme-light-blue .ssa-accordion,.md-theme-light-blue .ssa-accordion-item{border-color:#4fc3f7}.md-theme-light-blue .active,.md-theme-light-blue .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#4fc3f7}.md-theme-light-blue .active .ssa-accordion-item-header{background-color:#e1f5fe}.md-theme-light-blue .active .text-container label{color:#03a9f4}.md-theme-light-blue .active .text-container .message{color:#0288d1}.md-theme-light-blue .ssa-accordion-item-header{border-color:#4fc3f7}.md-theme-light-blue .ssa-accordion-item-header:active,.md-theme-light-blue .ssa-accordion-item-header:focus,.md-theme-light-blue .ssa-accordion-item-header:hover{background-color:#e1f5fe}.md-theme-light-blue .ssa-accordion-item-header:active .text-container label,.md-theme-light-blue .ssa-accordion-item-header:focus .text-container label,.md-theme-light-blue .ssa-accordion-item-header:hover .text-container label{color:#03a9f4}.md-theme-light-blue .ssa-accordion-item-header:active .text-container .message,.md-theme-light-blue .ssa-accordion-item-header:focus .text-container .message,.md-theme-light-blue .ssa-accordion-item-header:hover .text-container .message{color:#0288d1}.md-theme-cyan .ssa-accordion,.md-theme-cyan .ssa-accordion-item{border-color:#4dd0e1}.md-theme-cyan .active,.md-theme-cyan .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#4dd0e1}.md-theme-cyan .active .ssa-accordion-item-header{background-color:#e0f7fa}.md-theme-cyan .active .text-container label{color:#00bcd4}.md-theme-cyan .active .text-container .message{color:#0097a7}.md-theme-cyan .ssa-accordion-item-header{border-color:#4dd0e1}.md-theme-cyan .ssa-accordion-item-header:active,.md-theme-cyan .ssa-accordion-item-header:focus,.md-theme-cyan .ssa-accordion-item-header:hover{background-color:#e0f7fa}.md-theme-cyan .ssa-accordion-item-header:active .text-container label,.md-theme-cyan .ssa-accordion-item-header:focus .text-container label,.md-theme-cyan .ssa-accordion-item-header:hover .text-container label{color:#00bcd4}.md-theme-cyan .ssa-accordion-item-header:active .text-container .message,.md-theme-cyan .ssa-accordion-item-header:focus .text-container .message,.md-theme-cyan .ssa-accordion-item-header:hover .text-container .message{color:#0097a7}.md-theme-teal .ssa-accordion,.md-theme-teal .ssa-accordion-item{border-color:#4db6ac}.md-theme-teal .active,.md-theme-teal .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#4db6ac}.md-theme-teal .active .ssa-accordion-item-header{background-color:#e0f2f1}.md-theme-teal .active .text-container label{color:#009688}.md-theme-teal .active .text-container .message{color:#00796b}.md-theme-teal .ssa-accordion-item-header{border-color:#4db6ac}.md-theme-teal .ssa-accordion-item-header:active,.md-theme-teal .ssa-accordion-item-header:focus,.md-theme-teal .ssa-accordion-item-header:hover{background-color:#e0f2f1}.md-theme-teal .ssa-accordion-item-header:active .text-container label,.md-theme-teal .ssa-accordion-item-header:focus .text-container label,.md-theme-teal .ssa-accordion-item-header:hover .text-container label{color:#009688}.md-theme-teal .ssa-accordion-item-header:active .text-container .message,.md-theme-teal .ssa-accordion-item-header:focus .text-container .message,.md-theme-teal .ssa-accordion-item-header:hover .text-container .message{color:#00796b}.md-theme-green .ssa-accordion,.md-theme-green .ssa-accordion-item{border-color:#81c784}.md-theme-green .active,.md-theme-green .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#81c784}.md-theme-green .active .ssa-accordion-item-header{background-color:#e8f5e9}.md-theme-green .active .text-container label{color:#4caf50}.md-theme-green .active .text-container .message{color:#388e3c}.md-theme-green .ssa-accordion-item-header{border-color:#81c784}.md-theme-green .ssa-accordion-item-header:active,.md-theme-green .ssa-accordion-item-header:focus,.md-theme-green .ssa-accordion-item-header:hover{background-color:#e8f5e9}.md-theme-green .ssa-accordion-item-header:active .text-container label,.md-theme-green .ssa-accordion-item-header:focus .text-container label,.md-theme-green .ssa-accordion-item-header:hover .text-container label{color:#4caf50}.md-theme-green .ssa-accordion-item-header:active .text-container .message,.md-theme-green .ssa-accordion-item-header:focus .text-container .message,.md-theme-green .ssa-accordion-item-header:hover .text-container .message{color:#388e3c}.md-theme-light-green .ssa-accordion,.md-theme-light-green .ssa-accordion-item{border-color:#aed581}.md-theme-light-green .active,.md-theme-light-green .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#aed581}.md-theme-light-green .active .ssa-accordion-item-header{background-color:#f1f8e9}.md-theme-light-green .active .text-container label{color:#8bc34a}.md-theme-light-green .active .text-container .message{color:#689f38}.md-theme-light-green .ssa-accordion-item-header{border-color:#aed581}.md-theme-light-green .ssa-accordion-item-header:active,.md-theme-light-green .ssa-accordion-item-header:focus,.md-theme-light-green .ssa-accordion-item-header:hover{background-color:#f1f8e9}.md-theme-light-green .ssa-accordion-item-header:active .text-container label,.md-theme-light-green .ssa-accordion-item-header:focus .text-container label,.md-theme-light-green .ssa-accordion-item-header:hover .text-container label{color:#8bc34a}.md-theme-light-green .ssa-accordion-item-header:active .text-container .message,.md-theme-light-green .ssa-accordion-item-header:focus .text-container .message,.md-theme-light-green .ssa-accordion-item-header:hover .text-container .message{color:#689f38}.md-theme-lime .ssa-accordion,.md-theme-lime .ssa-accordion-item{border-color:#dce775}.md-theme-lime .active,.md-theme-lime .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#dce775}.md-theme-lime .active .ssa-accordion-item-header{background-color:#f9fbe7}.md-theme-lime .active .text-container label{color:#cddc39}.md-theme-lime .active .text-container .message{color:#afb42b}.md-theme-lime .ssa-accordion-item-header{border-color:#dce775}.md-theme-lime .ssa-accordion-item-header:active,.md-theme-lime .ssa-accordion-item-header:focus,.md-theme-lime .ssa-accordion-item-header:hover{background-color:#f9fbe7}.md-theme-lime .ssa-accordion-item-header:active .text-container label,.md-theme-lime .ssa-accordion-item-header:focus .text-container label,.md-theme-lime .ssa-accordion-item-header:hover .text-container label{color:#cddc39}.md-theme-lime .ssa-accordion-item-header:active .text-container .message,.md-theme-lime .ssa-accordion-item-header:focus .text-container .message,.md-theme-lime .ssa-accordion-item-header:hover .text-container .message{color:#afb42b}.md-theme-yellow .ssa-accordion,.md-theme-yellow .ssa-accordion-item{border-color:#fff176}.md-theme-yellow .active,.md-theme-yellow .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#fff176}.md-theme-yellow .active .ssa-accordion-item-header{background-color:#fffde7}.md-theme-yellow .active .text-container label{color:#ffeb3b}.md-theme-yellow .active .text-container .message{color:#fbc02d}.md-theme-yellow .ssa-accordion-item-header{border-color:#fff176}.md-theme-yellow .ssa-accordion-item-header:active,.md-theme-yellow .ssa-accordion-item-header:focus,.md-theme-yellow .ssa-accordion-item-header:hover{background-color:#fffde7}.md-theme-yellow .ssa-accordion-item-header:active .text-container label,.md-theme-yellow .ssa-accordion-item-header:focus .text-container label,.md-theme-yellow .ssa-accordion-item-header:hover .text-container label{color:#ffeb3b}.md-theme-yellow .ssa-accordion-item-header:active .text-container .message,.md-theme-yellow .ssa-accordion-item-header:focus .text-container .message,.md-theme-yellow .ssa-accordion-item-header:hover .text-container .message{color:#fbc02d}.md-theme-amber .ssa-accordion,.md-theme-amber .ssa-accordion-item{border-color:#ffd54f}.md-theme-amber .active,.md-theme-amber .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#ffd54f}.md-theme-amber .active .ssa-accordion-item-header{background-color:#fff8e1}.md-theme-amber .active .text-container label{color:#ffc107}.md-theme-amber .active .text-container .message{color:#ffa000}.md-theme-amber .ssa-accordion-item-header{border-color:#ffd54f}.md-theme-amber .ssa-accordion-item-header:active,.md-theme-amber .ssa-accordion-item-header:focus,.md-theme-amber .ssa-accordion-item-header:hover{background-color:#fff8e1}.md-theme-amber .ssa-accordion-item-header:active .text-container label,.md-theme-amber .ssa-accordion-item-header:focus .text-container label,.md-theme-amber .ssa-accordion-item-header:hover .text-container label{color:#ffc107}.md-theme-amber .ssa-accordion-item-header:active .text-container .message,.md-theme-amber .ssa-accordion-item-header:focus .text-container .message,.md-theme-amber .ssa-accordion-item-header:hover .text-container .message{color:#ffa000}.md-theme-orange .ssa-accordion,.md-theme-orange .ssa-accordion-item{border-color:#ffb74d}.md-theme-orange .active,.md-theme-orange .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#ffb74d}.md-theme-orange .active .ssa-accordion-item-header{background-color:#fff3e0}.md-theme-orange .active .text-container label{color:#ff9800}.md-theme-orange .active .text-container .message{color:#f57c00}.md-theme-orange .ssa-accordion-item-header{border-color:#ffb74d}.md-theme-orange .ssa-accordion-item-header:active,.md-theme-orange .ssa-accordion-item-header:focus,.md-theme-orange .ssa-accordion-item-header:hover{background-color:#fff3e0}.md-theme-orange .ssa-accordion-item-header:active .text-container label,.md-theme-orange .ssa-accordion-item-header:focus .text-container label,.md-theme-orange .ssa-accordion-item-header:hover .text-container label{color:#ff9800}.md-theme-orange .ssa-accordion-item-header:active .text-container .message,.md-theme-orange .ssa-accordion-item-header:focus .text-container .message,.md-theme-orange .ssa-accordion-item-header:hover .text-container .message{color:#f57c00}.md-theme-deep-orange .ssa-accordion,.md-theme-deep-orange .ssa-accordion-item{border-color:#ff8a65}.md-theme-deep-orange .active,.md-theme-deep-orange .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#ff8a65}.md-theme-deep-orange .active .ssa-accordion-item-header{background-color:#fbe9e7}.md-theme-deep-orange .active .text-container label{color:#ff5722}.md-theme-deep-orange .active .text-container .message{color:#e64a19}.md-theme-deep-orange .ssa-accordion-item-header{border-color:#ff8a65}.md-theme-deep-orange .ssa-accordion-item-header:active,.md-theme-deep-orange .ssa-accordion-item-header:focus,.md-theme-deep-orange .ssa-accordion-item-header:hover{background-color:#fbe9e7}.md-theme-deep-orange .ssa-accordion-item-header:active .text-container label,.md-theme-deep-orange .ssa-accordion-item-header:focus .text-container label,.md-theme-deep-orange .ssa-accordion-item-header:hover .text-container label{color:#ff5722}.md-theme-deep-orange .ssa-accordion-item-header:active .text-container .message,.md-theme-deep-orange .ssa-accordion-item-header:focus .text-container .message,.md-theme-deep-orange .ssa-accordion-item-header:hover .text-container .message{color:#e64a19}.md-theme-brown .ssa-accordion,.md-theme-brown .ssa-accordion-item{border-color:#a1887f}.md-theme-brown .active,.md-theme-brown .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#a1887f}.md-theme-brown .active .ssa-accordion-item-header{background-color:#efebe9}.md-theme-brown .active .text-container label{color:#795548}.md-theme-brown .active .text-container .message{color:#5d4037}.md-theme-brown .ssa-accordion-item-header{border-color:#a1887f}.md-theme-brown .ssa-accordion-item-header:active,.md-theme-brown .ssa-accordion-item-header:focus,.md-theme-brown .ssa-accordion-item-header:hover{background-color:#efebe9}.md-theme-brown .ssa-accordion-item-header:active .text-container label,.md-theme-brown .ssa-accordion-item-header:focus .text-container label,.md-theme-brown .ssa-accordion-item-header:hover .text-container label{color:#795548}.md-theme-brown .ssa-accordion-item-header:active .text-container .message,.md-theme-brown .ssa-accordion-item-header:focus .text-container .message,.md-theme-brown .ssa-accordion-item-header:hover .text-container .message{color:#5d4037}.md-theme-grey .ssa-accordion,.md-theme-grey .ssa-accordion-item{border-color:#e0e0e0}.md-theme-grey .active,.md-theme-grey .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#e0e0e0}.md-theme-grey .active .ssa-accordion-item-header{background-color:#fafafa}.md-theme-grey .active .text-container label{color:#9e9e9e}.md-theme-grey .active .text-container .message{color:#616161}.md-theme-grey .ssa-accordion-item-header{border-color:#e0e0e0}.md-theme-grey .ssa-accordion-item-header:active,.md-theme-grey .ssa-accordion-item-header:focus,.md-theme-grey .ssa-accordion-item-header:hover{background-color:#fafafa}.md-theme-grey .ssa-accordion-item-header:active .text-container label,.md-theme-grey .ssa-accordion-item-header:focus .text-container label,.md-theme-grey .ssa-accordion-item-header:hover .text-container label{color:#9e9e9e}.md-theme-grey .ssa-accordion-item-header:active .text-container .message,.md-theme-grey .ssa-accordion-item-header:focus .text-container .message,.md-theme-grey .ssa-accordion-item-header:hover .text-container .message{color:#616161}.md-theme-blue-grey .ssa-accordion,.md-theme-blue-grey .ssa-accordion-item{border-color:#90a4ae}.md-theme-blue-grey .active,.md-theme-blue-grey .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#90a4ae}.md-theme-blue-grey .active .ssa-accordion-item-header{background-color:#eceff1}.md-theme-blue-grey .active .text-container label{color:#607d8b}.md-theme-blue-grey .active .text-container .message{color:#455a64}.md-theme-blue-grey .ssa-accordion-item-header{border-color:#90a4ae}.md-theme-blue-grey .ssa-accordion-item-header:active,.md-theme-blue-grey .ssa-accordion-item-header:focus,.md-theme-blue-grey .ssa-accordion-item-header:hover{background-color:#eceff1}.md-theme-blue-grey .ssa-accordion-item-header:active .text-container label,.md-theme-blue-grey .ssa-accordion-item-header:focus .text-container label,.md-theme-blue-grey .ssa-accordion-item-header:hover .text-container label{color:#607d8b}.md-theme-blue-grey .ssa-accordion-item-header:active .text-container .message,.md-theme-blue-grey .ssa-accordion-item-header:focus .text-container .message,.md-theme-blue-grey .ssa-accordion-item-header:hover .text-container .message{color:#455a64}.md-theme-black .ssa-accordion,.md-theme-black .ssa-accordion-item{border-color:#424242}.md-theme-black .active,.md-theme-black .ssa-accordion-item.active+.ssa-accordion-item{border-top-color:#424242}.md-theme-black .active .ssa-accordion-item-header{background-color:#5c5c5c}.md-theme-black .active .text-container label{color:#313131}.md-theme-black .active .text-container .message{color:#202020}.md-theme-black .ssa-accordion-item-header{border-color:#424242}.md-theme-black .ssa-accordion-item-header:active,.md-theme-black .ssa-accordion-item-header:focus,.md-theme-black .ssa-accordion-item-header:hover{background-color:#5c5c5c}.md-theme-black .ssa-accordion-item-header:active .text-container label,.md-theme-black .ssa-accordion-item-header:focus .text-container label,.md-theme-black .ssa-accordion-item-header:hover .text-container label{color:#313131}.md-theme-black .ssa-accordion-item-header:active .text-container .message,.md-theme-black .ssa-accordion-item-header:focus .text-container .message,.md-theme-black .ssa-accordion-item-header:hover .text-container .message{color:#202020}.accordion-actions{align-items:center;display:flex;justify-content:flex-end;padding:8px}.accordion-edit-section{opacity:1;transition:opacity .3s ease-in-out}.accordion-edit-section.saving{opacity:.25}.ssa-accordion-item-content .ssa-accordion-item-wrap{position:relative}.ssa-accordion-item-content .ssa-accordion-item-wrap .accordion-item-disabled-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:hsla(0,0%,100%,.5);z-index:4;cursor:not-allowed}.foxy-auto-complete[data-v-c6e63ed6]{width:100%}.autocomplete[data-v-c6e63ed6]{position:relative}.list-options-container[data-v-c6e63ed6]{width:100%;top:4.5rem;position:absolute}ul[data-v-c6e63ed6]{list-style-type:none;padding:8px 0;margin:0;z-index:1000;background-color:#fff;border:1px solid #ddd;max-height:200px;overflow:auto}li[data-v-c6e63ed6]{padding:16px;cursor:pointer}li.active[data-v-c6e63ed6],li[data-v-c6e63ed6]:hover{background-color:#c4c4c4}.md-avatar{width:40px;min-width:40px;height:40px;min-height:40px;margin:auto;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:relative;border-radius:40px;vertical-align:middle}.md-avatar.md-large{width:64px;min-width:64px;height:64px;min-height:64px;border-radius:64px}.md-avatar.md-large .md-icon{width:40px;min-width:40px;height:40px;min-height:40px;font-size:40px;line-height:40px}.md-avatar.md-avatar-icon{background-color:rgba(0,0,0,.38)}.md-theme-default.md-avatar.md-primary.md-avatar-icon{background-color:#558b2f}.md-theme-default.md-avatar.md-avatar-icon .md-icon{color:#fff}.md-avatar .md-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.md-avatar img{width:100%;height:100%;display:block}.md-avatar .md-ink-ripple{border-radius:50%}.md-avatar .md-ink-ripple .md-ripple.md-active{-webkit-animation-duration:.9s;animation-duration:.9s}.md-avatar-tooltip.md-tooltip-top{margin-top:-8px}.md-avatar-tooltip.md-tooltip-right{margin-left:8px}.md-avatar-tooltip.md-tooltip-bottom{margin-top:8px}.md-avatar-tooltip.md-tooltip-left{margin-left:-8px}.md-card .md-card-header .md-avatar{margin-right:16px;float:left}.md-card .md-card-header .md-avatar~.md-title{font-size:14px}.md-card .md-card-header .md-avatar~.md-subhead,.md-card .md-card-header .md-avatar~.md-title{font-weight:500;line-height:20px}.md-list.md-dense .md-list-item .md-list-item-container .md-avatar:first-child,.md-list.md-dense .md-list-item .md-list-item-container .md-list-action:first-child{margin-right:24px}.md-list.md-dense .md-avatar{width:32px;min-width:32px;height:32px;min-height:32px}.md-list.md-dense .md-list-item-expand{min-height:40px}.md-list.md-double-line.md-dense .md-list-item .md-list-item-container{min-height:60px}.md-list.md-double-line.md-dense .md-list-item .md-avatar{width:36px;min-width:36px;height:36px;min-height:36px}.md-list.md-double-line.md-dense .md-list-item .md-avatar .md-avatar:first-child,.md-list.md-double-line.md-dense .md-list-item .md-avatar .md-list-action:first-child{margin-right:20px}.md-list.md-triple-line.md-dense .md-list-item .md-avatar{width:36px;min-width:36px;height:36px;min-height:36px}.md-list.md-triple-line.md-dense .md-list-item .md-avatar .md-avatar:first-child,.md-list.md-triple-line.md-dense .md-list-item .md-avatar .md-list-action:first-child{margin-right:20px}.md-list.md-triple-line .md-avatar{margin:0}.md-list-item .md-list-item-container .md-avatar:first-child,.md-list-item .md-list-item-container .md-list-action:first-child{margin-right:16px}.md-list-item .md-avatar,.md-list-item .md-icon,.md-list-item .md-list-action:first-child{margin:0}.md-list-item .md-avatar:first-of-type+*,.md-list-item .md-icon:first-of-type+*,.md-list-item .md-list-action:first-child:first-of-type+*{flex:1 1 auto}.md-list-item .md-avatar{margin-top:8px;margin-bottom:8px}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:transparent}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}.mdc-button .mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button .mdc-button__icon{margin-left:8px;margin-right:0}.mdc-button .mdc-button__label{position:relative}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}.mdc-button__label+.mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button__label+.mdc-button__icon{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration,none);text-decoration:var(--mdc-typography-button-text-decoration,none);padding:0 8px 0 8px}.mdc-button--unelevated{transition:box-shadow .28s cubic-bezier(.4,0,.2,1);padding:0 16px 0 16px}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised{transition:box-shadow .28s cubic-bezier(.4,0,.2,1);padding:0 16px 0 16px}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--outlined{border-style:solid;transition:border .28s cubic-bezier(.4,0,.2,1)}.mdc-button--outlined .mdc-button__ripple{border-style:solid;border-color:transparent}.mdc-button{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-button .mdc-button__ripple:after,.mdc-button .mdc-button__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-button .mdc-button__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-button .mdc-button__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-button.mdc-ripple-upgraded--unbounded .mdc-button__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-button.mdc-ripple-upgraded--foreground-activation .mdc-button__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-button.mdc-ripple-upgraded--foreground-deactivation .mdc-button__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-button .mdc-button__ripple:after,.mdc-button .mdc-button__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-button .mdc-button__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden;z-index:0}.mdc-button:not(.mdc-button--outlined) .mdc-button__ripple{top:0;left:0}.mdc-button{font-family:Roboto,sans-serif;font-family:var(--mdc-text-button-label-text-font,var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif)));font-size:.875rem;font-size:var(--mdc-text-button-label-text-size,var(--mdc-typography-button-font-size,.875rem));letter-spacing:.0892857143em;letter-spacing:var(--mdc-text-button-label-text-tracking,var(--mdc-typography-button-letter-spacing,.0892857143em));font-weight:500;font-weight:var(--mdc-text-button-label-text-weight,var(--mdc-typography-button-font-weight,500));text-transform:uppercase;text-transform:var(--mdc-text-button-label-text-transform,var(--mdc-typography-button-text-transform,uppercase));height:36px;height:var(--mdc-text-button-container-height,36px);border-radius:4px;border-radius:var(--mdc-text-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-text-button-label-text-color,var(--mdc-theme-primary,#6200ee))}.mdc-button:disabled{color:rgba(0,0,0,.38);color:var(--mdc-text-button-disabled-label-text-color,rgba(0,0,0,.38))}.mdc-button .mdc-button__icon{font-size:1.125rem;font-size:var(--mdc-text-button-with-icon-icon-size,1.125rem);width:1.125rem;width:var(--mdc-text-button-with-icon-icon-size,1.125rem);height:1.125rem;height:var(--mdc-text-button-with-icon-icon-size,1.125rem)}.mdc-button .mdc-button__ripple:after,.mdc-button .mdc-button__ripple:before{background-color:#6200ee;background-color:var(--mdc-text-button-hover-state-layer-color,var(--mdc-theme-primary,#6200ee))}.mdc-button.mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-button:hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-text-button-hover-state-layer-opacity,.04)}.mdc-button.mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-button:not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-text-button-focus-state-layer-opacity,.12)}.mdc-button:not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-button:not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-text-button-pressed-state-layer-opacity,.12)}.mdc-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-text-button-pressed-state-layer-opacity,0.12)}.mdc-button .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-text-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button--unelevated{font-family:Roboto,sans-serif;font-family:var(--mdc-filled-button-label-text-font,var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif)));font-size:.875rem;font-size:var(--mdc-filled-button-label-text-size,var(--mdc-typography-button-font-size,.875rem));letter-spacing:.0892857143em;letter-spacing:var(--mdc-filled-button-label-text-tracking,var(--mdc-typography-button-letter-spacing,.0892857143em));font-weight:500;font-weight:var(--mdc-filled-button-label-text-weight,var(--mdc-typography-button-font-weight,500));text-transform:uppercase;text-transform:var(--mdc-filled-button-label-text-transform,var(--mdc-typography-button-text-transform,uppercase));height:36px;height:var(--mdc-filled-button-container-height,36px);border-radius:4px;border-radius:var(--mdc-filled-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-filled-button-container-color,var(--mdc-theme-primary,#6200ee))}.mdc-button--unelevated:disabled{background-color:rgba(0,0,0,.12);background-color:var(--mdc-filled-button-disabled-container-color,rgba(0,0,0,.12))}.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-filled-button-label-text-color,var(--mdc-theme-on-primary,#fff))}.mdc-button--unelevated:disabled{color:rgba(0,0,0,.38);color:var(--mdc-filled-button-disabled-label-text-color,rgba(0,0,0,.38))}.mdc-button--unelevated .mdc-button__icon{font-size:1.125rem;font-size:var(--mdc-filled-button-with-icon-icon-size,1.125rem);width:1.125rem;width:var(--mdc-filled-button-with-icon-icon-size,1.125rem);height:1.125rem;height:var(--mdc-filled-button-with-icon-icon-size,1.125rem)}.mdc-button--unelevated .mdc-button__ripple:after,.mdc-button--unelevated .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-filled-button-hover-state-layer-color,var(--mdc-theme-on-primary,#fff))}.mdc-button--unelevated.mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-button--unelevated:hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-filled-button-hover-state-layer-opacity,.08)}.mdc-button--unelevated.mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-button--unelevated:not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-filled-button-focus-state-layer-opacity,.24)}.mdc-button--unelevated:not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-button--unelevated:not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-filled-button-pressed-state-layer-opacity,.24)}.mdc-button--unelevated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-filled-button-pressed-state-layer-opacity,0.24)}.mdc-button--unelevated .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-filled-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button--raised{font-family:Roboto,sans-serif;font-family:var(--mdc-protected-button-label-text-font,var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif)));font-size:.875rem;font-size:var(--mdc-protected-button-label-text-size,var(--mdc-typography-button-font-size,.875rem));letter-spacing:.0892857143em;letter-spacing:var(--mdc-protected-button-label-text-tracking,var(--mdc-typography-button-letter-spacing,.0892857143em));font-weight:500;font-weight:var(--mdc-protected-button-label-text-weight,var(--mdc-typography-button-font-weight,500));text-transform:uppercase;text-transform:var(--mdc-protected-button-label-text-transform,var(--mdc-typography-button-text-transform,uppercase));height:36px;height:var(--mdc-protected-button-container-height,36px);border-radius:4px;border-radius:var(--mdc-protected-button-container-shape,var(--mdc-shape-small,4px));box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:var(--mdc-protected-button-container-elevation,var(--mdc-elevation-box-shadow-for-gss));--mdc-elevation-box-shadow-for-gss:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12)}.mdc-button--raised:not(:disabled){background-color:#6200ee;background-color:var(--mdc-protected-button-container-color,var(--mdc-theme-primary,#6200ee))}.mdc-button--raised:disabled{background-color:rgba(0,0,0,.12);background-color:var(--mdc-protected-button-disabled-container-color,rgba(0,0,0,.12))}.mdc-button--raised:not(:disabled){color:#fff;color:var(--mdc-protected-button-label-text-color,var(--mdc-theme-on-primary,#fff))}.mdc-button--raised:disabled{color:rgba(0,0,0,.38);color:var(--mdc-protected-button-disabled-label-text-color,rgba(0,0,0,.38))}.mdc-button--raised .mdc-button__icon{font-size:1.125rem;font-size:var(--mdc-protected-button-with-icon-icon-size,1.125rem);width:1.125rem;width:var(--mdc-protected-button-with-icon-icon-size,1.125rem);height:1.125rem;height:var(--mdc-protected-button-with-icon-icon-size,1.125rem)}.mdc-button--raised .mdc-button__ripple:after,.mdc-button--raised .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-protected-button-hover-state-layer-color,var(--mdc-theme-on-primary,#fff))}.mdc-button--raised.mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-button--raised:hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-protected-button-hover-state-layer-opacity,.08)}.mdc-button--raised.mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-button--raised:not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-protected-button-focus-state-layer-opacity,.24)}.mdc-button--raised:not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-button--raised:not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-protected-button-pressed-state-layer-opacity,.24)}.mdc-button--raised.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-protected-button-pressed-state-layer-opacity,0.24)}.mdc-button--raised .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-protected-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button--raised.mdc-ripple-upgraded--background-focused,.mdc-button--raised:not(.mdc-ripple-upgraded):focus{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:var(--mdc-protected-button-focus-container-elevation,var(--mdc-elevation-box-shadow-for-gss));--mdc-elevation-box-shadow-for-gss:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:var(--mdc-protected-button-hover-container-elevation,var(--mdc-elevation-box-shadow-for-gss));--mdc-elevation-box-shadow-for-gss:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:not(:disabled):active{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:var(--mdc-protected-button-pressed-container-elevation,var(--mdc-elevation-box-shadow-for-gss));--mdc-elevation-box-shadow-for-gss:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);box-shadow:var(--mdc-protected-button-disabled-container-elevation,var(--mdc-elevation-box-shadow-for-gss));--mdc-elevation-box-shadow-for-gss:0px 0px 0px 0px rgba(0,0,0,.2),0px 0px 0px 0px rgba(0,0,0,.14),0px 0px 0px 0px rgba(0,0,0,.12)}.mdc-button--outlined{font-family:Roboto,sans-serif;font-family:var(--mdc-outlined-button-label-text-font,var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif)));font-size:.875rem;font-size:var(--mdc-outlined-button-label-text-size,var(--mdc-typography-button-font-size,.875rem));letter-spacing:.0892857143em;letter-spacing:var(--mdc-outlined-button-label-text-tracking,var(--mdc-typography-button-letter-spacing,.0892857143em));font-weight:500;font-weight:var(--mdc-outlined-button-label-text-weight,var(--mdc-typography-button-font-weight,500));text-transform:uppercase;text-transform:var(--mdc-outlined-button-label-text-transform,var(--mdc-typography-button-text-transform,uppercase));height:36px;height:var(--mdc-outlined-button-container-height,36px);border-radius:4px;border-radius:var(--mdc-outlined-button-container-shape,var(--mdc-shape-small,4px));padding:0 15px 0 15px;border-width:1px;border-width:var(--mdc-outlined-button-outline-width,1px)}.mdc-button--outlined:not(:disabled){color:#6200ee;color:var(--mdc-outlined-button-label-text-color,var(--mdc-theme-primary,#6200ee))}.mdc-button--outlined:disabled{color:rgba(0,0,0,.38);color:var(--mdc-outlined-button-disabled-label-text-color,rgba(0,0,0,.38))}.mdc-button--outlined .mdc-button__icon{font-size:1.125rem;font-size:var(--mdc-outlined-button-with-icon-icon-size,1.125rem);width:1.125rem;width:var(--mdc-outlined-button-with-icon-icon-size,1.125rem);height:1.125rem;height:var(--mdc-outlined-button-with-icon-icon-size,1.125rem)}.mdc-button--outlined .mdc-button__ripple:after,.mdc-button--outlined .mdc-button__ripple:before{background-color:#6200ee;background-color:var(--mdc-outlined-button-hover-state-layer-color,var(--mdc-theme-primary,#6200ee))}.mdc-button--outlined.mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-button--outlined:hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-outlined-button-hover-state-layer-opacity,.04)}.mdc-button--outlined.mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-button--outlined:not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-outlined-button-focus-state-layer-opacity,.12)}.mdc-button--outlined:not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-button--outlined:not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-outlined-button-pressed-state-layer-opacity,.12)}.mdc-button--outlined.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-outlined-button-pressed-state-layer-opacity,0.12)}.mdc-button--outlined .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-outlined-button-container-shape,var(--mdc-shape-small,4px))}.mdc-button--outlined:not(:disabled){border-color:rgba(0,0,0,.12);border-color:var(--mdc-outlined-button-outline-color,rgba(0,0,0,.12))}.mdc-button--outlined:disabled{border-color:rgba(0,0,0,.12);border-color:var(--mdc-outlined-button-disabled-outline-color,rgba(0,0,0,.12))}.mdc-button--outlined.mdc-button--icon-trailing{padding:0 11px 0 15px}.mdc-button--outlined.mdc-button--icon-leading{padding:0 15px 0 11px}.mdc-button--outlined .mdc-button__ripple{top:-1px;top:calc(var(--mdc-outlined-button-outline-width, 1px)*-1);left:-1px;left:calc(var(--mdc-outlined-button-outline-width, 1px)*-1);border-width:1px;border-width:var(--mdc-outlined-button-outline-width,1px)}.mdc-button--outlined .mdc-button__touch{left:-1px;left:calc(var(--mdc-outlined-button-outline-width, 1px)*-1);width:calc(100% + 2px);width:calc(100% + var(--mdc-outlined-button-outline-width, 1px)*2)}.mdc-button--outlined .mdc-button__icon,.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon{margin-left:-4px;margin-right:8px}.mdc-button--outlined .mdc-button__icon[dir=rtl],.mdc-button--outlined .mdc-button__label+.mdc-button__icon,.mdc-button--raised .mdc-button__icon[dir=rtl],.mdc-button--raised .mdc-button__label+.mdc-button__icon,.mdc-button--unelevated .mdc-button__icon[dir=rtl],.mdc-button--unelevated .mdc-button__label+.mdc-button__icon,[dir=rtl] .mdc-button--outlined .mdc-button__icon,[dir=rtl] .mdc-button--raised .mdc-button__icon,[dir=rtl] .mdc-button--unelevated .mdc-button__icon{margin-left:8px;margin-right:-4px}.mdc-button--outlined .mdc-button__label+.mdc-button__icon[dir=rtl],.mdc-button--raised .mdc-button__label+.mdc-button__icon[dir=rtl],.mdc-button--unelevated .mdc-button__label+.mdc-button__icon[dir=rtl],[dir=rtl] .mdc-button--outlined .mdc-button__label+.mdc-button__icon,[dir=rtl] .mdc-button--raised .mdc-button__label+.mdc-button__icon,[dir=rtl] .mdc-button--unelevated .mdc-button__label+.mdc-button__icon{margin-left:-4px;margin-right:8px}.mdc-touch-target-wrapper>div{display:inline-block}.mdc-button--hover{border-radius:var(--mdc-shape-small,4px);border-style:solid;border-width:1px;padding:0 15px}.mdc-button--hover:disabled,.mdc-button--hover:not(:disabled){background-color:transparent}.mdc-button--hover:disabled{border-color:rgba(0,0,0,.12)}.mdc-button--outlined:not(:disabled){border-color:var(--mdc-outlined-button-outline-color)}.mdc-button--secondary:not(:disabled){background-color:#fff;color:#000;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mdc-theme-name--red.mdc-button:not(:disabled):not(:disabled){color:#f44336}.mdc-theme-name--red.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--red.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--red.mdc-button--raised:not(:disabled):not(:disabled){color:#f44336;background-color:#f44336;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--red.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--red.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--red.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--red.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--red.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--red.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#f44336;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--red.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--red.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--red.mdc-button--outlined:not(:disabled):not(:disabled){color:#f44336}.mdc-theme-name--red.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--red.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--red.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink.mdc-button:not(:disabled):not(:disabled){color:#e91e63}.mdc-theme-name--pink.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--pink.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink.mdc-button--raised:not(:disabled):not(:disabled){color:#e91e63;background-color:#e91e63;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--pink.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--pink.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--pink.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--pink.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--pink.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--pink.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#e91e63;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--pink.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled):not(:disabled){color:#e91e63}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--pink.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--pink.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple.mdc-button:not(:disabled):not(:disabled){color:#9c27b0}.mdc-theme-name--purple.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--purple.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple.mdc-button--raised:not(:disabled):not(:disabled){color:#9c27b0;background-color:#9c27b0;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--purple.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--purple.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--purple.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--purple.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--purple.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#9c27b0;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--purple.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled):not(:disabled){color:#9c27b0}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--purple.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple.mdc-button:not(:disabled):not(:disabled){color:#673ab7}.mdc-theme-name--deep-purple.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-purple.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled):not(:disabled){color:#673ab7;background-color:#673ab7;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--deep-purple.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#673ab7;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--deep-purple.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled):not(:disabled){color:#673ab7}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo.mdc-button:not(:disabled):not(:disabled){color:#3f51b5}.mdc-theme-name--indigo.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--indigo.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled):not(:disabled){color:#3f51b5;background-color:#3f51b5;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--indigo.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--indigo.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#3f51b5;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--indigo.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled):not(:disabled){color:#3f51b5}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue.mdc-button:not(:disabled):not(:disabled){color:#2196f3}.mdc-theme-name--blue.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue.mdc-button--raised:not(:disabled):not(:disabled){color:#2196f3;background-color:#2196f3;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--blue.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--blue.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--blue.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--blue.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#2196f3;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--blue.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled):not(:disabled){color:#2196f3}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--light-blue.mdc-button:not(:disabled):not(:disabled){color:#03a9f4}.mdc-theme-name--light-blue.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-blue.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled):not(:disabled){color:#03a9f4;background-color:#03a9f4;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--light-blue.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#03a9f4;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--light-blue.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled):not(:disabled){color:#03a9f4}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan.mdc-button:not(:disabled):not(:disabled){color:#00bcd4}.mdc-theme-name--cyan.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--cyan.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled):not(:disabled){color:#00bcd4;background-color:#00bcd4;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--cyan.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--cyan.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#00bcd4;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--cyan.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled):not(:disabled){color:#00bcd4}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--teal.mdc-button:not(:disabled):not(:disabled){color:#009688}.mdc-theme-name--teal.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--teal.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--teal.mdc-button--raised:not(:disabled):not(:disabled){color:#009688;background-color:#009688;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--teal.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--teal.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--teal.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--teal.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--teal.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--teal.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#009688;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--teal.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled):not(:disabled){color:#009688}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--teal.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--teal.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--green.mdc-button:not(:disabled):not(:disabled){color:#4caf50}.mdc-theme-name--green.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--green.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--green.mdc-button--raised:not(:disabled):not(:disabled){color:#4caf50;background-color:#4caf50;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--green.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--green.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--green.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--green.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--green.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#4caf50;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--green.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--green.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--green.mdc-button--outlined:not(:disabled):not(:disabled){color:#4caf50}.mdc-theme-name--green.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--green.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green.mdc-button:not(:disabled):not(:disabled){color:#8bc34a}.mdc-theme-name--light-green.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-green.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled):not(:disabled){color:#8bc34a;background-color:#8bc34a;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-green.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--light-green.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#8bc34a;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--light-green.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled):not(:disabled){color:#8bc34a}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime.mdc-button:not(:disabled):not(:disabled){color:#cddc39}.mdc-theme-name--lime.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--lime.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime.mdc-button--raised:not(:disabled):not(:disabled){color:#cddc39;background-color:#cddc39;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--lime.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--lime.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--lime.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--lime.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--lime.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--lime.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#cddc39;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--lime.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled):not(:disabled){color:#cddc39}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--lime.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--lime.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow.mdc-button:not(:disabled):not(:disabled){color:#ffeb3b}.mdc-theme-name--yellow.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--yellow.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled):not(:disabled){color:#ffeb3b;background-color:#ffeb3b;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--yellow.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--yellow.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#ffeb3b;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--yellow.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled):not(:disabled){color:#ffeb3b}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber.mdc-button:not(:disabled):not(:disabled){color:#ffc107}.mdc-theme-name--amber.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--amber.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber.mdc-button--raised:not(:disabled):not(:disabled){color:#ffc107;background-color:#ffc107;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--amber.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--amber.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--amber.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--amber.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--amber.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--amber.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#ffc107;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--amber.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled):not(:disabled){color:#ffc107}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--amber.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--amber.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange.mdc-button:not(:disabled):not(:disabled){color:#ff9800}.mdc-theme-name--orange.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--orange.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange.mdc-button--raised:not(:disabled):not(:disabled){color:#ff9800;background-color:#ff9800;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--orange.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--orange.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--orange.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--orange.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--orange.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#ff9800;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--orange.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled):not(:disabled){color:#ff9800}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--orange.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--deep-orange.mdc-button:not(:disabled):not(:disabled){color:#ff5722}.mdc-theme-name--deep-orange.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-orange.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled):not(:disabled){color:#ff5722;background-color:#ff5722;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--deep-orange.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#ff5722;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--deep-orange.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled):not(:disabled){color:#ff5722}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown.mdc-button:not(:disabled):not(:disabled){color:#795548}.mdc-theme-name--brown.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--brown.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown.mdc-button--raised:not(:disabled):not(:disabled){color:#795548;background-color:#795548;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--brown.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--brown.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--brown.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--brown.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--brown.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--brown.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#795548;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--brown.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled):not(:disabled){color:#795548}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--brown.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--brown.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--grey.mdc-button:not(:disabled):not(:disabled){color:#9e9e9e}.mdc-theme-name--grey.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--grey.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--grey.mdc-button--raised:not(:disabled):not(:disabled){color:#9e9e9e;background-color:#9e9e9e;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--grey.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--grey.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--grey.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--grey.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--grey.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#9e9e9e;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87)))}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--grey.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled):not(:disabled){color:#9e9e9e}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--grey.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--blue-grey.mdc-button:not(:disabled):not(:disabled){color:#607d8b}.mdc-theme-name--blue-grey.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue-grey.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled):not(:disabled){color:#607d8b;background-color:#607d8b;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--blue-grey.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#607d8b;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--blue-grey.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled):not(:disabled){color:#607d8b}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black.mdc-button:not(:disabled):not(:disabled){color:#313131}.mdc-theme-name--black.mdc-button:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--black.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black.mdc-button--raised:not(:disabled):not(:disabled){color:#313131;background-color:#313131;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--black.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--black.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--black.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--black.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--black.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--black.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#313131;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--black.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--black.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--black.mdc-button--outlined:not(:disabled):not(:disabled){color:#313131}.mdc-theme-name--black.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.mdc-theme-name--black.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.mdc-theme-name--black.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.foxy-warn .mdc-button.mdc-button:not(:disabled):not(:disabled){color:#d84315}.foxy-warn .mdc-button.mdc-button:not(:disabled) .mdc-button__ripple:after,.foxy-warn .mdc-button.mdc-button:not(:disabled) .mdc-button__ripple:before{background-color:#d84315;background-color:var(--mdc-ripple-color,#d84315)}.foxy-warn .mdc-button.mdc-button:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.foxy-warn .mdc-button.mdc-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.foxy-warn .mdc-button.mdc-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.foxy-warn .mdc-button.mdc-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.foxy-warn .mdc-button.mdc-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled):not(:disabled){color:#d84315;background-color:#d84315;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled) .mdc-button__ripple:after,.foxy-warn .mdc-button.mdc-button--raised:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--raised:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.foxy-warn .mdc-button.mdc-button--raised:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled):not(:disabled){background-color:#d84315;color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff)}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:after,.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled) .mdc-button__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-text-primary-on-dark,#fff))}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled):hover .mdc-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.foxy-warn .mdc-button.mdc-button--unelevated:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled):not(:disabled){color:#d84315}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled) .mdc-button__ripple:after,.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled) .mdc-button__ripple:before{background-color:#d84315;background-color:var(--mdc-ripple-color,#d84315)}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled).mdc-ripple-surface--hover .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled):hover .mdc-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-button__ripple:before,.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded) .mdc-button__ripple:after{transition:opacity .15s linear}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.foxy-warn .mdc-button.mdc-button--outlined:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.md-button.md-fab .md-icon,.md-button.md-icon-button .md-icon{color:inherit;display:block}.mdc-button.foxy-indicator-button .indicator{background:#ffc107;border-radius:100%;height:10px;position:absolute;right:0;top:6px;width:10px}.mdc-button.foxy-progress .mdc-circular-progress .mdc-circular-progress__circle-clipper{width:100%}.mdc-theme-name--accent.mdc-button:not(:disabled).md-raised{background-color:#d84315;color:#fff}.mdc-card{border-radius:4px;border-radius:var(--mdc-shape-medium,4px);background-color:#fff;background-color:var(--mdc-theme-surface,#fff);position:relative;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);display:flex;flex-direction:column;box-sizing:border-box}.mdc-card .mdc-elevation-overlay,.mdc-card:after{width:100%;height:100%;top:0;left:0}.mdc-card:after{border-radius:4px;border-radius:var(--mdc-shape-medium,4px);position:absolute;box-sizing:border-box;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-card--outlined{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);border-width:1px;border-style:solid;border-color:#e0e0e0}.mdc-card--outlined:after{border:none}.mdc-card__content{border-radius:inherit;height:100%}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:50%;background-size:cover}.mdc-card__media:before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__media--square:before{margin-top:100%}.mdc-card__media--16-9:before{margin-top:56.25%}.mdc-card__media-content{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box}.mdc-card__primary-action{display:flex;flex-direction:column;box-sizing:border-box;position:relative;outline:none;color:inherit;text-decoration:none;cursor:pointer;overflow:hidden}.mdc-card__primary-action:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__primary-action:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mdc-card__actions--full-bleed{padding:0}.mdc-card__action-buttons,.mdc-card__action-icons{display:flex;flex-direction:row;align-items:center;box-sizing:border-box}.mdc-card__action-icons{color:rgba(0,0,0,.6);flex-grow:1;justify-content:flex-end}.mdc-card__action-buttons+.mdc-card__action-icons{margin-left:16px;margin-right:0}.mdc-card__action-buttons+.mdc-card__action-icons[dir=rtl],[dir=rtl] .mdc-card__action-buttons+.mdc-card__action-icons{margin-left:0;margin-right:16px}.mdc-card__action{display:inline-flex;flex-direction:row;align-items:center;box-sizing:border-box;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mdc-card__action:focus{outline:none}.mdc-card__action--button{margin-left:0;margin-right:8px;padding:0 8px}.mdc-card__action--button[dir=rtl],[dir=rtl] .mdc-card__action--button{margin-left:8px;margin-right:0}.mdc-card__action--button:last-child,.mdc-card__action--button:last-child[dir=rtl],[dir=rtl] .mdc-card__action--button:last-child{margin-left:0;margin-right:0}.mdc-card__actions--full-bleed .mdc-card__action--button{justify-content:space-between;width:100%;height:auto;max-height:none;margin:0;padding:8px 16px;text-align:left}.mdc-card__actions--full-bleed .mdc-card__action--button[dir=rtl],[dir=rtl] .mdc-card__actions--full-bleed .mdc-card__action--button{text-align:right}.mdc-card__action--icon{margin:-6px 0;padding:12px}.mdc-card__action--icon:not(:disabled){color:rgba(0,0,0,.6)}.mdc-card__primary-action{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-card__primary-action .mdc-card__ripple:after,.mdc-card__primary-action .mdc-card__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-card__primary-action .mdc-card__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-card__primary-action .mdc-card__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-card__primary-action.mdc-ripple-upgraded--unbounded .mdc-card__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-activation .mdc-card__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-deactivation .mdc-card__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-card__primary-action .mdc-card__ripple:after,.mdc-card__primary-action .mdc-card__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-card__primary-action .mdc-card__ripple:after,.mdc-card__primary-action .mdc-card__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}.mdc-card__primary-action.mdc-ripple-surface--hover .mdc-card__ripple:before,.mdc-card__primary-action:hover .mdc-card__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-card__primary-action.mdc-ripple-upgraded--background-focused .mdc-card__ripple:before,.mdc-card__primary-action:not(.mdc-ripple-upgraded):focus .mdc-card__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-card__primary-action:not(.mdc-ripple-upgraded) .mdc-card__ripple:after{transition:opacity .15s linear}.mdc-card__primary-action:not(.mdc-ripple-upgraded):active .mdc-card__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-card__primary-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-card__primary-action .mdc-card__ripple{box-sizing:content-box;height:100%;overflow:hidden;left:0;pointer-events:none;position:absolute;top:0;width:100%}.mdc-card__primary-action.mdc-ripple-upgraded--background-focused:after,.mdc-card__primary-action:not(.mdc-ripple-upgraded):focus:after{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:5px double transparent;border-radius:inherit;content:"";pointer-events:none}.md-card.selectable.mdc-theme-name--default{border-left:.5rem solid #558b2f}.md-card.selectable.mdc-theme-name--red{border-left:.5rem solid #f44336}.md-card.selectable.mdc-theme-name--pink{border-left:.5rem solid #e91e63}.md-card.selectable.mdc-theme-name--purple{border-left:.5rem solid #9c27b0}.md-card.selectable.mdc-theme-name--deep-purple{border-left:.5rem solid #673ab7}.md-card.selectable.mdc-theme-name--indigo{border-left:.5rem solid #3f51b5}.md-card.selectable.mdc-theme-name--blue{border-left:.5rem solid #2196f3}.md-card.selectable.mdc-theme-name--light-blue{border-left:.5rem solid #03a9f4}.md-card.selectable.mdc-theme-name--cyan{border-left:.5rem solid #00bcd4}.md-card.selectable.mdc-theme-name--teal{border-left:.5rem solid #009688}.md-card.selectable.mdc-theme-name--green{border-left:.5rem solid #4caf50}.md-card.selectable.mdc-theme-name--light-green{border-left:.5rem solid #8bc34a}.md-card.selectable.mdc-theme-name--lime{border-left:.5rem solid #cddc39}.md-card.selectable.mdc-theme-name--yellow{border-left:.5rem solid #ffeb3b}.md-card.selectable.mdc-theme-name--amber{border-left:.5rem solid #ffc107}.md-card.selectable.mdc-theme-name--orange{border-left:.5rem solid #ff9800}.md-card.selectable.mdc-theme-name--deep-orange{border-left:.5rem solid #ff5722}.md-card.selectable.mdc-theme-name--brown{border-left:.5rem solid #795548}.md-card.selectable.mdc-theme-name--grey{border-left:.5rem solid #9e9e9e}.md-card.selectable.mdc-theme-name--blue-grey{border-left:.5rem solid #607d8b}.md-card.selectable.mdc-theme-name--black{border-left:.5rem solid #313131}.mdc-card.md-with-hover{cursor:pointer;transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .4s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1);will-change:background-color,box-shadow,color}.mdc-card.md-with-hover:focus,.mdc-card.md-with-hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mdc-card .md-title{font-size:1.5rem;font-weight:400;letter-spacing:0;line-height:1.333;margin:0}.mdc-card .md-subhead{font-weight:400;line-height:1.429;margin:0;opacity:.6}.md-card-actions.split-actions{justify-content:space-between}.md-card-header{padding:1rem}.md-card .md-card-header.md-card-header-flex{display:flex;justify-content:space-between;align-items:center}.md-card .md-card-header .md-card-header-text{flex:1}.md-card .md-card-header:first-child>.md-card-header-text>.md-title:first-child,.md-card .md-card-header:first-child>.md-title:first-child{margin-top:8px}.md-card-content{padding:1rem}.md-card .md-card-header+.md-card-content{padding-top:0}.foxy-card-expand .mdc-card__content{display:none}.foxy-card-expand.md-active .mdc-card__content{display:block}.md-card .md-card-area,.md-card>.md-card-area:not(:last-child){position:relative}.md-button a{width:100%}.mdc-card .mdc-card__actions{justify-content:end}.mdc-card .mdc-card__actions .md-button+.md-button{margin-left:4px}.mdc-form-field .mdc-checkbox.mdc-theme-name--red{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#f44336;border-color:#f44336}.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--red.mdc-checkbox__ripple:before{background-color:#f44336}.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--red .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--pink{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#e91e63;border-color:#e91e63}.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--pink.mdc-checkbox__ripple:before{background-color:#e91e63}.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--pink .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--purple{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#9c27b0;border-color:#9c27b0}.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--purple.mdc-checkbox__ripple:before{background-color:#9c27b0}.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--purple .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#673ab7;border-color:#673ab7}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple.mdc-checkbox__ripple:before{background-color:#673ab7}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-purple .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#3f51b5;border-color:#3f51b5}.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo.mdc-checkbox__ripple:before{background-color:#3f51b5}.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--indigo .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#2196f3;border-color:#2196f3}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue.mdc-checkbox__ripple:before{background-color:#2196f3}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#03a9f4;border-color:#03a9f4}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue.mdc-checkbox__ripple:before{background-color:#03a9f4}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-blue .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#00bcd4;border-color:#00bcd4}.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan.mdc-checkbox__ripple:before{background-color:#00bcd4}.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--cyan .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--teal{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#009688;border-color:#009688}.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--teal.mdc-checkbox__ripple:before{background-color:#009688}.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--teal .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--green{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#4caf50;border-color:#4caf50}.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--green.mdc-checkbox__ripple:before{background-color:#4caf50}.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--green .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#8bc34a;border-color:#8bc34a}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green.mdc-checkbox__ripple:before{background-color:#8bc34a}.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--light-green .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--lime{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#cddc39;border-color:#cddc39}.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--lime.mdc-checkbox__ripple:before{background-color:#cddc39}.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--lime .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#ffeb3b;border-color:#ffeb3b}.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow.mdc-checkbox__ripple:before{background-color:#ffeb3b}.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--yellow .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--amber{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#ffc107;border-color:#ffc107}.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--amber.mdc-checkbox__ripple:before{background-color:#ffc107}.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--amber .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--orange{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#ff9800;border-color:#ff9800}.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--orange.mdc-checkbox__ripple:before{background-color:#ff9800}.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--orange .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#ff5722;border-color:#ff5722}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange.mdc-checkbox__ripple:before{background-color:#ff5722}.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--deep-orange .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--brown{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#795548;border-color:#795548}.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--brown.mdc-checkbox__ripple:before{background-color:#795548}.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--brown .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--grey{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#9e9e9e;border-color:#9e9e9e}.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--grey.mdc-checkbox__ripple:before{background-color:#9e9e9e}.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--grey .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#607d8b;border-color:#607d8b}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey.mdc-checkbox__ripple:before{background-color:#607d8b}.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--blue-grey .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-form-field .mdc-checkbox.mdc-theme-name--black{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#313131;border-color:#313131}.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox__ripple:after,.mdc-form-field .mdc-checkbox.mdc-theme-name--black.mdc-checkbox__ripple:before{background-color:#313131}.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-form-field .mdc-checkbox.mdc-theme-name--black .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.mdc-checkbox.mdc-theme-name--reverse{--mdc-checkbox-checked-color:$color;--mdc-checkbox-ink-color:#fff}.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:#d84315;border-color:#d84315}.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox__ripple:after,.mdc-checkbox.mdc-theme-name--reverse.mdc-checkbox__ripple:before{background-color:#d84315}.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox.mdc-theme-name--reverse .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38)}.hidden-foxy-checkbox-label{display:none}.mdc-checkbox{padding:11px;padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px)/2);margin:0;margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px)/2)}.mdc-checkbox .mdc-checkbox__ripple:after,.mdc-checkbox .mdc-checkbox__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}.mdc-checkbox.mdc-ripple-surface--hover .mdc-checkbox__ripple:before,.mdc-checkbox:hover .mdc-checkbox__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple:before,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-checkbox:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple:after{transition:opacity .15s linear}.mdc-checkbox:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple:after,.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple:before{background-color:#018786;background-color:var(--mdc-ripple-color,var(--mdc-theme-secondary,#018786))}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple:before,.mdc-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple:before,.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple:after{transition:opacity .15s linear}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple:after,.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple:before{background-color:#018786;background-color:var(--mdc-ripple-color,var(--mdc-theme-secondary,#018786))}.mdc-checkbox .mdc-checkbox__background{top:11px;top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px)/2);left:11px;left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px)/2)}.mdc-checkbox .mdc-checkbox__native-control{top:0;top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px))/2);right:0;right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px))/2);left:0;left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px))/2);width:40px;width:var(--mdc-checkbox-touch-target-size,40px);height:40px;height:var(--mdc-checkbox-touch-target-size,40px)}.mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0,0,0,.54);border-color:var(--mdc-checkbox-unchecked-color,rgba(0,0,0,.54));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#018786;border-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786))}@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:rgba(0,0,0,.54);border-color:var(--mdc-checkbox-unchecked-color,rgba(0,0,0,.54));background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786))}}@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:rgba(0,0,0,.54);border-color:var(--mdc-checkbox-unchecked-color,rgba(0,0,0,.54));background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786))}}@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786))}to{border-color:rgba(0,0,0,.54);border-color:var(--mdc-checkbox-unchecked-color,rgba(0,0,0,.54));background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color,var(--mdc-theme-secondary,#018786))}to{border-color:rgba(0,0,0,.54);border-color:var(--mdc-checkbox-unchecked-color,rgba(0,0,0,.54));background-color:transparent}}.mdc-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786;animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786}.mdc-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786;animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786}.mdc-checkbox .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0,0,0,.38);border-color:var(--mdc-checkbox-disabled-color,rgba(0,0,0,.38));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0,0,0,.38);background-color:var(--mdc-checkbox-disabled-color,rgba(0,0,0,.38))}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color,#fff)}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color,#fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color,#fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color,#fff)}@-webkit-keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}to{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}to{stroke-dashoffset:0}}@-webkit-keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0,0,0,1);animation-timing-function:cubic-bezier(0,0,0,1)}to{transform:scaleX(1)}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0,0,0,1);animation-timing-function:cubic-bezier(0,0,0,1)}to{transform:scaleX(1)}}@-webkit-keyframes mdc-checkbox-checked-unchecked-checkmark-path{0%{-webkit-animation-timing-function:cubic-bezier(.4,0,1,1);animation-timing-function:cubic-bezier(.4,0,1,1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{0%{-webkit-animation-timing-function:cubic-bezier(.4,0,1,1);animation-timing-function:cubic-bezier(.4,0,1,1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-checkmark{0%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{0%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-checkmark{0%{-webkit-animation-timing-function:cubic-bezier(.14,0,0,1);animation-timing-function:cubic-bezier(.14,0,0,1);transform:rotate(45deg);opacity:0}to{transform:rotate(1turn);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{0%{-webkit-animation-timing-function:cubic-bezier(.14,0,0,1);animation-timing-function:cubic-bezier(.14,0,0,1);transform:rotate(45deg);opacity:0}to{transform:rotate(1turn);opacity:1}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-mixedmark{0%{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{0%{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-mixedmark{0%{-webkit-animation-timing-function:cubic-bezier(.14,0,0,1);animation-timing-function:cubic-bezier(.14,0,0,1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{0%{-webkit-animation-timing-function:cubic-bezier(.14,0,0,1);animation-timing-function:cubic-bezier(.14,0,0,1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,to{transform:scaleX(0);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,to{transform:scaleX(0);opacity:0}}.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:GrayText;border-color:var(--mdc-checkbox-disabled-color,GrayText);background-color:transparent}.mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background{border-color:GrayText;background-color:transparent;background-color:var(--mdc-checkbox-disabled-color,transparent)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:GrayText;color:var(--mdc-checkbox-ink-color,GrayText)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:GrayText;border-color:var(--mdc-checkbox-ink-color,GrayText)}.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:transparent;pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(.4,0,.6,1) 0ms,border-color 90ms cubic-bezier(.4,0,.6,1) 0ms}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity .18s cubic-bezier(.4,0,.6,1) 0ms}.mdc-checkbox--upgraded .mdc-checkbox__checkmark{opacity:1}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms;stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(.4,0,.6,1) 0ms,transform 90ms cubic-bezier(.4,0,.6,1) 0ms}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background{-webkit-animation-duration:.18s;animation-duration:.18s;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-unchecked-checked-checkmark-path .18s linear 0s;animation:mdc-checkbox-unchecked-checked-checkmark-path .18s linear 0s;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-indeterminate-checked-checkmark .5s linear 0s;animation:mdc-checkbox-indeterminate-checked-checkmark .5s linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-checked-mixedmark .5s linear 0s;animation:mdc-checkbox-indeterminate-checked-mixedmark .5s linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-unchecked-mixedmark .3s linear 0s;animation:mdc-checkbox-indeterminate-unchecked-mixedmark .3s linear 0s;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0,0,.2,1) 0ms,background-color 90ms cubic-bezier(0,0,.2,1) 0ms}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit}.mdc-checkbox__native-control:disabled{cursor:default;pointer-events:none}.mdc-checkbox--touch{margin:4px;margin:calc((var(--mdc-checkbox-state-layer-size, 48px) - var(--mdc-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--touch .mdc-checkbox__native-control{top:-4px;top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px))/2);right:-4px;right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px))/2);left:-4px;left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px))/2);width:48px;width:var(--mdc-checkbox-state-layer-size,48px);height:48px;height:var(--mdc-checkbox-state-layer-size,48px)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity .18s cubic-bezier(0,0,.2,1) 0ms,transform .18s cubic-bezier(0,0,.2,1) 0ms;opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(.4,0,.6,1) 0ms,transform 90ms cubic-bezier(.4,0,.6,1) 0ms}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__mixedmark{transition:none}.mdc-checkbox{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-checkbox .mdc-checkbox__ripple:after,.mdc-checkbox .mdc-checkbox__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-checkbox .mdc-checkbox__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-checkbox .mdc-checkbox__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-checkbox.mdc-ripple-upgraded--unbounded .mdc-checkbox__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-checkbox.mdc-ripple-upgraded--foreground-activation .mdc-checkbox__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-checkbox.mdc-ripple-upgraded--foreground-deactivation .mdc-checkbox__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-checkbox .mdc-checkbox__ripple:after,.mdc-checkbox .mdc-checkbox__ripple:before{top:0;left:0;width:100%;height:100%}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple:after,.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple:before{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-checkbox{z-index:0}.mdc-checkbox .mdc-checkbox__ripple:after,.mdc-checkbox .mdc-checkbox__ripple:before{z-index:-1;z-index:var(--mdc-ripple-z-index,-1)}.mdc-checkbox__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}@-webkit-keyframes mdc-checkbox-fade-in-background-red-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#f44336;background-color:#f44336}}@keyframes mdc-checkbox-fade-in-background-red-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#f44336;background-color:#f44336}}@-webkit-keyframes mdc-checkbox-fade-out-background-red-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#f44336;background-color:#f44336}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-red-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#f44336;background-color:#f44336}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--red .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--red .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-red-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-red-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--red .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--red .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-red-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-red-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--red .mdc-checkbox:after,.mdc-theme-name--red .mdc-checkbox:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--red .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--red .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--red .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--red .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--red .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--red .mdc-checkbox:after,.mdc-theme-name--red .mdc-checkbox:before,.mdc-theme-name--red .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#f44336}.mdc-theme-name--red .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--red .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#f44336;background-color:#f44336}@-webkit-keyframes mdc-checkbox-fade-in-background-pink-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#e91e63;background-color:#e91e63}}@keyframes mdc-checkbox-fade-in-background-pink-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#e91e63;background-color:#e91e63}}@-webkit-keyframes mdc-checkbox-fade-out-background-pink-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#e91e63;background-color:#e91e63}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-pink-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#e91e63;background-color:#e91e63}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--pink .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--pink .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-pink-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-pink-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--pink .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--pink .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-pink-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-pink-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--pink .mdc-checkbox:after,.mdc-theme-name--pink .mdc-checkbox:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--pink .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--pink .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--pink .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--pink .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--pink .mdc-checkbox:after,.mdc-theme-name--pink .mdc-checkbox:before,.mdc-theme-name--pink .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#e91e63}.mdc-theme-name--pink .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--pink .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#e91e63;background-color:#e91e63}@-webkit-keyframes mdc-checkbox-fade-in-background-purple-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#9c27b0;background-color:#9c27b0}}@keyframes mdc-checkbox-fade-in-background-purple-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#9c27b0;background-color:#9c27b0}}@-webkit-keyframes mdc-checkbox-fade-out-background-purple-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#9c27b0;background-color:#9c27b0}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-purple-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#9c27b0;background-color:#9c27b0}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--purple .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--purple .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-purple-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-purple-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--purple .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--purple .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-purple-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-purple-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--purple .mdc-checkbox:after,.mdc-theme-name--purple .mdc-checkbox:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--purple .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--purple .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--purple .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--purple .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--purple .mdc-checkbox:after,.mdc-theme-name--purple .mdc-checkbox:before,.mdc-theme-name--purple .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#9c27b0}.mdc-theme-name--purple .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--purple .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#9c27b0;background-color:#9c27b0}@-webkit-keyframes mdc-checkbox-fade-in-background-deep-purple-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#673ab7;background-color:#673ab7}}@keyframes mdc-checkbox-fade-in-background-deep-purple-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#673ab7;background-color:#673ab7}}@-webkit-keyframes mdc-checkbox-fade-out-background-deep-purple-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#673ab7;background-color:#673ab7}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-deep-purple-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#673ab7;background-color:#673ab7}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--deep-purple .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--deep-purple .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-deep-purple-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-deep-purple-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--deep-purple .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--deep-purple .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-deep-purple-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-deep-purple-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--deep-purple .mdc-checkbox:after,.mdc-theme-name--deep-purple .mdc-checkbox:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--deep-purple .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--deep-purple .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--deep-purple .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--deep-purple .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--deep-purple .mdc-checkbox:after,.mdc-theme-name--deep-purple .mdc-checkbox:before,.mdc-theme-name--deep-purple .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#673ab7}.mdc-theme-name--deep-purple .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--deep-purple .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#673ab7;background-color:#673ab7}@-webkit-keyframes mdc-checkbox-fade-in-background-indigo-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#3f51b5;background-color:#3f51b5}}@keyframes mdc-checkbox-fade-in-background-indigo-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#3f51b5;background-color:#3f51b5}}@-webkit-keyframes mdc-checkbox-fade-out-background-indigo-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#3f51b5;background-color:#3f51b5}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-indigo-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#3f51b5;background-color:#3f51b5}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--indigo .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--indigo .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-indigo-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-indigo-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--indigo .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--indigo .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-indigo-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-indigo-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--indigo .mdc-checkbox:after,.mdc-theme-name--indigo .mdc-checkbox:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--indigo .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--indigo .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--indigo .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--indigo .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--indigo .mdc-checkbox:after,.mdc-theme-name--indigo .mdc-checkbox:before,.mdc-theme-name--indigo .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#3f51b5}.mdc-theme-name--indigo .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--indigo .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#3f51b5;background-color:#3f51b5}@-webkit-keyframes mdc-checkbox-fade-in-background-blue-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#2196f3;background-color:#2196f3}}@keyframes mdc-checkbox-fade-in-background-blue-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#2196f3;background-color:#2196f3}}@-webkit-keyframes mdc-checkbox-fade-out-background-blue-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#2196f3;background-color:#2196f3}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-blue-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#2196f3;background-color:#2196f3}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--blue .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--blue .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-blue-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-blue-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--blue .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--blue .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-blue-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-blue-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--blue .mdc-checkbox:after,.mdc-theme-name--blue .mdc-checkbox:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--blue .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--blue .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--blue .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--blue .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--blue .mdc-checkbox:after,.mdc-theme-name--blue .mdc-checkbox:before,.mdc-theme-name--blue .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#2196f3}.mdc-theme-name--blue .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--blue .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#2196f3;background-color:#2196f3}@-webkit-keyframes mdc-checkbox-fade-in-background-light-blue-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#03a9f4;background-color:#03a9f4}}@keyframes mdc-checkbox-fade-in-background-light-blue-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#03a9f4;background-color:#03a9f4}}@-webkit-keyframes mdc-checkbox-fade-out-background-light-blue-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#03a9f4;background-color:#03a9f4}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-light-blue-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#03a9f4;background-color:#03a9f4}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--light-blue .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--light-blue .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-light-blue-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-light-blue-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--light-blue .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--light-blue .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-light-blue-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-light-blue-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--light-blue .mdc-checkbox:after,.mdc-theme-name--light-blue .mdc-checkbox:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--light-blue .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--light-blue .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--light-blue .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-blue .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--light-blue .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--light-blue .mdc-checkbox:after,.mdc-theme-name--light-blue .mdc-checkbox:before,.mdc-theme-name--light-blue .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#03a9f4}.mdc-theme-name--light-blue .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--light-blue .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#03a9f4;background-color:#03a9f4}@-webkit-keyframes mdc-checkbox-fade-in-background-cyan-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#00bcd4;background-color:#00bcd4}}@keyframes mdc-checkbox-fade-in-background-cyan-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#00bcd4;background-color:#00bcd4}}@-webkit-keyframes mdc-checkbox-fade-out-background-cyan-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#00bcd4;background-color:#00bcd4}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-cyan-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#00bcd4;background-color:#00bcd4}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--cyan .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--cyan .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-cyan-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-cyan-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--cyan .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--cyan .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-cyan-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-cyan-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--cyan .mdc-checkbox:after,.mdc-theme-name--cyan .mdc-checkbox:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--cyan .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--cyan .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--cyan .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--cyan .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--cyan .mdc-checkbox:after,.mdc-theme-name--cyan .mdc-checkbox:before,.mdc-theme-name--cyan .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#00bcd4}.mdc-theme-name--cyan .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--cyan .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#00bcd4;background-color:#00bcd4}@-webkit-keyframes mdc-checkbox-fade-in-background-teal-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#009688;background-color:#009688}}@keyframes mdc-checkbox-fade-in-background-teal-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#009688;background-color:#009688}}@-webkit-keyframes mdc-checkbox-fade-out-background-teal-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#009688;background-color:#009688}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-teal-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#009688;background-color:#009688}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--teal .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--teal .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-teal-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-teal-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--teal .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--teal .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-teal-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-teal-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--teal .mdc-checkbox:after,.mdc-theme-name--teal .mdc-checkbox:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--teal .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--teal .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--teal .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--teal .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--teal .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--teal .mdc-checkbox:after,.mdc-theme-name--teal .mdc-checkbox:before,.mdc-theme-name--teal .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#009688}.mdc-theme-name--teal .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--teal .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#009688;background-color:#009688}@-webkit-keyframes mdc-checkbox-fade-in-background-green-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#4caf50;background-color:#4caf50}}@keyframes mdc-checkbox-fade-in-background-green-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#4caf50;background-color:#4caf50}}@-webkit-keyframes mdc-checkbox-fade-out-background-green-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#4caf50;background-color:#4caf50}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-green-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#4caf50;background-color:#4caf50}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--green .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--green .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-green-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-green-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--green .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--green .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-green-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-green-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--green .mdc-checkbox:after,.mdc-theme-name--green .mdc-checkbox:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--green .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--green .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--green .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--green .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--green .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--green .mdc-checkbox:after,.mdc-theme-name--green .mdc-checkbox:before,.mdc-theme-name--green .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#4caf50}.mdc-theme-name--green .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--green .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#4caf50;background-color:#4caf50}@-webkit-keyframes mdc-checkbox-fade-in-background-light-green-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#8bc34a;background-color:#8bc34a}}@keyframes mdc-checkbox-fade-in-background-light-green-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#8bc34a;background-color:#8bc34a}}@-webkit-keyframes mdc-checkbox-fade-out-background-light-green-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#8bc34a;background-color:#8bc34a}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-light-green-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#8bc34a;background-color:#8bc34a}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--light-green .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--light-green .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-light-green-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-light-green-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--light-green .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--light-green .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-light-green-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-light-green-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--light-green .mdc-checkbox:after,.mdc-theme-name--light-green .mdc-checkbox:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--light-green .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--light-green .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--light-green .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--light-green .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--light-green .mdc-checkbox:after,.mdc-theme-name--light-green .mdc-checkbox:before,.mdc-theme-name--light-green .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#8bc34a}.mdc-theme-name--light-green .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--light-green .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#8bc34a;background-color:#8bc34a}@-webkit-keyframes mdc-checkbox-fade-in-background-lime-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#cddc39;background-color:#cddc39}}@keyframes mdc-checkbox-fade-in-background-lime-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#cddc39;background-color:#cddc39}}@-webkit-keyframes mdc-checkbox-fade-out-background-lime-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#cddc39;background-color:#cddc39}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-lime-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#cddc39;background-color:#cddc39}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--lime .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--lime .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-lime-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-lime-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--lime .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--lime .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-lime-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-lime-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--lime .mdc-checkbox:after,.mdc-theme-name--lime .mdc-checkbox:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--lime .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--lime .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--lime .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--lime .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--lime .mdc-checkbox:after,.mdc-theme-name--lime .mdc-checkbox:before,.mdc-theme-name--lime .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#cddc39}.mdc-theme-name--lime .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--lime .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#cddc39;background-color:#cddc39}@-webkit-keyframes mdc-checkbox-fade-in-background-yellow-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ffeb3b;background-color:#ffeb3b}}@keyframes mdc-checkbox-fade-in-background-yellow-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ffeb3b;background-color:#ffeb3b}}@-webkit-keyframes mdc-checkbox-fade-out-background-yellow-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ffeb3b;background-color:#ffeb3b}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-yellow-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ffeb3b;background-color:#ffeb3b}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--yellow .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--yellow .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-yellow-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-yellow-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--yellow .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--yellow .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-yellow-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-yellow-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--yellow .mdc-checkbox:after,.mdc-theme-name--yellow .mdc-checkbox:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--yellow .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--yellow .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--yellow .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--yellow .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--yellow .mdc-checkbox:after,.mdc-theme-name--yellow .mdc-checkbox:before,.mdc-theme-name--yellow .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#ffeb3b}.mdc-theme-name--yellow .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--yellow .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#ffeb3b;background-color:#ffeb3b}@-webkit-keyframes mdc-checkbox-fade-in-background-amber-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ffc107;background-color:#ffc107}}@keyframes mdc-checkbox-fade-in-background-amber-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ffc107;background-color:#ffc107}}@-webkit-keyframes mdc-checkbox-fade-out-background-amber-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ffc107;background-color:#ffc107}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-amber-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ffc107;background-color:#ffc107}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--amber .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--amber .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-amber-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-amber-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--amber .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--amber .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-amber-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-amber-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--amber .mdc-checkbox:after,.mdc-theme-name--amber .mdc-checkbox:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--amber .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--amber .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--amber .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--amber .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--amber .mdc-checkbox:after,.mdc-theme-name--amber .mdc-checkbox:before,.mdc-theme-name--amber .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#ffc107}.mdc-theme-name--amber .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--amber .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#ffc107;background-color:#ffc107}@-webkit-keyframes mdc-checkbox-fade-in-background-orange-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ff9800;background-color:#ff9800}}@keyframes mdc-checkbox-fade-in-background-orange-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ff9800;background-color:#ff9800}}@-webkit-keyframes mdc-checkbox-fade-out-background-orange-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ff9800;background-color:#ff9800}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-orange-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ff9800;background-color:#ff9800}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--orange .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--orange .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-orange-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-orange-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--orange .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--orange .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-orange-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-orange-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--orange .mdc-checkbox:after,.mdc-theme-name--orange .mdc-checkbox:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--orange .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--orange .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--orange .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--orange .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--orange .mdc-checkbox:after,.mdc-theme-name--orange .mdc-checkbox:before,.mdc-theme-name--orange .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#ff9800}.mdc-theme-name--orange .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--orange .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#ff9800;background-color:#ff9800}@-webkit-keyframes mdc-checkbox-fade-in-background-deep-orange-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ff5722;background-color:#ff5722}}@keyframes mdc-checkbox-fade-in-background-deep-orange-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#ff5722;background-color:#ff5722}}@-webkit-keyframes mdc-checkbox-fade-out-background-deep-orange-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ff5722;background-color:#ff5722}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-deep-orange-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#ff5722;background-color:#ff5722}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--deep-orange .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--deep-orange .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-deep-orange-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-deep-orange-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--deep-orange .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--deep-orange .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-deep-orange-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-deep-orange-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--deep-orange .mdc-checkbox:after,.mdc-theme-name--deep-orange .mdc-checkbox:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--deep-orange .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--deep-orange .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--deep-orange .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-orange .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--deep-orange .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--deep-orange .mdc-checkbox:after,.mdc-theme-name--deep-orange .mdc-checkbox:before,.mdc-theme-name--deep-orange .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#ff5722}.mdc-theme-name--deep-orange .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--deep-orange .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#ff5722;background-color:#ff5722}@-webkit-keyframes mdc-checkbox-fade-in-background-brown-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#795548;background-color:#795548}}@keyframes mdc-checkbox-fade-in-background-brown-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#795548;background-color:#795548}}@-webkit-keyframes mdc-checkbox-fade-out-background-brown-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#795548;background-color:#795548}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-brown-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#795548;background-color:#795548}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--brown .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--brown .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-brown-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-brown-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--brown .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--brown .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-brown-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-brown-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--brown .mdc-checkbox:after,.mdc-theme-name--brown .mdc-checkbox:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--brown .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--brown .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--brown .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--brown .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--brown .mdc-checkbox:after,.mdc-theme-name--brown .mdc-checkbox:before,.mdc-theme-name--brown .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#795548}.mdc-theme-name--brown .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--brown .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#795548;background-color:#795548}@-webkit-keyframes mdc-checkbox-fade-in-background-grey-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#9e9e9e;background-color:#9e9e9e}}@keyframes mdc-checkbox-fade-in-background-grey-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#9e9e9e;background-color:#9e9e9e}}@-webkit-keyframes mdc-checkbox-fade-out-background-grey-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#9e9e9e;background-color:#9e9e9e}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-grey-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#9e9e9e;background-color:#9e9e9e}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--grey .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--grey .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-grey-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-grey-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--grey .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--grey .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-grey-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-grey-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--grey .mdc-checkbox:after,.mdc-theme-name--grey .mdc-checkbox:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--grey .mdc-checkbox:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--grey .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--grey .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--grey .mdc-checkbox__checkmark{color:rgba(0,0,0,.87)}.mdc-theme-name--grey .mdc-checkbox__mixedmark{border-color:rgba(0,0,0,.87)}.mdc-theme-name--grey .mdc-checkbox:after,.mdc-theme-name--grey .mdc-checkbox:before,.mdc-theme-name--grey .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#9e9e9e}.mdc-theme-name--grey .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--grey .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#9e9e9e;background-color:#9e9e9e}@-webkit-keyframes mdc-checkbox-fade-in-background-blue-grey-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#607d8b;background-color:#607d8b}}@keyframes mdc-checkbox-fade-in-background-blue-grey-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#607d8b;background-color:#607d8b}}@-webkit-keyframes mdc-checkbox-fade-out-background-blue-grey-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#607d8b;background-color:#607d8b}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-blue-grey-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#607d8b;background-color:#607d8b}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--blue-grey .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--blue-grey .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-blue-grey-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-blue-grey-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--blue-grey .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--blue-grey .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-blue-grey-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-blue-grey-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--blue-grey .mdc-checkbox:after,.mdc-theme-name--blue-grey .mdc-checkbox:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--blue-grey .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--blue-grey .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--blue-grey .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue-grey .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--blue-grey .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--blue-grey .mdc-checkbox:after,.mdc-theme-name--blue-grey .mdc-checkbox:before,.mdc-theme-name--blue-grey .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#607d8b}.mdc-theme-name--blue-grey .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--blue-grey .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#607d8b;background-color:#607d8b}@-webkit-keyframes mdc-checkbox-fade-in-background-black-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#313131;background-color:#313131}}@keyframes mdc-checkbox-fade-in-background-black-mdc-checkbox-container-keyframes-uid_(){0%{border-color:rgba(0,0,0,.54);background-color:transparent}50%{border-color:#313131;background-color:#313131}}@-webkit-keyframes mdc-checkbox-fade-out-background-black-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#313131;background-color:#313131}to{border-color:rgba(0,0,0,.54);background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-black-mdc-checkbox-container-keyframes-uid_(){0%,80%{border-color:#313131;background-color:#313131}to{border-color:rgba(0,0,0,.54);background-color:transparent}}.mdc-theme-name--black .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--black .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-black-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-in-background-black-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--black .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-theme-name--black .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-black-mdc-checkbox-container-keyframes-uid_();animation-name:mdc-checkbox-fade-out-background-black-mdc-checkbox-container-keyframes-uid_()}.mdc-theme-name--black .mdc-checkbox:after,.mdc-theme-name--black .mdc-checkbox:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black .mdc-checkbox.mdc-ripple-surface--hover:before,.mdc-theme-name--black .mdc-checkbox:hover:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black .mdc-checkbox.mdc-ripple-upgraded--background-focused:before,.mdc-theme-name--black .mdc-checkbox:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black .mdc-checkbox:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-theme-name--black .mdc-checkbox:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black .mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black .mdc-checkbox__checkmark{color:#fff}.mdc-theme-name--black .mdc-checkbox__mixedmark{border-color:#fff}.mdc-theme-name--black .mdc-checkbox:after,.mdc-theme-name--black .mdc-checkbox:before,.mdc-theme-name--black .mdc-checkbox__background .mdc-checkbox__background:before{background-color:#313131}.mdc-theme-name--black .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-theme-name--black .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#313131;background-color:#313131}.mdc-checkbox__native-control:focus-visible~.mdc-checkbox__background{outline:1px auto -webkit-focus-ring-color;outline-offset:5px}.mdc-evolution-chip,.mdc-evolution-chip__action,.mdc-evolution-chip__cell{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-evolution-chip__action,.mdc-evolution-chip__cell{height:100%}.mdc-evolution-chip__cell--primary{overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}.mdc-evolution-chip__action--primary{overflow-x:hidden}.mdc-evolution-chip__action--trailing{position:relative}.mdc-evolution-chip__action--primary:before{box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1}.mdc-evolution-chip--touch{margin-top:8px;margin-bottom:8px}.mdc-evolution-chip__action-touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-evolution-chip__text-label{white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;text-overflow:ellipsis;overflow:hidden}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mdc-evolution-chip__checkmark-background{opacity:0}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width .15s cubic-bezier(.4,0,.2,1) 0ms}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform .15s cubic-bezier(.4,0,.2,1) 0ms;transform:translate(-75%,-50%)}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset .15s cubic-bezier(.4,0,.2,1) 45ms}.mdc-evolution-chip--deselecting .mdc-evolution-chip__graphic{transition:width .1s cubic-bezier(.4,0,.2,1) 0ms}.mdc-evolution-chip--deselecting .mdc-evolution-chip__checkmark{transition:opacity 50ms linear 0ms,transform .1s cubic-bezier(.4,0,.2,1) 0ms;transform:translate(-75%,-50%)}.mdc-evolution-chip--deselecting .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}.mdc-evolution-chip--selecting-with-primary-icon .mdc-evolution-chip__icon--primary{transition:opacity 75ms cubic-bezier(.4,0,.2,1) 0ms}.mdc-evolution-chip--selecting-with-primary-icon .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset .15s cubic-bezier(.4,0,.2,1) 75ms}.mdc-evolution-chip--deselecting-with-primary-icon .mdc-evolution-chip__icon--primary{transition:opacity .15s cubic-bezier(.4,0,.2,1) 75ms}.mdc-evolution-chip--deselecting-with-primary-icon .mdc-evolution-chip__checkmark{transition:opacity 75ms cubic-bezier(.4,0,.2,1) 0ms;transform:translate(-50%,-50%)}.mdc-evolution-chip--deselecting-with-primary-icon .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%,-50%);opacity:1}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@-webkit-keyframes mdc-evolution-chip-enter{0%{transform:scale(.8);opacity:.4}to{transform:scale(1);opacity:1}}@keyframes mdc-evolution-chip-enter{0%{transform:scale(.8);opacity:.4}to{transform:scale(1);opacity:1}}.mdc-evolution-chip--enter{-webkit-animation:mdc-evolution-chip-enter .1s cubic-bezier(0,0,.2,1) 0ms;animation:mdc-evolution-chip-enter .1s cubic-bezier(0,0,.2,1) 0ms}@-webkit-keyframes mdc-evolution-chip-exit{0%{opacity:1}to{opacity:0}}@keyframes mdc-evolution-chip-exit{0%{opacity:1}to{opacity:0}}.mdc-evolution-chip--exit{-webkit-animation:mdc-evolution-chip-exit 75ms cubic-bezier(.4,0,1,1) 0ms;animation:mdc-evolution-chip-exit 75ms cubic-bezier(.4,0,1,1) 0ms}.mdc-evolution-chip--hidden{opacity:0;pointer-events:none;transition:width .15s cubic-bezier(.4,0,1,1) 0ms}.mdc-evolution-chip{height:32px;border-radius:16px;background-color:#e0e0e0}.mdc-evolution-chip .mdc-evolution-chip__action--primary:after,.mdc-evolution-chip .mdc-evolution-chip__action--primary:before,.mdc-evolution-chip .mdc-evolution-chip__icon--primary,.mdc-evolution-chip .mdc-evolution-chip__ripple{border-radius:16px}.mdc-evolution-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic,.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing,.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing{padding-left:8px;padding-right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:8px;right:auto}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:auto;right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:8px;right:auto}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:auto;right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic,.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing,.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing{padding-left:8px;padding-right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:8px;right:auto}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:auto;right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:8px;right:auto}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:auto;right:8px}.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary,.mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip .mdc-evolution-chip__checkmark,.mdc-evolution-chip .mdc-evolution-chip__icon--primary,.mdc-evolution-chip .mdc-evolution-chip__icon--trailing,.mdc-evolution-chip .mdc-evolution-chip__text-label{color:rgba(0,0,0,.87)}.mdc-evolution-chip .mdc-evolution-chip__text-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit)}.mdc-evolution-chip.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--with-primary-icon){--mdc-chip-graphic-selected-width:20px}.mdc-evolution-chip .mdc-evolution-chip__graphic,.mdc-evolution-chip .mdc-evolution-chip__icon--primary{height:20px;width:20px;font-size:20px}.mdc-evolution-chip .mdc-evolution-chip__checkmark{height:20px;width:20px}.mdc-evolution-chip .mdc-evolution-chip__action--trailing:after,.mdc-evolution-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-evolution-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary:before{border-color:GrayText}.mdc-evolution-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark,.mdc-evolution-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary,.mdc-evolution-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mdc-evolution-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:GrayText}}.mdc-evolution-chip .mdc-evolution-chip__action:after{position:absolute;content:"";border:0 solid transparent;pointer-events:none;box-sizing:border-box;z-index:1}.mdc-evolution-chip .mdc-evolution-chip__action:not(.mdc-evolution-chip__action--presentational).mdc-ripple-upgraded--background-focused:after,.mdc-evolution-chip .mdc-evolution-chip__action:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus:after{border-width:5px;border-style:double}.mdc-evolution-chip .mdc-evolution-chip__action--primary:after{height:100%;width:100%;top:50%;left:50%;transform:translate(-50%,-50%)}.mdc-evolution-chip .mdc-evolution-chip__action--trailing:after{top:50%;transform:translateY(-50%);border-radius:50%}.mdc-evolution-chip--filter.mdc-evolution-chip--selected{background-color:#cecece}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing,.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:8px;right:auto}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__ripple--trailing{left:auto;right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:8px;right:auto}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing:after{left:auto;right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary,.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary[dir=rtl],[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--with-primary-icon){--mdc-chip-graphic-selected-width:24px}.mdc-evolution-chip--with-avatar .mdc-evolution-chip__graphic,.mdc-evolution-chip--with-avatar .mdc-evolution-chip__icon--primary{height:24px;width:24px;font-size:24px}.mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after,.mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.mdc-evolution-chip__action--primary.mdc-ripple-surface--hover .mdc-evolution-chip__ripple:before,.mdc-evolution-chip__action--primary:hover .mdc-evolution-chip__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-evolution-chip__action--primary.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__ripple:before,.mdc-evolution-chip__action--primary:not(.mdc-ripple-upgraded):focus .mdc-evolution-chip__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-evolution-chip__action--primary:not(.mdc-ripple-upgraded) .mdc-evolution-chip__ripple:after{transition:opacity .15s linear}.mdc-evolution-chip__action--primary:not(.mdc-ripple-upgraded):active .mdc-evolution-chip__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-evolution-chip__action--primary.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-evolution-chip__action--trailing .mdc-evolution-chip__ripple:after,.mdc-evolution-chip__action--trailing .mdc-evolution-chip__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.mdc-evolution-chip__action--trailing.mdc-ripple-surface--hover .mdc-evolution-chip__ripple:before,.mdc-evolution-chip__action--trailing:hover .mdc-evolution-chip__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-evolution-chip__action--trailing.mdc-ripple-upgraded--background-focused .mdc-evolution-chip__ripple:before,.mdc-evolution-chip__action--trailing:not(.mdc-ripple-upgraded):focus .mdc-evolution-chip__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-evolution-chip__action--trailing:not(.mdc-ripple-upgraded) .mdc-evolution-chip__ripple:after{transition:opacity .15s linear}.mdc-evolution-chip__action--trailing:not(.mdc-ripple-upgraded):active .mdc-evolution-chip__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-evolution-chip__action--trailing.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-evolution-chip__ripple--trailing{height:18px;width:18px}.mdc-evolution-chip__action{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-evolution-chip__action .mdc-evolution-chip__ripple:after,.mdc-evolution-chip__action .mdc-evolution-chip__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-evolution-chip__action .mdc-evolution-chip__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-evolution-chip__action .mdc-evolution-chip__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-evolution-chip__action.mdc-ripple-upgraded .mdc-evolution-chip__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-evolution-chip__action.mdc-ripple-upgraded .mdc-evolution-chip__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-evolution-chip__action.mdc-ripple-upgraded--unbounded .mdc-evolution-chip__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-evolution-chip__action.mdc-ripple-upgraded--foreground-activation .mdc-evolution-chip__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-evolution-chip__action.mdc-ripple-upgraded--foreground-deactivation .mdc-evolution-chip__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-evolution-chip__action .mdc-evolution-chip__ripple:after,.mdc-evolution-chip__action .mdc-evolution-chip__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-evolution-chip__action.mdc-ripple-upgraded .mdc-evolution-chip__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-evolution-chip__ripple{position:absolute;box-sizing:content-box;overflow:hidden;pointer-events:none}.mdc-evolution-chip__ripple--primary{height:100%;width:100%;top:0;left:0}.mdc-evolution-chip__ripple--trailing{top:50%;transform:translateY(-50%)}.mdc-evolution-chip-set{display:flex}.mdc-evolution-chip-set:focus{outline:none}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mdc-evolution-chip-set--overflow .mdc-evolution-chip-set__chips{flex-flow:nowrap}.mdc-evolution-chip-set .mdc-evolution-chip-set__chips{margin-left:-8px;margin-right:0}.mdc-evolution-chip-set .mdc-evolution-chip-set__chips[dir=rtl],[dir=rtl] .mdc-evolution-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}.mdc-evolution-chip-set .mdc-evolution-chip{margin-left:8px;margin-right:0}.mdc-evolution-chip-set .mdc-evolution-chip[dir=rtl],[dir=rtl] .mdc-evolution-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set .mdc-evolution-chip{margin-top:4px;margin-bottom:4px}fieldset.chip-editable-outer-container{border:none}.editable-chip-set{align-items:flex-end;display:flex;flex-wrap:wrap;position:relative}.editable-chip-set:after{background-color:#e0e0e0;bottom:0;content:"";height:1px;left:0;position:absolute;right:0;transition:all .4s cubic-bezier(.25,.8,.25,1)}.editable-chip-set.has-focus:after{background-color:#8bc34a;height:2px}.invalid .editable-chip-set:after{background-color:#ff5722;height:2px}.editable-chip-set .mdc-evolution-chip-set{padding-left:0;padding-right:0;margin-left:-4px}.editable-chip-set .mdc-evolution-chip-set .mdc-evolution-chip{margin-left:4px}.editable-chip-set label{flex:1;margin:9px 0 0 0;padding-bottom:4px}.editable-chip-set input[type=text]{border:0 none;box-sizing:border-box;font-size:inherit;margin-bottom:4px;min-width:5em;padding:7px 12px 7px 6px;width:100%;background:transparent}.editable-chip-set input[type=text]:focus{outline:none}.mdc-theme-name--red .editable-chip-set.has-focus:after{background-color:#e53935}.mdc-theme-name--red .mdc-evolution-chip{background-color:#ffcdd2;color:rgba(0,0,0,.87)}.mdc-theme-name--red .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--red .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#e53935;color:#ffcdd2;border-radius:18px;margin-right:7px}.mdc-theme-name--red .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--red .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#b71c1c}.mdc-theme-name--pink .editable-chip-set.has-focus:after{background-color:#d81b60}.mdc-theme-name--pink .mdc-evolution-chip{background-color:#f8bbd0;color:rgba(0,0,0,.87)}.mdc-theme-name--pink .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--pink .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#d81b60;color:#f8bbd0;border-radius:18px;margin-right:7px}.mdc-theme-name--pink .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--pink .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#880e4f}.mdc-theme-name--purple .editable-chip-set.has-focus:after{background-color:#8e24aa}.mdc-theme-name--purple .mdc-evolution-chip{background-color:#e1bee7;color:rgba(0,0,0,.87)}.mdc-theme-name--purple .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#8e24aa;color:#e1bee7;border-radius:18px;margin-right:7px}.mdc-theme-name--purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#4a148c}.mdc-theme-name--deep-purple .editable-chip-set.has-focus:after{background-color:#5e35b1}.mdc-theme-name--deep-purple .mdc-evolution-chip{background-color:#d1c4e9;color:rgba(0,0,0,.87)}.mdc-theme-name--deep-purple .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--deep-purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#5e35b1;color:#d1c4e9;border-radius:18px;margin-right:7px}.mdc-theme-name--deep-purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--deep-purple .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#311b92}.mdc-theme-name--indigo .editable-chip-set.has-focus:after{background-color:#3949ab}.mdc-theme-name--indigo .mdc-evolution-chip{background-color:#c5cae9;color:rgba(0,0,0,.87)}.mdc-theme-name--indigo .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--indigo .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#3949ab;color:#c5cae9;border-radius:18px;margin-right:7px}.mdc-theme-name--indigo .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--indigo .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#1a237e}.mdc-theme-name--blue .editable-chip-set.has-focus:after{background-color:#1e88e5}.mdc-theme-name--blue .mdc-evolution-chip{background-color:#bbdefb;color:rgba(0,0,0,.87)}.mdc-theme-name--blue .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#1e88e5;color:#bbdefb;border-radius:18px;margin-right:7px}.mdc-theme-name--blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#0d47a1}.mdc-theme-name--light-blue .editable-chip-set.has-focus:after{background-color:#039be5}.mdc-theme-name--light-blue .mdc-evolution-chip{background-color:#b3e5fc;color:rgba(0,0,0,.87)}.mdc-theme-name--light-blue .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--light-blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#039be5;color:#b3e5fc;border-radius:18px;margin-right:7px}.mdc-theme-name--light-blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--light-blue .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#01579b}.mdc-theme-name--cyan .editable-chip-set.has-focus:after{background-color:#00acc1}.mdc-theme-name--cyan .mdc-evolution-chip{background-color:#b2ebf2;color:rgba(0,0,0,.87)}.mdc-theme-name--cyan .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--cyan .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#00acc1;color:#b2ebf2;border-radius:18px;margin-right:7px}.mdc-theme-name--cyan .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--cyan .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#006064}.mdc-theme-name--teal .editable-chip-set.has-focus:after{background-color:#00897b}.mdc-theme-name--teal .mdc-evolution-chip{background-color:#b2dfdb;color:rgba(0,0,0,.87)}.mdc-theme-name--teal .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--teal .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#00897b;color:#b2dfdb;border-radius:18px;margin-right:7px}.mdc-theme-name--teal .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--teal .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#004d40}.mdc-theme-name--green .editable-chip-set.has-focus:after{background-color:#43a047}.mdc-theme-name--green .mdc-evolution-chip{background-color:#c8e6c9;color:rgba(0,0,0,.87)}.mdc-theme-name--green .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#43a047;color:#c8e6c9;border-radius:18px;margin-right:7px}.mdc-theme-name--green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#1b5e20}.mdc-theme-name--light-green .editable-chip-set.has-focus:after{background-color:#7cb342}.mdc-theme-name--light-green .mdc-evolution-chip{background-color:#dcedc8;color:rgba(0,0,0,.87)}.mdc-theme-name--light-green .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--light-green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#7cb342;color:#dcedc8;border-radius:18px;margin-right:7px}.mdc-theme-name--light-green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--light-green .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#33691e}.mdc-theme-name--lime .editable-chip-set.has-focus:after{background-color:#c0ca33}.mdc-theme-name--lime .mdc-evolution-chip{background-color:#f0f4c3;color:rgba(0,0,0,.87)}.mdc-theme-name--lime .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--lime .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#c0ca33;color:#f0f4c3;border-radius:18px;margin-right:7px}.mdc-theme-name--lime .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--lime .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#827717}.mdc-theme-name--yellow .editable-chip-set.has-focus:after{background-color:#fdd835}.mdc-theme-name--yellow .mdc-evolution-chip{background-color:#fff9c4;color:rgba(0,0,0,.87)}.mdc-theme-name--yellow .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--yellow .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#fdd835;color:#fff9c4;border-radius:18px;margin-right:7px}.mdc-theme-name--yellow .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--yellow .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#f57f17}.mdc-theme-name--amber .editable-chip-set.has-focus:after{background-color:#ffb300}.mdc-theme-name--amber .mdc-evolution-chip{background-color:#ffecb3;color:rgba(0,0,0,.87)}.mdc-theme-name--amber .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--amber .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#ffb300;color:#ffecb3;border-radius:18px;margin-right:7px}.mdc-theme-name--amber .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--amber .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#ff6f00}.mdc-theme-name--orange .editable-chip-set.has-focus:after{background-color:#fb8c00}.mdc-theme-name--orange .mdc-evolution-chip{background-color:#ffe0b2;color:rgba(0,0,0,.87)}.mdc-theme-name--orange .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#fb8c00;color:#ffe0b2;border-radius:18px;margin-right:7px}.mdc-theme-name--orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#e65100}.mdc-theme-name--deep-orange .editable-chip-set.has-focus:after{background-color:#f4511e}.mdc-theme-name--deep-orange .mdc-evolution-chip{background-color:#ffccbc;color:rgba(0,0,0,.87)}.mdc-theme-name--deep-orange .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--deep-orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#f4511e;color:#ffccbc;border-radius:18px;margin-right:7px}.mdc-theme-name--deep-orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--deep-orange .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#bf360c}.mdc-theme-name--brown .editable-chip-set.has-focus:after{background-color:#6d4c41}.mdc-theme-name--brown .mdc-evolution-chip{background-color:#d7ccc8;color:rgba(0,0,0,.87)}.mdc-theme-name--brown .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--brown .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#6d4c41;color:#d7ccc8;border-radius:18px;margin-right:7px}.mdc-theme-name--brown .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--brown .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#3e2723}.mdc-theme-name--grey .editable-chip-set.has-focus:after{background-color:#757575}.mdc-theme-name--grey .mdc-evolution-chip{background-color:#f5f5f5;color:rgba(0,0,0,.87)}.mdc-theme-name--grey .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#757575;color:#f5f5f5;border-radius:18px;margin-right:7px}.mdc-theme-name--grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#212121}.mdc-theme-name--blue-grey .editable-chip-set.has-focus:after{background-color:#546e7a}.mdc-theme-name--blue-grey .mdc-evolution-chip{background-color:#cfd8dc;color:rgba(0,0,0,.87)}.mdc-theme-name--blue-grey .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--blue-grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#546e7a;color:#cfd8dc;border-radius:18px;margin-right:7px}.mdc-theme-name--blue-grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--blue-grey .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#263238}.mdc-theme-name--black .editable-chip-set.has-focus:after{background-color:#292929}.mdc-theme-name--black .mdc-evolution-chip{background-color:#535353;color:#fff}.mdc-theme-name--black .mdc-ripple-upgraded--background-focused .mdc-evolution-chip__action--primary .mdc-evolution-chip__ripple:after{opacity:.12;width:200%;height:200%;transform:scale(1.5)}.mdc-theme-name--black .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing{background-color:#292929;color:#535353;border-radius:18px;margin-right:7px}.mdc-theme-name--black .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:focus,.mdc-theme-name--black .mdc-evolution-chip__icon.mdc-evolution-chip__icon--trailing:hover{background-color:#0f0f0f}.foxy-chip-single{display:inline-flex;align-items:center;padding:.5rem 1rem;background-color:#e0e0e0;border-radius:16px;font-size:.875rem;color:#333}.foxy-chip-single.mdc-theme-name--red{background-color:#f44336}.foxy-chip-single.mdc-theme-name--pink{background-color:#e91e63}.foxy-chip-single.mdc-theme-name--purple{background-color:#9c27b0}.foxy-chip-single.mdc-theme-name--deep-purple{background-color:#673ab7}.foxy-chip-single.mdc-theme-name--indigo{background-color:#3f51b5}.foxy-chip-single.mdc-theme-name--blue{background-color:#2196f3}.foxy-chip-single.mdc-theme-name--light-blue{background-color:#03a9f4}.foxy-chip-single.mdc-theme-name--cyan{background-color:#00bcd4}.foxy-chip-single.mdc-theme-name--teal{background-color:#009688}.foxy-chip-single.mdc-theme-name--green{background-color:#4caf50}.foxy-chip-single.mdc-theme-name--light-green{background-color:#8bc34a}.foxy-chip-single.mdc-theme-name--lime{background-color:#cddc39}.foxy-chip-single.mdc-theme-name--yellow{background-color:#ffeb3b}.foxy-chip-single.mdc-theme-name--amber{background-color:#ffc107}.foxy-chip-single.mdc-theme-name--orange{background-color:#ff9800}.foxy-chip-single.mdc-theme-name--deep-orange{background-color:#ff5722}.foxy-chip-single.mdc-theme-name--brown{background-color:#795548}.foxy-chip-single.mdc-theme-name--grey{background-color:#9e9e9e}.foxy-chip-single.mdc-theme-name--blue-grey{background-color:#607d8b}.foxy-chip-single.mdc-theme-name--black{background-color:#313131}.mdc-dialog .mdc-dialog__surface{background-color:#fff;background-color:var(--mdc-theme-surface,#fff)}.mdc-dialog .mdc-dialog__scrim,.mdc-dialog .mdc-dialog__surface-scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__title{color:rgba(0,0,0,.87)}.mdc-dialog .mdc-dialog__content{color:rgba(0,0,0,.6)}.mdc-dialog .mdc-dialog__close{color:#000;color:var(--mdc-theme-on-surface,#000)}.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple:after,.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.mdc-dialog .mdc-dialog__close.mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-dialog .mdc-dialog__close:hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions,.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title,.mdc-dialog.mdc-dialog--scrollable.mdc-dialog-scroll-divider-footer .mdc-dialog__actions{border-color:rgba(0,0,0,.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:1px solid rgba(0,0,0,.12);margin-bottom:0}.mdc-dialog.mdc-dialog-scroll-divider-header.mdc-dialog--fullscreen .mdc-dialog__header{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mdc-dialog .mdc-dialog__surface{border-radius:4px;border-radius:var(--mdc-shape-medium,4px)}.mdc-dialog__surface{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mdc-dialog__title{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline6-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size,1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height,2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight,500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing,.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform,inherit)}.mdc-dialog__content,.mdc-dialog__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.mdc-dialog__content{font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size,1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height,1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight,400);letter-spacing:.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing,.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform,inherit)}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:7;z-index:var(--mdc-dialog-z-index,7)}.mdc-dialog .mdc-dialog__content{padding:20px 24px 20px 24px}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width:592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width:592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:none}@media(max-width:960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px;width:560px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width:720px)and (max-width:672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 112px)}}@media(max-width:720px)and (min-width:672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:560px}}@media(max-width:720px)and (max-height:720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:calc(100vh - 160px)}}@media(max-width:720px)and (min-height:720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px}}@media(max-width:720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width:720px)and (max-height:400px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:-8px}}@media(max-width:600px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:-8px}}@media(min-width:960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 400px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim{opacity:0}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;transform:scale(.8);opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-dialog__surface[dir=rtl],[dir=rtl] .mdc-dialog__surface{text-align:right}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-dialog__surface{outline:2px solid windowText}}.mdc-dialog__surface:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.mdc-dialog__surface:before{content:none}}.mdc-dialog__title{display:block;margin-top:0;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:0 24px 9px}.mdc-dialog__title:before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-dialog__title[dir=rtl],[dir=rtl] .mdc-dialog__title{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{margin-bottom:1px;padding-bottom:15px}.mdc-dialog--fullscreen .mdc-dialog__header{align-items:baseline;border-bottom:1px solid transparent;display:inline-flex;justify-content:space-between;padding:0 24px 9px;z-index:1}.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close{right:-12px}.mdc-dialog--fullscreen .mdc-dialog__title{margin-bottom:0;padding:0;border-bottom:0}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:0;margin-bottom:0}.mdc-dialog--fullscreen .mdc-dialog__close{top:5px}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top:1px solid transparent}.mdc-dialog__content{flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;-webkit-overflow-scrolling:touch}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__header+.mdc-dialog__content,.mdc-dialog__title+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__title+.mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid transparent}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}.mdc-dialog__button[dir=rtl],[dir=rtl] .mdc-dialog__button{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl],[dir=rtl] .mdc-dialog__button:first-child{margin-left:0;margin-right:0}.mdc-dialog__button[dir=rtl],[dir=rtl] .mdc-dialog__button{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--closing,.mdc-dialog--open,.mdc-dialog--opening{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity .15s linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,transform .15s cubic-bezier(0,0,.2,1) 0ms}.mdc-dialog--closing .mdc-dialog__container,.mdc-dialog--closing .mdc-dialog__scrim{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{transform:none}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{transform:none;opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{opacity:1;z-index:1}.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{transition:opacity 75ms linear}.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim{transition:opacity .15s linear}.mdc-dialog__surface-scrim{display:none;opacity:0;position:absolute;width:100%;height:100%}.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{display:block}.mdc-dialog-scroll-lock,.mdc-drawer{overflow:hidden}.mdc-drawer{border-color:rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface,#fff);border-top-left-radius:0;border-top-right-radius:0;border-top-right-radius:var(--mdc-shape-large,0);border-bottom-right-radius:0;border-bottom-right-radius:var(--mdc-shape-large,0);border-bottom-left-radius:0;z-index:6;width:256px;display:flex;flex-direction:column;flex-shrink:0;box-sizing:border-box;height:100%;border-right-width:1px;border-right-style:solid;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdc-drawer .mdc-drawer__title{color:rgba(0,0,0,.87)}.mdc-drawer .mdc-deprecated-list-group__subheader,.mdc-drawer .mdc-deprecated-list-item__graphic,.mdc-drawer .mdc-drawer__subtitle{color:rgba(0,0,0,.6)}.mdc-drawer .mdc-deprecated-list-item{color:rgba(0,0,0,.87)}.mdc-drawer .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic{color:#6200ee}.mdc-drawer .mdc-deprecated-list-item--activated{color:rgba(98,0,238,.87)}.mdc-drawer[dir=rtl],[dir=rtl] .mdc-drawer{border-top-left-radius:0;border-top-left-radius:var(--mdc-shape-large,0);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-left-radius:var(--mdc-shape-large,0)}.mdc-drawer .mdc-deprecated-list-item{border-radius:4px;border-radius:var(--mdc-shape-small,4px)}.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content{margin-left:256px;margin-right:0}.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content[dir=rtl],[dir=rtl] .mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content{margin-left:0;margin-right:256px}.mdc-drawer[dir=rtl],[dir=rtl] .mdc-drawer{border-right-width:0;border-left-width:1px;border-right-style:none;border-left-style:solid}.mdc-drawer .mdc-deprecated-list-item{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size,.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height,1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight,500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing,.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform,inherit);height:40px;margin:8px 8px;padding:0 8px}.mdc-drawer .mdc-deprecated-list-item:first-child{margin-top:2px}.mdc-drawer .mdc-deprecated-list-item:last-child{margin-bottom:0}.mdc-drawer .mdc-deprecated-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin:0;padding:0 16px}.mdc-drawer .mdc-deprecated-list-group__subheader:before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-drawer .mdc-deprecated-list-divider{margin:3px 0 4px}.mdc-drawer .mdc-deprecated-list-item__graphic,.mdc-drawer .mdc-deprecated-list-item__text{pointer-events:none}.mdc-drawer--animate{transform:translateX(-100%)}.mdc-drawer--animate[dir=rtl],[dir=rtl] .mdc-drawer--animate{transform:translateX(100%)}.mdc-drawer--opening{transition-duration:.25s}.mdc-drawer--opening,.mdc-drawer--opening[dir=rtl],[dir=rtl] .mdc-drawer--opening{transform:translateX(0)}.mdc-drawer--closing{transform:translateX(-100%);transition-duration:.2s}.mdc-drawer--closing[dir=rtl],[dir=rtl] .mdc-drawer--closing{transform:translateX(100%)}.mdc-drawer__header{flex-shrink:0;box-sizing:border-box;min-height:64px;padding:0 16px 4px}.mdc-drawer__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-headline6-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size,1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height,2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight,500);letter-spacing:.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing,.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-decoration:var(--mdc-typography-headline6-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-drawer__title:before{display:inline-block;width:0;height:36px;content:"";vertical-align:0}.mdc-drawer__title:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-drawer__subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin-bottom:0}.mdc-drawer__subtitle:before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-drawer__content{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.mdc-drawer--dismissible{left:0;right:auto;display:none;position:absolute}.mdc-drawer--dismissible[dir=rtl],[dir=rtl] .mdc-drawer--dismissible{left:auto;right:0}.mdc-drawer--dismissible.mdc-drawer--open{display:flex}.mdc-drawer-app-content{position:relative}.mdc-drawer-app-content,.mdc-drawer-app-content[dir=rtl],[dir=rtl] .mdc-drawer-app-content{margin-left:0;margin-right:0}.mdc-drawer--modal{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);left:0;right:auto;display:none;position:fixed}.mdc-drawer--modal+.mdc-drawer-scrim{background-color:rgba(0,0,0,.32)}.mdc-drawer--modal[dir=rtl],[dir=rtl] .mdc-drawer--modal{left:auto;right:0}.mdc-drawer--modal.mdc-drawer--open{display:flex}.mdc-drawer-scrim{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdc-drawer--open+.mdc-drawer-scrim{display:block}.mdc-drawer--animate+.mdc-drawer-scrim{opacity:0}.mdc-drawer--opening+.mdc-drawer-scrim{transition-duration:.25s;opacity:1}.mdc-drawer--closing+.mdc-drawer-scrim{transition-duration:.2s;opacity:0}.drawer-wrapper .drawer-container{display:flex;height:100vh}.drawer-wrapper .mdc-drawer-app-content{flex:auto;overflow:auto;position:relative}.drawer-wrapper .main-content{overflow:auto;height:100%}.mdc-circular-progress__determinate-circle,.mdc-circular-progress__indeterminate-circle-graphic{stroke:#6200ee;stroke:var(--mdc-theme-primary,#6200ee)}.mdc-circular-progress__determinate-track{stroke:transparent}@-webkit-keyframes mdc-circular-progress-container-rotate{to{transform:rotate(1turn)}}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(3turn)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(3turn)}}@-webkit-keyframes mdc-circular-progress-color-1-fade-in-out{0%{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@keyframes mdc-circular-progress-color-1-fade-in-out{0%{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@-webkit-keyframes mdc-circular-progress-color-2-fade-in-out{0%{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-2-fade-in-out{0%{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-3-fade-in-out{0%{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-3-fade-in-out{0%{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-4-fade-in-out{0%{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@keyframes mdc-circular-progress-color-4-fade-in-out{0%{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-left-spin{0%{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-left-spin{0%{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@-webkit-keyframes mdc-circular-progress-right-spin{0%{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}}@keyframes mdc-circular-progress-right-spin{0%{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}}.mdc-circular-progress{display:inline-flex;position:relative;direction:ltr;line-height:0;transition:opacity .25s cubic-bezier(.4,0,.6,1) 0ms}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:transparent}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset .5s cubic-bezier(0,0,.2,1) 0ms}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;-webkit-animation:mdc-circular-progress-container-rotate 1.5682352941176s linear infinite;animation:mdc-circular-progress-container-rotate 1.5682352941176s linear infinite}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-1{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-2{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-3{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-4{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.mdc-circular-progress--closed{opacity:0}.mdc-circular-progress.mdc-theme-name--red .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--red .mdc-circular-progress__indeterminate-circle-graphic{stroke:#f44336}.mdc-circular-progress.mdc-theme-name--pink .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--pink .mdc-circular-progress__indeterminate-circle-graphic{stroke:#e91e63}.mdc-circular-progress.mdc-theme-name--purple .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--purple .mdc-circular-progress__indeterminate-circle-graphic{stroke:#9c27b0}.mdc-circular-progress.mdc-theme-name--deep-purple .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--deep-purple .mdc-circular-progress__indeterminate-circle-graphic{stroke:#673ab7}.mdc-circular-progress.mdc-theme-name--indigo .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--indigo .mdc-circular-progress__indeterminate-circle-graphic{stroke:#3f51b5}.mdc-circular-progress.mdc-theme-name--blue .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--blue .mdc-circular-progress__indeterminate-circle-graphic{stroke:#2196f3}.mdc-circular-progress.mdc-theme-name--light-blue .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--light-blue .mdc-circular-progress__indeterminate-circle-graphic{stroke:#03a9f4}.mdc-circular-progress.mdc-theme-name--cyan .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--cyan .mdc-circular-progress__indeterminate-circle-graphic{stroke:#00bcd4}.mdc-circular-progress.mdc-theme-name--teal .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--teal .mdc-circular-progress__indeterminate-circle-graphic{stroke:#009688}.mdc-circular-progress.mdc-theme-name--green .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--green .mdc-circular-progress__indeterminate-circle-graphic{stroke:#4caf50}.mdc-circular-progress.mdc-theme-name--light-green .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--light-green .mdc-circular-progress__indeterminate-circle-graphic{stroke:#8bc34a}.mdc-circular-progress.mdc-theme-name--lime .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--lime .mdc-circular-progress__indeterminate-circle-graphic{stroke:#cddc39}.mdc-circular-progress.mdc-theme-name--yellow .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--yellow .mdc-circular-progress__indeterminate-circle-graphic{stroke:#ffeb3b}.mdc-circular-progress.mdc-theme-name--amber .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--amber .mdc-circular-progress__indeterminate-circle-graphic{stroke:#ffc107}.mdc-circular-progress.mdc-theme-name--orange .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--orange .mdc-circular-progress__indeterminate-circle-graphic{stroke:#ff9800}.mdc-circular-progress.mdc-theme-name--deep-orange .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--deep-orange .mdc-circular-progress__indeterminate-circle-graphic{stroke:#ff5722}.mdc-circular-progress.mdc-theme-name--brown .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--brown .mdc-circular-progress__indeterminate-circle-graphic{stroke:#795548}.mdc-circular-progress.mdc-theme-name--grey .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--grey .mdc-circular-progress__indeterminate-circle-graphic{stroke:#9e9e9e}.mdc-circular-progress.mdc-theme-name--blue-grey .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--blue-grey .mdc-circular-progress__indeterminate-circle-graphic{stroke:#607d8b}.mdc-circular-progress.mdc-theme-name--black .mdc-circular-progress__determinate-circle,.mdc-circular-progress.mdc-theme-name--black .mdc-circular-progress__indeterminate-circle-graphic{stroke:#313131}.mdc-circular-progress__circle-clipper{width:100%!important}.md-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;max-width:420px;padding:36px;margin:0 auto;position:relative;transition:opacity .15s cubic-bezier(0,0,.2,1),transform .3s cubic-bezier(0,0,.2,1);will-change:transform,opacity}@media screen and (max-width:600px){.md-empty-state{padding:36px 0}}.md-empty-state.md-rounded{max-width:auto;border-radius:50%}.md-empty-state.md-rounded .md-empty-state-container{padding:40px;position:absolute;top:0;right:0;bottom:0;left:0}.md-empty-state .md-button{margin:.5em 0 0}.md-empty-state-enter{opacity:0;transform:scale(.87)}.md-empty-state-enter .md-empty-state-container{opacity:0}.md-empty-state-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;transition:opacity .4s cubic-bezier(.4,0,.2,1);will-change:opacity}.md-empty-state-icon{width:160px;min-width:160px;height:160px;font-size:160px!important;margin:0}.md-empty-state-label{font-size:26px;font-weight:400;line-height:1.5;margin:26px 0}.md-empty-state-description{margin:1em 0;font-size:16px;line-height:1.5}.mdc-fab{display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow .28s cubic-bezier(.4,0,.2,1),opacity 15ms linear 30ms,transform .27s cubic-bezier(0,0,.2,1) 0ms}.mdc-fab .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-fab::-moz-focus-inner{padding:0;border:0}.mdc-fab.mdc-ripple-upgraded--background-focused,.mdc-fab:hover,.mdc-fab:not(.mdc-ripple-upgraded):focus{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mdc-fab .mdc-fab__focus-ring{position:absolute}.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__focus-ring,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__focus-ring{pointer-events:none;border:2px solid transparent;border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__focus-ring,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__focus-ring{border-color:CanvasText}}.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__focus-ring:after,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__focus-ring:after{content:"";border:2px solid transparent;border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__focus-ring:after,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__focus-ring:after{border-color:CanvasText}}.mdc-fab:active,.mdc-fab:focus:active{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mdc-fab:active,.mdc-fab:focus{outline:none}.mdc-fab:hover{cursor:pointer}.mdc-fab>svg{width:100%}.mdc-fab--mini{width:40px;height:40px}.mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size,.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height,2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight,500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing,.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration,none);text-decoration:var(--mdc-typography-button-text-decoration,none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform,uppercase);border-radius:24px;padding-left:20px;padding-right:20px;width:auto;max-width:100%;height:48px;line-height:normal}.mdc-fab--extended .mdc-fab__ripple{border-radius:24px}.mdc-fab--extended .mdc-fab__icon{margin-left:-8px;margin-right:12px}.mdc-fab--extended .mdc-fab__icon[dir=rtl],.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon,[dir=rtl] .mdc-fab--extended .mdc-fab__icon{margin-left:12px;margin-right:-8px}.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon[dir=rtl],[dir=rtl] .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon{margin-left:-8px;margin-right:12px}.mdc-fab--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-fab--touch .mdc-fab__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.mdc-fab:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-fab:before{border-color:CanvasText}}.mdc-fab__label{justify-content:flex-start;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;overflow-y:visible}.mdc-fab__icon{transition:transform .18s cubic-bezier(0,0,.2,1) 90ms;fill:currentColor;will-change:transform}.mdc-fab .mdc-fab__icon{display:inline-flex;align-items:center;justify-content:center}.mdc-fab--exited{transform:scale(0);opacity:0;transition:opacity 15ms linear .15s,transform .18s cubic-bezier(.4,0,1,1) 0ms}.mdc-fab--exited .mdc-fab__icon{transform:scale(0);transition:transform 135ms cubic-bezier(.4,0,1,1) 0ms}.mdc-fab{background-color:#018786;background-color:var(--mdc-theme-secondary,#018786);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mdc-fab .mdc-fab__icon{width:24px;height:24px;font-size:24px}.mdc-fab,.mdc-fab:disabled .mdc-fab__icon,.mdc-fab:disabled .mdc-fab__label,.mdc-fab:not(:disabled) .mdc-fab__icon,.mdc-fab:not(:disabled) .mdc-fab__label{color:#fff;color:var(--mdc-theme-on-secondary,#fff)}.mdc-fab:not(.mdc-fab--extended),.mdc-fab:not(.mdc-fab--extended) .mdc-fab__ripple{border-radius:50%}.mdc-fab{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-fab .mdc-fab__ripple:after,.mdc-fab .mdc-fab__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-fab .mdc-fab__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-fab .mdc-fab__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-fab.mdc-ripple-upgraded--unbounded .mdc-fab__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-fab.mdc-ripple-upgraded--foreground-activation .mdc-fab__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-fab.mdc-ripple-upgraded--foreground-deactivation .mdc-fab__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-fab .mdc-fab__ripple:after,.mdc-fab .mdc-fab__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-fab .mdc-fab__ripple:after,.mdc-fab .mdc-fab__ripple:before{background-color:#fff;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-secondary,#fff))}.mdc-fab.mdc-ripple-surface--hover .mdc-fab__ripple:before,.mdc-fab:hover .mdc-fab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__ripple:before,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-fab:not(.mdc-ripple-upgraded) .mdc-fab__ripple:after{transition:opacity .15s linear}.mdc-fab:not(.mdc-ripple-upgraded):active .mdc-fab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-fab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-fab .mdc-fab__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-fab{z-index:0}.mdc-fab .mdc-fab__ripple:after,.mdc-fab .mdc-fab__ripple:before{z-index:-1;z-index:var(--mdc-ripple-z-index,-1)}a.mdc-fab,a:active.mdc-fab,a:hover.mdc-fab,a:link.mdc-fab,a:visited.mdc-fab{text-decoration:inherit;font-weight:inherit}.mdc-fab--absolute{position:absolute;bottom:1rem;left:auto;right:1rem}.mdc-fab--absolute[dir=rtl],[dir=rtl] .mdc-fab--absolute{left:1rem;right:auto}.mdc-fab--fixed{position:fixed;bottom:1rem;left:auto;right:1rem;z-index:4}.mdc-fab--fixed[dir=rtl],[dir=rtl] .mdc-fab--fixed{left:1rem;right:auto}@media(min-width:1024px){.mdc-fab--absolute{bottom:3rem;left:auto;right:5rem}.mdc-fab--absolute[dir=rtl],[dir=rtl] .mdc-fab--absolute{left:5rem;right:auto}.mdc-fab--fixed{bottom:3rem;left:auto;right:5rem}.mdc-fab--fixed[dir=rtl],[dir=rtl] .mdc-fab--fixed{left:5rem;right:auto}}.mdc-theme-name--red.mdc-fab{background-color:#f44336}.mdc-theme-name--pink.mdc-fab{background-color:#e91e63}.mdc-theme-name--purple.mdc-fab{background-color:#9c27b0}.mdc-theme-name--deep-purple.mdc-fab{background-color:#673ab7}.mdc-theme-name--indigo.mdc-fab{background-color:#3f51b5}.mdc-theme-name--blue.mdc-fab{background-color:#2196f3}.mdc-theme-name--light-blue.mdc-fab{background-color:#03a9f4}.mdc-theme-name--cyan.mdc-fab{background-color:#00bcd4}.mdc-theme-name--teal.mdc-fab{background-color:#009688}.mdc-theme-name--green.mdc-fab{background-color:#4caf50}.mdc-theme-name--light-green.mdc-fab{background-color:#8bc34a}.mdc-theme-name--lime.mdc-fab{background-color:#cddc39}.mdc-theme-name--yellow.mdc-fab{background-color:#ffeb3b}.mdc-theme-name--amber.mdc-fab{background-color:#ffc107}.mdc-theme-name--orange.mdc-fab{background-color:#ff9800}.mdc-theme-name--deep-orange.mdc-fab{background-color:#ff5722}.mdc-theme-name--brown.mdc-fab{background-color:#795548}.mdc-theme-name--grey.mdc-fab{background-color:#9e9e9e}.mdc-theme-name--blue-grey.mdc-fab{background-color:#607d8b}.mdc-theme-name--black.mdc-fab{background-color:#313131}.foxy-fieldset{border:0 none;margin:.2rem 0 1.2rem;padding:1rem 0 0}.foxy-fieldset .md-subheading .material-icons{color:rgba(0,0,0,.54);margin-right:8px;vertical-align:text-bottom}.foxy-fieldset legend{float:left}.foxy-fieldset legend span{display:block}.foxy-fieldset legend+*{clear:both}.foxy-fieldset-helptext{font-size:.875rem;margin-bottom:1rem;opacity:.6;padding:0}.has-icon .foxy-fieldset-helptext{padding-left:2.25rem}.foxy-list-options__checkbox-group,.foxy-list-options__radio-group{padding:0 0 0 .5rem}.has-icon .foxy-list-options__checkbox-group,.has-icon .foxy-list-options__radio-group{padding-left:1.875rem}.foxy-list-options__checkbox-group .mdc-form-field,.foxy-list-options__radio-group .mdc-form-field{display:flex}.foxy-list-options__checkbox-group .mdc-form-field label,.foxy-list-options__radio-group .mdc-form-field label,.mdc-form-field>label{word-break:break-all}.mdc-fieldset--required .foxy-fieldset-legend:after{content:"*"}.mdc-fieldset--invalid .foxy-fieldset-helptext,.mdc-fieldset--invalid legend{color:var(--mdc-theme-error,#b00020);opacity:1}.md-icon.material-icons.mdc-theme-name--default{color:#558b2f}.material-icons.mdc-theme-name--red{color:#f44336}.material-icons.mdc-theme-name--pink{color:#e91e63}.material-icons.mdc-theme-name--purple{color:#9c27b0}.material-icons.mdc-theme-name--deep-purple{color:#673ab7}.material-icons.mdc-theme-name--indigo{color:#3f51b5}.material-icons.mdc-theme-name--blue{color:#2196f3}.material-icons.mdc-theme-name--light-blue{color:#03a9f4}.material-icons.mdc-theme-name--cyan{color:#00bcd4}.material-icons.mdc-theme-name--teal{color:#009688}.material-icons.mdc-theme-name--green{color:#4caf50}.material-icons.mdc-theme-name--light-green{color:#8bc34a}.material-icons.mdc-theme-name--lime{color:#cddc39}.material-icons.mdc-theme-name--yellow{color:#ffeb3b}.material-icons.mdc-theme-name--amber{color:#ffc107}.material-icons.mdc-theme-name--orange{color:#ff9800}.material-icons.mdc-theme-name--deep-orange{color:#ff5722}.material-icons.mdc-theme-name--brown{color:#795548}.material-icons.mdc-theme-name--grey{color:#9e9e9e}.material-icons.mdc-theme-name--blue-grey{color:#607d8b}.material-icons.mdc-theme-name--black{color:#313131}.md-icon.material-icons.foxy-warn{color:#d84315!important}.md-icon.md-size-2x{width:48px;min-width:48px;height:48px;font-size:48px!important}.md-icon.md-size-3x{width:72px;min-width:72px;height:72px;font-size:72px!important}.md-icon.md-size-4x{width:96px;min-width:96px;height:96px;font-size:96px!important}.md-icon.md-size-5x{width:120px;min-width:120px;height:120px;font-size:120px!important}.mdc-icon-button{font-size:24px;width:48px;height:48px;padding:12px}.mdc-icon-button.mdc-icon-button--reduced-size{width:40px;height:40px;padding:8px}.mdc-icon-button.mdc-icon-button--reduced-size.mdc-icon-button--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-icon-button:disabled{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-disabled-on-light,rgba(0,0,0,.38))}.mdc-icon-button img,.mdc-icon-button svg{width:24px;height:24px}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--touch{margin-top:0;margin-bottom:0}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-icon-button .mdc-icon-button__ripple:after,.mdc-icon-button .mdc-icon-button__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-icon-button .mdc-icon-button__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-icon-button .mdc-icon-button__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-icon-button.mdc-ripple-upgraded--unbounded .mdc-icon-button__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-icon-button.mdc-ripple-upgraded--foreground-activation .mdc-icon-button__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-icon-button.mdc-ripple-upgraded--foreground-deactivation .mdc-icon-button__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-icon-button .mdc-icon-button__ripple:after,.mdc-icon-button .mdc-icon-button__ripple:before{top:0;left:0;width:100%;height:100%}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple:after,.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple:before{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-icon-button .mdc-icon-button__ripple:after,.mdc-icon-button .mdc-icon-button__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}.mdc-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-icon-button:hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-icon-button .mdc-icon-button__ripple{pointer-events:none;z-index:1}.mdc-theme-name--default.mdc-icon-button:not(:disabled){color:#558b2f}.mdc-theme-name--default.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--default.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#558b2f;background-color:var(--mdc-ripple-color,#558b2f)}.mdc-theme-name--default.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--default.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--default.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--default.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--default.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--default.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--default.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--default.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#558b2f}.mdc-theme-name--default.mdc-icon-button:not(:disabled).mdc-button--raised{background-color:#558b2f;border-radius:50%}.mdc-theme-name--default.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:#fff}.mdc-theme-name--red.mdc-icon-button:not(:disabled){color:#f44336}.mdc-theme-name--red.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--red.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--red.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--red.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--red.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#f44336}.mdc-theme-name--red.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--red.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--pink.mdc-icon-button:not(:disabled){color:#e91e63}.mdc-theme-name--pink.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--pink.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--pink.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--pink.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#e91e63}.mdc-theme-name--pink.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--pink.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--purple.mdc-icon-button:not(:disabled){color:#9c27b0}.mdc-theme-name--purple.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--purple.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--purple.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#9c27b0}.mdc-theme-name--purple.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--purple.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled){color:#673ab7}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#673ab7}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--deep-purple.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled){color:#3f51b5}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--indigo.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--indigo.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--indigo.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#3f51b5}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--indigo.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--blue.mdc-icon-button:not(:disabled){color:#2196f3}.mdc-theme-name--blue.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--blue.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--blue.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#2196f3}.mdc-theme-name--blue.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--blue.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled){color:#03a9f4}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#03a9f4}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--light-blue.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled){color:#00bcd4}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--cyan.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--cyan.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--cyan.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#00bcd4}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--cyan.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--teal.mdc-icon-button:not(:disabled){color:#009688}.mdc-theme-name--teal.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--teal.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--teal.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--teal.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--teal.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#009688}.mdc-theme-name--teal.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--teal.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--green.mdc-icon-button:not(:disabled){color:#4caf50}.mdc-theme-name--green.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--green.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--green.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--green.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#4caf50}.mdc-theme-name--green.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--green.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled){color:#8bc34a}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--light-green.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--light-green.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--light-green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#8bc34a}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--light-green.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--lime.mdc-icon-button:not(:disabled){color:#cddc39}.mdc-theme-name--lime.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--lime.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--lime.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--lime.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#cddc39}.mdc-theme-name--lime.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--lime.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled){color:#ffeb3b}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--yellow.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--yellow.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--yellow.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#ffeb3b}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--yellow.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--amber.mdc-icon-button:not(:disabled){color:#ffc107}.mdc-theme-name--amber.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--amber.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--amber.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--amber.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#ffc107}.mdc-theme-name--amber.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--amber.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--orange.mdc-icon-button:not(:disabled){color:#ff9800}.mdc-theme-name--orange.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--orange.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--orange.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#ff9800}.mdc-theme-name--orange.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--orange.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled){color:#ff5722}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#ff5722}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--deep-orange.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--brown.mdc-icon-button:not(:disabled){color:#795548}.mdc-theme-name--brown.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--brown.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--brown.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--brown.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#795548}.mdc-theme-name--brown.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--brown.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--grey.mdc-icon-button:not(:disabled){color:#9e9e9e}.mdc-theme-name--grey.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--grey.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--grey.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--grey.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#9e9e9e}.mdc-theme-name--grey.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--grey.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled){color:#607d8b}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#607d8b}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--blue-grey.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-theme-name--black.mdc-icon-button:not(:disabled){color:#313131}.mdc-theme-name--black.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:after,.mdc-theme-name--black.mdc-icon-button:not(:disabled) .mdc-icon-button__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black.mdc-icon-button:not(:disabled).mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-theme-name--black.mdc-icon-button:not(:disabled):hover .mdc-icon-button__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black.mdc-icon-button:not(:disabled).mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-theme-name--black.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black.mdc-icon-button:not(:disabled):not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black.mdc-icon-button:not(:disabled).mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black.mdc-icon-button:not(:disabled) .material-icons:not(:disabled){color:#313131}.mdc-theme-name--black.mdc-icon-button:not(:disabled).mdc-button--raised{border-radius:50%;--mdc-theme-primary:$primary}.mdc-theme-name--black.mdc-icon-button:not(:disabled).mdc-button--raised .material-icons:not(:disabled){color:text-contrast(var(--mdc-theme-primary))}.mdc-icon-button{vertical-align:middle}.mdc-icon-button.foxy-smaller{width:38px;height:38px;padding:7px}.mdc-icon-button.foxy-small{width:30px;height:30px;padding:3px}.md-input-container{width:100%;min-height:48px;margin:.2rem 0 1.2rem;padding-top:.5rem;display:flex;position:relative}.md-input-container:after{height:1px;right:0;bottom:0;background-color:rgba(0,0,0,.12);content:" "}.md-input-container.no-after:after{height:0;background-color:transparent;content:none}.md-input-container label,.md-input-container:after{position:absolute;left:0;transition:all .4s cubic-bezier(.25,.8,.25,1)}.md-input-container label{top:23px;pointer-events:none;transition-duration:.3s;color:rgba(0,0,0,.54);font-size:16px;line-height:20px}.md-input-container input,.md-input-container textarea{width:100%;height:32px;padding:0;display:block;flex:1;border:none;background:none;transition:all .4s cubic-bezier(.25,.8,.25,1);transition-property:font-size;color:rgba(0,0,0,.54);font-family:inherit;font-size:1px;line-height:32px}.md-input-container .md-helper-text{bottom:-22px;color:#9e9e9e;font-size:12px;display:block;height:20px;left:0;opacity:1;position:absolute;transition:opacity .4s cubic-bezier(.25,.8,.25,1);padding-left:16px}.md-input-container input:focus,.md-input-container textarea:focus{outline:none}.md-input-container input::-webkit-input-placeholder,.md-input-container textarea::-webkit-input-placeholder{color:rgba(0,0,0,.54);font-size:16px;text-shadow:none;-webkit-text-fill-color:initial}.md-input-container input~.md-icon:not(.md-icon-delete),.md-input-container textarea~.md-icon:not(.md-icon-delete){margin-left:12px}.md-input-container input~.md-icon:not(.md-icon-delete):after,.md-input-container textarea~.md-icon:not(.md-icon-delete):after{right:0;left:auto}.md-input-container textarea{min-height:32px;max-height:230px;padding:5px 0;resize:none;line-height:1.3em}.md-input-container .md-count,.md-input-container .md-error{height:20px;position:absolute;bottom:-22px;font-size:12px}.md-input-container .md-error{display:block!important;left:0;opacity:0;transform:translate3d(0,-8px,0);transition:all .3s cubic-bezier(.55,0,.55,.2)}.md-input-container .md-count{right:0}.md-input-container .md-icon:not(.md-icon-delete){margin:4px auto;color:rgba(0,0,0,.54);transition:all .4s cubic-bezier(.25,.8,.25,1)}.md-input-container .md-icon:not(.md-icon-delete):after{width:36px;height:2px;position:absolute;left:0;bottom:0;z-index:2;content:""}.md-input-container .md-icon:not(.md-icon-delete)~label{left:36px}.md-input-container .md-icon:not(.md-icon-delete)~.md-file,.md-input-container .md-icon:not(.md-icon-delete)~.md-input,.md-input-container .md-icon:not(.md-icon-delete)~.md-textarea{margin-left:12px}.md-input-container .md-autocomplete,.md-input-container .md-autocomplete .md-menu,.md-input-container .md-autocomplete .md-menu .md-input{width:100%}.md-theme-default.md-input-container .md-autocomplete .md-icon:not(.md-icon-search):after{height:0}.md-input-container.md-input-placeholder label{pointer-events:auto;top:10px;opacity:0;font-size:12px}.md-input-container.md-input-placeholder input,.md-input-container.md-input-placeholder textarea{font-size:16px}.md-input-container.md-has-value label,.md-input-container.md-input-focused label{pointer-events:auto;top:0;opacity:1;font-size:12px}.md-input-container.md-has-value input,.md-input-container.md-has-value textarea,.md-input-container.md-input-focused input,.md-input-container.md-input-focused textarea{font-size:16px}.md-input-container.md-has-value input,.md-input-container.md-has-value textarea{color:rgba(0,0,0,.87)}.md-input-container.md-input-inline label{pointer-events:none}.md-input-container.md-input-inline.md-input-focused label{top:23px;font-size:16px}.md-input-container.md-input-inline.md-has-value label{opacity:0}.md-input-container.md-input-disabled:after{background:0 100% repeat-x;background-image:linear-gradient(90deg,rgba(0,0,0,.38),rgba(0,0,0,.38) 33%,transparent 0);background-size:4px 1px}.md-input-container.md-input-disabled input,.md-input-container.md-input-disabled label,.md-input-container.md-input-disabled textarea{color:rgba(0,0,0,.38)}.md-input-container.md-has-password.md-input-focused .md-toggle-password{color:rgba(0,0,0,.54)}.md-input-container.md-has-password .md-toggle-password{margin:0;position:absolute;right:0;bottom:-2px;color:rgba(0,0,0,.38)}.md-input-container.md-has-password .md-toggle-password .md-ink-ripple{color:rgba(0,0,0,.87)}.md-input-container.md-clearable.md-input-focused .md-clear-input{color:rgba(0,0,0,.54)}.md-input-container.md-clearable .md-clear-input{margin:0;position:absolute;right:0;bottom:-2px;color:rgba(0,0,0,.38)}.md-input-container.md-clearable .md-clear-input .md-ink-ripple{color:rgba(0,0,0,.87)}.md-input-container.md-input-invalid .md-error{opacity:1;transform:translateZ(0)}.md-input-container.md-input-required label:after{top:2px;right:0;transform:translateX(calc(100% + 2px));content:"*";font-size:12px;line-height:1em;vertical-align:top}.md-input-container.md-has-select:hover .md-select:not(.md-disabled):after{color:rgba(0,0,0,.87)}.md-layout{display:flex;flex-direction:row;flex-wrap:wrap;flex:1}.md-row{flex-direction:row}.md-column{flex-direction:column}.md-layout.md-container{width:100%;max-width:1200px}.md-layout.md-container.md-centered{margin:0 auto}.md-align-start{justify-content:flex-start}.md-align-center{justify-content:center}.md-align-end{justify-content:flex-end}.md-vertical-align-start{align-items:flex-start;align-content:flex-start}.md-vertical-align-center{align-items:center;align-content:center}.md-vertical-align-end{align-items:flex-end;align-content:flex-end}.md-vertical-align-stretch{align-items:stretch;align-content:stretch}.md-gutter:not(.md-column){margin-right:-12px;margin-left:-12px}.md-gutter:not(.md-column)>.md-layout{padding-right:12px;padding-left:12px}.md-gutter .md-column{margin-top:-12px;margin-bottom:-12px}.md-gutter .md-column>.md-layout{padding-top:12px;padding-bottom:12px}.md-gutter-8:not(.md-column){margin-right:-4px;margin-left:-4px}.md-gutter-8:not(.md-column)>.md-layout{padding-right:4px;padding-left:4px}.md-gutter-8 .md-column{margin-top:-4px;margin-bottom:-4px}.md-gutter-8 .md-column>.md-layout{padding-top:4px;padding-bottom:4px}.md-gutter-16:not(.md-column){margin-right:-8px;margin-left:-8px}.md-gutter-16:not(.md-column)>.md-layout{padding-right:8px;padding-left:8px}.md-gutter-16 .md-column{margin-top:-8px;margin-bottom:-8px}.md-gutter-16 .md-column>.md-layout{padding-top:8px;padding-bottom:8px}.md-gutter-24:not(.md-column){margin-right:-12px;margin-left:-12px}.md-gutter-24:not(.md-column)>.md-layout{padding-right:12px;padding-left:12px}.md-gutter-24 .md-column{margin-top:-12px;margin-bottom:-12px}.md-gutter-24 .md-column>.md-layout{padding-top:12px;padding-bottom:12px}.md-gutter-40:not(.md-column){margin-right:-20px;margin-left:-20px}.md-gutter-40:not(.md-column)>.md-layout{padding-right:20px;padding-left:20px}.md-gutter-40 .md-column{margin-top:-20px;margin-bottom:-20px}.md-gutter-40 .md-column>.md-layout{padding-top:20px;padding-bottom:20px}.md-layout.md-flex{flex:1 1}.md-layout.md-flex-33{min-width:33.33333%;flex:0 1 33.33333%}.md-layout.md-flex-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-33{margin-left:33.33333%}.md-flex-offset-66{margin-left:66.66666%}.md-layout.md-flex-5{min-width:5%;flex:0 1 5%}.md-flex-offset-5{margin-left:5%}.md-layout.md-flex-10{min-width:10%;flex:0 1 10%}.md-flex-offset-10{margin-left:10%}.md-layout.md-flex-15{min-width:15%;flex:0 1 15%}.md-flex-offset-15{margin-left:15%}.md-layout.md-flex-20{min-width:20%;flex:0 1 20%}.md-flex-offset-20{margin-left:20%}.md-layout.md-flex-25{min-width:25%;flex:0 1 25%}.md-flex-offset-25{margin-left:25%}.md-layout.md-flex-30{min-width:30%;flex:0 1 30%}.md-flex-offset-30{margin-left:30%}.md-layout.md-flex-35{min-width:35%;flex:0 1 35%}.md-flex-offset-35{margin-left:35%}.md-layout.md-flex-40{min-width:40%;flex:0 1 40%}.md-flex-offset-40{margin-left:40%}.md-layout.md-flex-45{min-width:45%;flex:0 1 45%}.md-flex-offset-45{margin-left:45%}.md-layout.md-flex-50{min-width:50%;flex:0 1 50%}.md-flex-offset-50{margin-left:50%}.md-layout.md-flex-55{min-width:55%;flex:0 1 55%}.md-flex-offset-55{margin-left:55%}.md-layout.md-flex-60{min-width:60%;flex:0 1 60%}.md-flex-offset-60{margin-left:60%}.md-layout.md-flex-65{min-width:65%;flex:0 1 65%}.md-flex-offset-65{margin-left:65%}.md-layout.md-flex-70{min-width:70%;flex:0 1 70%}.md-flex-offset-70{margin-left:70%}.md-layout.md-flex-75{min-width:75%;flex:0 1 75%}.md-flex-offset-75{margin-left:75%}.md-layout.md-flex-80{min-width:80%;flex:0 1 80%}.md-flex-offset-80{margin-left:80%}.md-layout.md-flex-85{min-width:85%;flex:0 1 85%}.md-flex-offset-85{margin-left:85%}.md-layout.md-flex-90{min-width:90%;flex:0 1 90%}.md-flex-offset-90{margin-left:90%}.md-layout.md-flex-95{min-width:95%;flex:0 1 95%}.md-flex-offset-95{margin-left:95%}.md-layout.md-flex-100{min-width:100%;flex:0 1 100%}.md-flex-offset-100{margin-left:100%}@media(max-width:944px){.md-gutter:not(.md-column){margin-right:-8px;margin-left:-8px}.md-gutter:not(.md-column)>.md-layout{padding-right:8px;padding-left:8px}.md-gutter .md-column{margin-top:-8px;margin-bottom:-8px}.md-gutter .md-column>.md-layout{padding-top:8px;padding-bottom:8px}.md-row-small{flex-direction:row}.md-column-small{flex-direction:column}.md-flex-small{flex:1 1}.md-flex-small-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-small-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-small-33{margin-left:33.33333%}.md-flex-offset-small-66{margin-left:66.66666%}.md-flex-small-5{min-width:5%;flex:0 1 5%}.md-flex-offset-small-5{margin-left:5%}.md-flex-small-10{min-width:10%;flex:0 1 10%}.md-flex-offset-small-10{margin-left:10%}.md-flex-small-15{min-width:15%;flex:0 1 15%}.md-flex-offset-small-15{margin-left:15%}.md-flex-small-20{min-width:20%;flex:0 1 20%}.md-flex-offset-small-20{margin-left:20%}.md-flex-small-25{min-width:25%;flex:0 1 25%}.md-flex-offset-small-25{margin-left:25%}.md-flex-small-30{min-width:30%;flex:0 1 30%}.md-flex-offset-small-30{margin-left:30%}.md-flex-small-35{min-width:35%;flex:0 1 35%}.md-flex-offset-small-35{margin-left:35%}.md-flex-small-40{min-width:40%;flex:0 1 40%}.md-flex-offset-small-40{margin-left:40%}.md-flex-small-45{min-width:45%;flex:0 1 45%}.md-flex-offset-small-45{margin-left:45%}.md-flex-small-50{min-width:50%;flex:0 1 50%}.md-flex-offset-small-50{margin-left:50%}.md-flex-small-55{min-width:55%;flex:0 1 55%}.md-flex-offset-small-55{margin-left:55%}.md-flex-small-60{min-width:60%;flex:0 1 60%}.md-flex-offset-small-60{margin-left:60%}.md-flex-small-65{min-width:65%;flex:0 1 65%}.md-flex-offset-small-65{margin-left:65%}.md-flex-small-70{min-width:70%;flex:0 1 70%}.md-flex-offset-small-70{margin-left:70%}.md-flex-small-75{min-width:75%;flex:0 1 75%}.md-flex-offset-small-75{margin-left:75%}.md-flex-small-80{min-width:80%;flex:0 1 80%}.md-flex-offset-small-80{margin-left:80%}.md-flex-small-85{min-width:85%;flex:0 1 85%}.md-flex-offset-small-85{margin-left:85%}.md-flex-small-90{min-width:90%;flex:0 1 90%}.md-flex-offset-small-90{margin-left:90%}.md-flex-small-95{min-width:95%;flex:0 1 95%}.md-flex-offset-small-95{margin-left:95%}.md-flex-small-100{min-width:100%;flex:0 1 100%}.md-flex-offset-small-100{margin-left:100%}.md-align-small-start{justify-content:flex-start}.md-align-small-center{justify-content:center}.md-align-small-end{justify-content:flex-end}.md-hide-small{display:none}}@media(min-width:1904px){.md-row-xlarge{flex-direction:row}.md-column-xlarge{flex-direction:column}.md-flex-xlarge{flex:1 1}.md-flex-xlarge-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-xlarge-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-xlarge-33{margin-left:33.33333%}.md-flex-offset-xlarge-66{margin-left:66.66666%}.md-flex-xlarge-5{min-width:5%;flex:0 1 5%}.md-flex-offset-xlarge-5{margin-left:5%}.md-flex-xlarge-10{min-width:10%;flex:0 1 10%}.md-flex-offset-xlarge-10{margin-left:10%}.md-flex-xlarge-15{min-width:15%;flex:0 1 15%}.md-flex-offset-xlarge-15{margin-left:15%}.md-flex-xlarge-20{min-width:20%;flex:0 1 20%}.md-flex-offset-xlarge-20{margin-left:20%}.md-flex-xlarge-25{min-width:25%;flex:0 1 25%}.md-flex-offset-xlarge-25{margin-left:25%}.md-flex-xlarge-30{min-width:30%;flex:0 1 30%}.md-flex-offset-xlarge-30{margin-left:30%}.md-flex-xlarge-35{min-width:35%;flex:0 1 35%}.md-flex-offset-xlarge-35{margin-left:35%}.md-flex-xlarge-40{min-width:40%;flex:0 1 40%}.md-flex-offset-xlarge-40{margin-left:40%}.md-flex-xlarge-45{min-width:45%;flex:0 1 45%}.md-flex-offset-xlarge-45{margin-left:45%}.md-flex-xlarge-50{min-width:50%;flex:0 1 50%}.md-flex-offset-xlarge-50{margin-left:50%}.md-flex-xlarge-55{min-width:55%;flex:0 1 55%}.md-flex-offset-xlarge-55{margin-left:55%}.md-flex-xlarge-60{min-width:60%;flex:0 1 60%}.md-flex-offset-xlarge-60{margin-left:60%}.md-flex-xlarge-65{min-width:65%;flex:0 1 65%}.md-flex-offset-xlarge-65{margin-left:65%}.md-flex-xlarge-70{min-width:70%;flex:0 1 70%}.md-flex-offset-xlarge-70{margin-left:70%}.md-flex-xlarge-75{min-width:75%;flex:0 1 75%}.md-flex-offset-xlarge-75{margin-left:75%}.md-flex-xlarge-80{min-width:80%;flex:0 1 80%}.md-flex-offset-xlarge-80{margin-left:80%}.md-flex-xlarge-85{min-width:85%;flex:0 1 85%}.md-flex-offset-xlarge-85{margin-left:85%}.md-flex-xlarge-90{min-width:90%;flex:0 1 90%}.md-flex-offset-xlarge-90{margin-left:90%}.md-flex-xlarge-95{min-width:95%;flex:0 1 95%}.md-flex-offset-xlarge-95{margin-left:95%}.md-flex-xlarge-100{min-width:100%;flex:0 1 100%}.md-flex-offset-xlarge-100{margin-left:100%}.md-align-xlarge-start{justify-content:flex-start}.md-align-xlarge-center{justify-content:center}.md-align-xlarge-end{justify-content:flex-end}.md-hide-xlarge{display:none}}@media(max-width:1903px){.md-row-large{flex-direction:row}.md-column-large{flex-direction:column}.md-flex-large{flex:1 1}.md-flex-large-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-large-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-large-33{margin-left:33.33333%}.md-flex-offset-large-66{margin-left:66.66666%}.md-flex-large-5{min-width:5%;flex:0 1 5%}.md-flex-offset-large-5{margin-left:5%}.md-flex-large-10{min-width:10%;flex:0 1 10%}.md-flex-offset-large-10{margin-left:10%}.md-flex-large-15{min-width:15%;flex:0 1 15%}.md-flex-offset-large-15{margin-left:15%}.md-flex-large-20{min-width:20%;flex:0 1 20%}.md-flex-offset-large-20{margin-left:20%}.md-flex-large-25{min-width:25%;flex:0 1 25%}.md-flex-offset-large-25{margin-left:25%}.md-flex-large-30{min-width:30%;flex:0 1 30%}.md-flex-offset-large-30{margin-left:30%}.md-flex-large-35{min-width:35%;flex:0 1 35%}.md-flex-offset-large-35{margin-left:35%}.md-flex-large-40{min-width:40%;flex:0 1 40%}.md-flex-offset-large-40{margin-left:40%}.md-flex-large-45{min-width:45%;flex:0 1 45%}.md-flex-offset-large-45{margin-left:45%}.md-flex-large-50{min-width:50%;flex:0 1 50%}.md-flex-offset-large-50{margin-left:50%}.md-flex-large-55{min-width:55%;flex:0 1 55%}.md-flex-offset-large-55{margin-left:55%}.md-flex-large-60{min-width:60%;flex:0 1 60%}.md-flex-offset-large-60{margin-left:60%}.md-flex-large-65{min-width:65%;flex:0 1 65%}.md-flex-offset-large-65{margin-left:65%}.md-flex-large-70{min-width:70%;flex:0 1 70%}.md-flex-offset-large-70{margin-left:70%}.md-flex-large-75{min-width:75%;flex:0 1 75%}.md-flex-offset-large-75{margin-left:75%}.md-flex-large-80{min-width:80%;flex:0 1 80%}.md-flex-offset-large-80{margin-left:80%}.md-flex-large-85{min-width:85%;flex:0 1 85%}.md-flex-offset-large-85{margin-left:85%}.md-flex-large-90{min-width:90%;flex:0 1 90%}.md-flex-offset-large-90{margin-left:90%}.md-flex-large-95{min-width:95%;flex:0 1 95%}.md-flex-offset-large-95{margin-left:95%}.md-flex-large-100{min-width:100%;flex:0 1 100%}.md-flex-offset-large-100{margin-left:100%}.md-align-large-start{justify-content:flex-start}.md-align-large-center{justify-content:center}.md-align-large-end{justify-content:flex-end}.md-hide-large{display:none}}@media(max-width:1264px){.md-row-medium{flex-direction:row}.md-column-medium{flex-direction:column}.md-flex-medium{flex:1 1}.md-flex-medium-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-medium-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-medium-33{margin-left:33.33333%}.md-flex-offset-medium-66{margin-left:66.66666%}.md-flex-medium-5{min-width:5%;flex:0 1 5%}.md-flex-offset-medium-5{margin-left:5%}.md-flex-medium-10{min-width:10%;flex:0 1 10%}.md-flex-offset-medium-10{margin-left:10%}.md-flex-medium-15{min-width:15%;flex:0 1 15%}.md-flex-offset-medium-15{margin-left:15%}.md-flex-medium-20{min-width:20%;flex:0 1 20%}.md-flex-offset-medium-20{margin-left:20%}.md-flex-medium-25{min-width:25%;flex:0 1 25%}.md-flex-offset-medium-25{margin-left:25%}.md-flex-medium-30{min-width:30%;flex:0 1 30%}.md-flex-offset-medium-30{margin-left:30%}.md-flex-medium-35{min-width:35%;flex:0 1 35%}.md-flex-offset-medium-35{margin-left:35%}.md-flex-medium-40{min-width:40%;flex:0 1 40%}.md-flex-offset-medium-40{margin-left:40%}.md-flex-medium-45{min-width:45%;flex:0 1 45%}.md-flex-offset-medium-45{margin-left:45%}.md-flex-medium-50{min-width:50%;flex:0 1 50%}.md-flex-offset-medium-50{margin-left:50%}.md-flex-medium-55{min-width:55%;flex:0 1 55%}.md-flex-offset-medium-55{margin-left:55%}.md-flex-medium-60{min-width:60%;flex:0 1 60%}.md-flex-offset-medium-60{margin-left:60%}.md-flex-medium-65{min-width:65%;flex:0 1 65%}.md-flex-offset-medium-65{margin-left:65%}.md-flex-medium-70{min-width:70%;flex:0 1 70%}.md-flex-offset-medium-70{margin-left:70%}.md-flex-medium-75{min-width:75%;flex:0 1 75%}.md-flex-offset-medium-75{margin-left:75%}.md-flex-medium-80{min-width:80%;flex:0 1 80%}.md-flex-offset-medium-80{margin-left:80%}.md-flex-medium-85{min-width:85%;flex:0 1 85%}.md-flex-offset-medium-85{margin-left:85%}.md-flex-medium-90{min-width:90%;flex:0 1 90%}.md-flex-offset-medium-90{margin-left:90%}.md-flex-medium-95{min-width:95%;flex:0 1 95%}.md-flex-offset-medium-95{margin-left:95%}.md-flex-medium-100{min-width:100%;flex:0 1 100%}.md-flex-offset-medium-100{margin-left:100%}.md-align-medium-start{justify-content:flex-start}.md-align-medium-center{justify-content:center}.md-align-medium-end{justify-content:flex-end}.md-hide-medium{display:none}}@media(max-width:600px){.md-row-xsmall{flex-direction:row}.md-column-xsmall{flex-direction:column}.md-flex-xsmall{flex:1 1}.md-flex-xsmall-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-xsmall-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-xsmall-33{margin-left:33.33333%}.md-flex-offset-xsmall-66{margin-left:66.66666%}.md-flex-xsmall-5{min-width:5%;flex:0 1 5%}.md-flex-offset-xsmall-5{margin-left:5%}.md-flex-xsmall-10{min-width:10%;flex:0 1 10%}.md-flex-offset-xsmall-10{margin-left:10%}.md-flex-xsmall-15{min-width:15%;flex:0 1 15%}.md-flex-offset-xsmall-15{margin-left:15%}.md-flex-xsmall-20{min-width:20%;flex:0 1 20%}.md-flex-offset-xsmall-20{margin-left:20%}.md-flex-xsmall-25{min-width:25%;flex:0 1 25%}.md-flex-offset-xsmall-25{margin-left:25%}.md-flex-xsmall-30{min-width:30%;flex:0 1 30%}.md-flex-offset-xsmall-30{margin-left:30%}.md-flex-xsmall-35{min-width:35%;flex:0 1 35%}.md-flex-offset-xsmall-35{margin-left:35%}.md-flex-xsmall-40{min-width:40%;flex:0 1 40%}.md-flex-offset-xsmall-40{margin-left:40%}.md-flex-xsmall-45{min-width:45%;flex:0 1 45%}.md-flex-offset-xsmall-45{margin-left:45%}.md-flex-xsmall-50{min-width:50%;flex:0 1 50%}.md-flex-offset-xsmall-50{margin-left:50%}.md-flex-xsmall-55{min-width:55%;flex:0 1 55%}.md-flex-offset-xsmall-55{margin-left:55%}.md-flex-xsmall-60{min-width:60%;flex:0 1 60%}.md-flex-offset-xsmall-60{margin-left:60%}.md-flex-xsmall-65{min-width:65%;flex:0 1 65%}.md-flex-offset-xsmall-65{margin-left:65%}.md-flex-xsmall-70{min-width:70%;flex:0 1 70%}.md-flex-offset-xsmall-70{margin-left:70%}.md-flex-xsmall-75{min-width:75%;flex:0 1 75%}.md-flex-offset-xsmall-75{margin-left:75%}.md-flex-xsmall-80{min-width:80%;flex:0 1 80%}.md-flex-offset-xsmall-80{margin-left:80%}.md-flex-xsmall-85{min-width:85%;flex:0 1 85%}.md-flex-offset-xsmall-85{margin-left:85%}.md-flex-xsmall-90{min-width:90%;flex:0 1 90%}.md-flex-offset-xsmall-90{margin-left:90%}.md-flex-xsmall-95{min-width:95%;flex:0 1 95%}.md-flex-offset-xsmall-95{margin-left:95%}.md-flex-xsmall-100{min-width:100%;flex:0 1 100%}.md-flex-offset-xsmall-100{margin-left:100%}.md-align-xsmall-start{justify-content:flex-start}.md-align-xsmall-center{justify-content:center}.md-align-xsmall-end{justify-content:flex-end}.md-hide-xsmall{display:none}}@media(min-width:1265px){.md-row-large-and-up{flex-direction:row}.md-column-large-and-up{flex-direction:column}.md-flex-large-and-up{flex:1 1}.md-flex-large-and-up-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-large-and-up-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-large-and-up-33{margin-left:33.33333%}.md-flex-offset-large-and-up-66{margin-left:66.66666%}.md-flex-large-and-up-5{min-width:5%;flex:0 1 5%}.md-flex-offset-large-and-up-5{margin-left:5%}.md-flex-large-and-up-10{min-width:10%;flex:0 1 10%}.md-flex-offset-large-and-up-10{margin-left:10%}.md-flex-large-and-up-15{min-width:15%;flex:0 1 15%}.md-flex-offset-large-and-up-15{margin-left:15%}.md-flex-large-and-up-20{min-width:20%;flex:0 1 20%}.md-flex-offset-large-and-up-20{margin-left:20%}.md-flex-large-and-up-25{min-width:25%;flex:0 1 25%}.md-flex-offset-large-and-up-25{margin-left:25%}.md-flex-large-and-up-30{min-width:30%;flex:0 1 30%}.md-flex-offset-large-and-up-30{margin-left:30%}.md-flex-large-and-up-35{min-width:35%;flex:0 1 35%}.md-flex-offset-large-and-up-35{margin-left:35%}.md-flex-large-and-up-40{min-width:40%;flex:0 1 40%}.md-flex-offset-large-and-up-40{margin-left:40%}.md-flex-large-and-up-45{min-width:45%;flex:0 1 45%}.md-flex-offset-large-and-up-45{margin-left:45%}.md-flex-large-and-up-50{min-width:50%;flex:0 1 50%}.md-flex-offset-large-and-up-50{margin-left:50%}.md-flex-large-and-up-55{min-width:55%;flex:0 1 55%}.md-flex-offset-large-and-up-55{margin-left:55%}.md-flex-large-and-up-60{min-width:60%;flex:0 1 60%}.md-flex-offset-large-and-up-60{margin-left:60%}.md-flex-large-and-up-65{min-width:65%;flex:0 1 65%}.md-flex-offset-large-and-up-65{margin-left:65%}.md-flex-large-and-up-70{min-width:70%;flex:0 1 70%}.md-flex-offset-large-and-up-70{margin-left:70%}.md-flex-large-and-up-75{min-width:75%;flex:0 1 75%}.md-flex-offset-large-and-up-75{margin-left:75%}.md-flex-large-and-up-80{min-width:80%;flex:0 1 80%}.md-flex-offset-large-and-up-80{margin-left:80%}.md-flex-large-and-up-85{min-width:85%;flex:0 1 85%}.md-flex-offset-large-and-up-85{margin-left:85%}.md-flex-large-and-up-90{min-width:90%;flex:0 1 90%}.md-flex-offset-large-and-up-90{margin-left:90%}.md-flex-large-and-up-95{min-width:95%;flex:0 1 95%}.md-flex-offset-large-and-up-95{margin-left:95%}.md-flex-large-and-up-100{min-width:100%;flex:0 1 100%}.md-flex-offset-large-and-up-100{margin-left:100%}.md-align-large-and-up-start{justify-content:flex-start}.md-align-large-and-up-center{justify-content:center}.md-align-large-and-up-end{justify-content:flex-end}.md-hide-large-and-up{display:none}}@media(min-width:945px){.md-row-medium-and-up{flex-direction:row}.md-column-medium-and-up{flex-direction:column}.md-flex-medium-and-up{flex:1 1}.md-flex-medium-and-up-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-medium-and-up-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-medium-and-up-33{margin-left:33.33333%}.md-flex-offset-medium-and-up-66{margin-left:66.66666%}.md-flex-medium-and-up-5{min-width:5%;flex:0 1 5%}.md-flex-offset-medium-and-up-5{margin-left:5%}.md-flex-medium-and-up-10{min-width:10%;flex:0 1 10%}.md-flex-offset-medium-and-up-10{margin-left:10%}.md-flex-medium-and-up-15{min-width:15%;flex:0 1 15%}.md-flex-offset-medium-and-up-15{margin-left:15%}.md-flex-medium-and-up-20{min-width:20%;flex:0 1 20%}.md-flex-offset-medium-and-up-20{margin-left:20%}.md-flex-medium-and-up-25{min-width:25%;flex:0 1 25%}.md-flex-offset-medium-and-up-25{margin-left:25%}.md-flex-medium-and-up-30{min-width:30%;flex:0 1 30%}.md-flex-offset-medium-and-up-30{margin-left:30%}.md-flex-medium-and-up-35{min-width:35%;flex:0 1 35%}.md-flex-offset-medium-and-up-35{margin-left:35%}.md-flex-medium-and-up-40{min-width:40%;flex:0 1 40%}.md-flex-offset-medium-and-up-40{margin-left:40%}.md-flex-medium-and-up-45{min-width:45%;flex:0 1 45%}.md-flex-offset-medium-and-up-45{margin-left:45%}.md-flex-medium-and-up-50{min-width:50%;flex:0 1 50%}.md-flex-offset-medium-and-up-50{margin-left:50%}.md-flex-medium-and-up-55{min-width:55%;flex:0 1 55%}.md-flex-offset-medium-and-up-55{margin-left:55%}.md-flex-medium-and-up-60{min-width:60%;flex:0 1 60%}.md-flex-offset-medium-and-up-60{margin-left:60%}.md-flex-medium-and-up-65{min-width:65%;flex:0 1 65%}.md-flex-offset-medium-and-up-65{margin-left:65%}.md-flex-medium-and-up-70{min-width:70%;flex:0 1 70%}.md-flex-offset-medium-and-up-70{margin-left:70%}.md-flex-medium-and-up-75{min-width:75%;flex:0 1 75%}.md-flex-offset-medium-and-up-75{margin-left:75%}.md-flex-medium-and-up-80{min-width:80%;flex:0 1 80%}.md-flex-offset-medium-and-up-80{margin-left:80%}.md-flex-medium-and-up-85{min-width:85%;flex:0 1 85%}.md-flex-offset-medium-and-up-85{margin-left:85%}.md-flex-medium-and-up-90{min-width:90%;flex:0 1 90%}.md-flex-offset-medium-and-up-90{margin-left:90%}.md-flex-medium-and-up-95{min-width:95%;flex:0 1 95%}.md-flex-offset-medium-and-up-95{margin-left:95%}.md-flex-medium-and-up-100{min-width:100%;flex:0 1 100%}.md-flex-offset-medium-and-up-100{margin-left:100%}.md-align-medium-and-up-start{justify-content:flex-start}.md-align-medium-and-up-center{justify-content:center}.md-align-medium-and-up-end{justify-content:flex-end}.md-hide-medium-and-up{display:none}}@media(min-width:601px){.md-row-small-and-up{flex-direction:row}.md-column-small-and-up{flex-direction:column}.md-flex-small-and-up{flex:1 1}.md-flex-small-and-up-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-small-and-up-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-small-and-up-33{margin-left:33.33333%}.md-flex-offset-small-and-up-66{margin-left:66.66666%}.md-flex-small-and-up-5{min-width:5%;flex:0 1 5%}.md-flex-offset-small-and-up-5{margin-left:5%}.md-flex-small-and-up-10{min-width:10%;flex:0 1 10%}.md-flex-offset-small-and-up-10{margin-left:10%}.md-flex-small-and-up-15{min-width:15%;flex:0 1 15%}.md-flex-offset-small-and-up-15{margin-left:15%}.md-flex-small-and-up-20{min-width:20%;flex:0 1 20%}.md-flex-offset-small-and-up-20{margin-left:20%}.md-flex-small-and-up-25{min-width:25%;flex:0 1 25%}.md-flex-offset-small-and-up-25{margin-left:25%}.md-flex-small-and-up-30{min-width:30%;flex:0 1 30%}.md-flex-offset-small-and-up-30{margin-left:30%}.md-flex-small-and-up-35{min-width:35%;flex:0 1 35%}.md-flex-offset-small-and-up-35{margin-left:35%}.md-flex-small-and-up-40{min-width:40%;flex:0 1 40%}.md-flex-offset-small-and-up-40{margin-left:40%}.md-flex-small-and-up-45{min-width:45%;flex:0 1 45%}.md-flex-offset-small-and-up-45{margin-left:45%}.md-flex-small-and-up-50{min-width:50%;flex:0 1 50%}.md-flex-offset-small-and-up-50{margin-left:50%}.md-flex-small-and-up-55{min-width:55%;flex:0 1 55%}.md-flex-offset-small-and-up-55{margin-left:55%}.md-flex-small-and-up-60{min-width:60%;flex:0 1 60%}.md-flex-offset-small-and-up-60{margin-left:60%}.md-flex-small-and-up-65{min-width:65%;flex:0 1 65%}.md-flex-offset-small-and-up-65{margin-left:65%}.md-flex-small-and-up-70{min-width:70%;flex:0 1 70%}.md-flex-offset-small-and-up-70{margin-left:70%}.md-flex-small-and-up-75{min-width:75%;flex:0 1 75%}.md-flex-offset-small-and-up-75{margin-left:75%}.md-flex-small-and-up-80{min-width:80%;flex:0 1 80%}.md-flex-offset-small-and-up-80{margin-left:80%}.md-flex-small-and-up-85{min-width:85%;flex:0 1 85%}.md-flex-offset-small-and-up-85{margin-left:85%}.md-flex-small-and-up-90{min-width:90%;flex:0 1 90%}.md-flex-offset-small-and-up-90{margin-left:90%}.md-flex-small-and-up-95{min-width:95%;flex:0 1 95%}.md-flex-offset-small-and-up-95{margin-left:95%}.md-flex-small-and-up-100{min-width:100%;flex:0 1 100%}.md-flex-offset-small-and-up-100{margin-left:100%}.md-align-small-and-up-start{justify-content:flex-start}.md-align-small-and-up-center{justify-content:center}.md-align-small-and-up-end{justify-content:flex-end}.md-hide-small-and-up{display:none}}@media(min-width:300px){.md-row-xsmall-and-up{flex-direction:row}.md-column-xsmall-and-up{flex-direction:column}.md-flex-xsmall-and-up{flex:1 1}.md-flex-xsmall-and-up-33{min-width:33.33333%;flex:0 1 33.33333%}.md-flex-xsmall-and-up-66{min-width:33.33333%;flex:0 1 66.66666%}.md-flex-offset-xsmall-and-up-33{margin-left:33.33333%}.md-flex-offset-xsmall-and-up-66{margin-left:66.66666%}.md-flex-xsmall-and-up-5{min-width:5%;flex:0 1 5%}.md-flex-offset-xsmall-and-up-5{margin-left:5%}.md-flex-xsmall-and-up-10{min-width:10%;flex:0 1 10%}.md-flex-offset-xsmall-and-up-10{margin-left:10%}.md-flex-xsmall-and-up-15{min-width:15%;flex:0 1 15%}.md-flex-offset-xsmall-and-up-15{margin-left:15%}.md-flex-xsmall-and-up-20{min-width:20%;flex:0 1 20%}.md-flex-offset-xsmall-and-up-20{margin-left:20%}.md-flex-xsmall-and-up-25{min-width:25%;flex:0 1 25%}.md-flex-offset-xsmall-and-up-25{margin-left:25%}.md-flex-xsmall-and-up-30{min-width:30%;flex:0 1 30%}.md-flex-offset-xsmall-and-up-30{margin-left:30%}.md-flex-xsmall-and-up-35{min-width:35%;flex:0 1 35%}.md-flex-offset-xsmall-and-up-35{margin-left:35%}.md-flex-xsmall-and-up-40{min-width:40%;flex:0 1 40%}.md-flex-offset-xsmall-and-up-40{margin-left:40%}.md-flex-xsmall-and-up-45{min-width:45%;flex:0 1 45%}.md-flex-offset-xsmall-and-up-45{margin-left:45%}.md-flex-xsmall-and-up-50{min-width:50%;flex:0 1 50%}.md-flex-offset-xsmall-and-up-50{margin-left:50%}.md-flex-xsmall-and-up-55{min-width:55%;flex:0 1 55%}.md-flex-offset-xsmall-and-up-55{margin-left:55%}.md-flex-xsmall-and-up-60{min-width:60%;flex:0 1 60%}.md-flex-offset-xsmall-and-up-60{margin-left:60%}.md-flex-xsmall-and-up-65{min-width:65%;flex:0 1 65%}.md-flex-offset-xsmall-and-up-65{margin-left:65%}.md-flex-xsmall-and-up-70{min-width:70%;flex:0 1 70%}.md-flex-offset-xsmall-and-up-70{margin-left:70%}.md-flex-xsmall-and-up-75{min-width:75%;flex:0 1 75%}.md-flex-offset-xsmall-and-up-75{margin-left:75%}.md-flex-xsmall-and-up-80{min-width:80%;flex:0 1 80%}.md-flex-offset-xsmall-and-up-80{margin-left:80%}.md-flex-xsmall-and-up-85{min-width:85%;flex:0 1 85%}.md-flex-offset-xsmall-and-up-85{margin-left:85%}.md-flex-xsmall-and-up-90{min-width:90%;flex:0 1 90%}.md-flex-offset-xsmall-and-up-90{margin-left:90%}.md-flex-xsmall-and-up-95{min-width:95%;flex:0 1 95%}.md-flex-offset-xsmall-and-up-95{margin-left:95%}.md-flex-xsmall-and-up-100{min-width:100%;flex:0 1 100%}.md-flex-offset-xsmall-and-up-100{margin-left:100%}.md-align-xsmall-and-up-start{justify-content:flex-start}.md-align-xsmall-and-up-center{justify-content:center}.md-align-xsmall-and-up-end{justify-content:flex-end}.md-hide-xsmall-and-up{display:none}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half,83.67142%))}to{transform:translateX(200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full,200.611057%))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half,83.67142%))}to{transform:translateX(200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full,200.611057%))}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(.06,.11,.6,1);animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(.06,.11,.6,1);animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(.15,0,.515058,.409685);animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translateX(37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter,37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translateX(84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half,84.386165%))}to{transform:translateX(160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full,160.277782%))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(.15,0,.515058,.409685);animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translateX(37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter,37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translateX(84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half,84.386165%))}to{transform:translateX(160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full,160.277782%))}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);transform:scaleX(.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);transform:scaleX(.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);transform:scaleX(.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);transform:scaleX(.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@-webkit-keyframes mdc-linear-progress-buffering{0%{transform:rotate(180deg) translateX(-10px)}}@keyframes mdc-linear-progress-buffering{0%{transform:rotate(180deg) translateX(-10px)}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half-neg,-83.67142%))}to{transform:translateX(-200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full-neg,-200.611057%))}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half-neg,-83.67142%))}to{transform:translateX(-200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full-neg,-200.611057%))}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(.15,0,.515058,.409685);animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translateX(-37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg,-37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translateX(-84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half-neg,-84.386165%))}to{transform:translateX(-160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full-neg,-160.277782%))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(.15,0,.515058,.409685);animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translateX(-37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg,-37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translateX(-84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half-neg,-84.386165%))}to{transform:translateX(-160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full-neg,-160.277782%))}}@-webkit-keyframes mdc-linear-progress-buffering-reverse{0%{transform:translateX(-10px)}}@keyframes mdc-linear-progress-buffering-reverse{0%{transform:translateX(-10px)}}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow:hidden;transition:opacity .25s cubic-bezier(.4,0,.6,1) 0ms}@media screen and (forced-colors:active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{height:100%;transform-origin:top left;transition:transform .25s cubic-bezier(.4,0,.6,1) 0ms}.mdc-linear-progress__bar,.mdc-linear-progress__bar-inner{position:absolute;width:100%;-webkit-animation:none;animation:none}.mdc-linear-progress__bar-inner{display:inline-block;border-top-style:solid}.mdc-linear-progress__buffer{display:flex;position:absolute;width:100%;height:100%}.mdc-linear-progress__buffer-dots{background-repeat:repeat-x;flex:auto;transform:rotate(180deg);-webkit-animation:mdc-linear-progress-buffering .25s linear infinite;animation:mdc-linear-progress-buffering .25s linear infinite}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis .25s cubic-bezier(.4,0,.6,1) 0ms}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{-webkit-animation:mdc-linear-progress-primary-indeterminate-translate 2s linear infinite;animation:mdc-linear-progress-primary-indeterminate-translate 2s linear infinite}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-primary-indeterminate-scale 2s linear infinite;animation:mdc-linear-progress-primary-indeterminate-scale 2s linear infinite}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{-webkit-animation:mdc-linear-progress-secondary-indeterminate-translate 2s linear infinite;animation:mdc-linear-progress-secondary-indeterminate-translate 2s linear infinite}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-secondary-indeterminate-scale 2s linear infinite;animation:mdc-linear-progress-secondary-indeterminate-scale 2s linear infinite}.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__bar,[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar,[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{-webkit-animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar,[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{-webkit-animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__buffer-dots,[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__buffer-dots{-webkit-animation:mdc-linear-progress-buffering-reverse .25s linear infinite;animation:mdc-linear-progress-buffering-reverse .25s linear infinite;transform:rotate(0)}.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar,[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar,[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}.mdc-linear-progress--closed{opacity:0}.mdc-linear-progress--closed-animation-off .mdc-linear-progress__buffer-dots,.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar,.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar .mdc-linear-progress__bar-inner{-webkit-animation:none;animation:none}.mdc-linear-progress__bar-inner{border-color:#6200ee;border-color:var(--mdc-theme-primary,#6200ee)}.mdc-linear-progress__buffer-dots{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E")}.mdc-linear-progress__buffer-bar{background-color:#e6e6e6}.mdc-linear-progress{height:4px}.mdc-linear-progress__bar-inner{border-top-width:4px}.mdc-linear-progress__buffer-dots{background-size:10px 4px}.mdc-theme-name--red.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#f44336}.mdc-theme-name--pink.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#e91e63}.mdc-theme-name--purple.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#9c27b0}.mdc-theme-name--deep-purple.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#673ab7}.mdc-theme-name--indigo.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#3f51b5}.mdc-theme-name--blue.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#2196f3}.mdc-theme-name--light-blue.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#03a9f4}.mdc-theme-name--cyan.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#00bcd4}.mdc-theme-name--teal.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#009688}.mdc-theme-name--green.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#4caf50}.mdc-theme-name--light-green.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#8bc34a}.mdc-theme-name--lime.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#cddc39}.mdc-theme-name--yellow.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#ffeb3b}.mdc-theme-name--amber.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#ffc107}.mdc-theme-name--orange.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#ff9800}.mdc-theme-name--deep-orange.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#ff5722}.mdc-theme-name--brown.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#795548}.mdc-theme-name--grey.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#9e9e9e}.mdc-theme-name--blue-grey.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#607d8b}.mdc-theme-name--black.mdc-linear-progress .mdc-linear-progress__bar-inner{border-color:#313131}.mdc-deprecated-list.foxy-list-horizontal{display:flex;flex-wrap:inherit}.mdc-deprecated-list-item a{color:inherit;text-decoration:none}.mdc-deprecated-list-item a .mdc-deprecated-list-item__text{display:flex;align-items:center;gap:10px}.foxy-list .foxy-list-item{height:unset;overflow:visible;z-index:0}.foxy-list .foxy-list-item .mdc-deprecated-list-item__text{overflow:visible}.foxy-list .foxy-list-item .mdc-deprecated-list-item__text .md-list-text-container{display:flex;flex-flow:column nowrap;flex:1;overflow:hidden;line-height:1.25em;white-space:normal}.foxy-list.foxy-double-line .foxy-list-item{padding:0}.foxy-list.foxy-double-line .foxy-list-item .mdc-deprecated-list-item__text{min-height:72px;padding:0;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;flex:1;position:relative;font-size:16px;font-weight:400;text-align:left;text-transform:none;gap:unset}.mdc-deprecated-list-item__ripple{overflow:hidden}.foxy-list.mdc-deprecated-list--non-interactive .foxy-list-item{cursor:auto}.foxy-list.mdc-deprecated-list--non-interactive .foxy-list-item .mdc-deprecated-list-item__text .mdc-form-field label{cursor:pointer}.foxy-list.foxy-list-fit-content .foxy-list-item{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;padding:0}.foxy-list.foxy-list-fit-content .foxy-list-item .mdc-deprecated-list-item__text .mdc-form-field{margin:0!important;padding:0!important}.foxy-list.foxy-list-fit-content .foxy-list-item .mdc-deprecated-list-item__text .mdc-form-field>label{padding:6px 8px 8px 0!important}.foxy-list .foxy-list-item-expandable{min-height:80px}.foxy-list .foxy-list-item-expandable .main-list-container{display:flex;padding:10px;justify-content:space-between;align-items:center}.foxy-list .foxy-list-item-expandable .main-list-container.collapsed{border-bottom:1px;border-bottom-style:solid;border-bottom-color:#d3d3d3}.foxy-list .foxy-list-item-expandable .main-list-container:hover{background:#f1f1f1;cursor:pointer}.foxy-list .foxy-list-item-expandable .list-container-content{display:flex;flex:1 1 auto;align-items:center;max-width:80%}.foxy-list .foxy-list-item-expandable .list-container-content>:first-child{max-width:48px;margin-right:32px}.foxy-list .foxy-list-item-expandable .list-container-content>:first-child.md-avatar{width:48px;height:48px;margin-right:32px}.foxy-list .foxy-list-item-expandable .foxy-list-text-container>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.foxy-list .foxy-list-item-expandable .foxy-list-text-container{display:flex;flex-flow:column nowrap;flex:1;overflow:hidden;line-height:1.25em;white-space:normal}.foxy-list .foxy-list-item-expandable .foxy-list-text-container p{margin:0;padding:0;color:rgba(0,0,0,.54);font-size:14px}.foxy-list .foxy-list-item-expandable .foxy-list-text-container>:nth-child(2){font-size:14px}.foxy-list .foxy-list-item-expandable .foxy-list-text-container .labeled{background:#f5f5f5;display:inline-block;font-size:.75em;padding:.13em .5em .12em;font-style:normal;margin-left:10px}.foxy-list .foxy-list-item-expandable .item-expandable-content-wrapper{overflow:hidden;transition:height .3s ease;height:0}.foxy-list .foxy-list-item-expandable .expandable-content{padding-left:90px;border-bottom:1px;border-bottom-style:solid;border-bottom-color:#d3d3d3}@media screen and (max-width:600px){.foxy-list .foxy-list-item-expandable .expandable-content{padding-left:15px}}.foxy-list .foxy-list-item-expandable .expandable-content .foxy-list .foxy-list-item a{width:unset}.foxy-list .foxy-list-item-expandable .expandable-content ul li.foxy-list-item{padding:0;margin-bottom:8px;cursor:unset}.foxy-list .foxy-list-item-expandable .expandable-content ul li.foxy-list-item .mdc-deprecated-list-item__ripple{display:none}.foxy-list .foxy-list-item-expandable .expandable-content ul li.foxy-list-item a:hover,.foxy-list .foxy-list-item-expandable .expandable-content ul li.foxy-list-item:hover{background-color:none}.foxy-list .foxy-list-item-expandable .expandable-content .foxy-list-item .mdc-deprecated-list-item__text>.md-icon:first-child{margin-right:8px}.foxy-list .foxy-list-item-expandable .expandable-content .foxy-list-item .mdc-deprecated-list-item__text .md-list-text-container>span:last-child{margin:0;font-size:14px;color:rgba(0,0,0,.54)}.foxy-list .foxy-list-item-expandable .expandable-content li.expand-actions{margin-top:14px}.foxy-list .foxy-list-item-expandable .expandable-content li.expand-actions span{display:contents}.foxy-list .foxy-list-item-expandable .expandable-content li.expand-actions span>div{display:inline-block;margin-right:8px;padding-bottom:24px}.mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu-surface--open .foxy-list .foxy-list-item{padding:0;z-index:20}.mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu-surface--open .foxy-list .foxy-list-item>a{min-width:100%}.mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu-surface--open .foxy-list .foxy-list-item .mdc-deprecated-list-item__text{min-height:48px;margin:0;padding:0 16px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;flex:1;position:relative;font-size:16px;font-weight:400;text-align:left;text-transform:none;text-wrap:pretty}.mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu-surface--open .foxy-list .foxy-list-item .mdc-deprecated-list-item__text>span{flex:1}.mdc-menu-surface--anchor .mdc-menu-surface.mdc-menu-surface--open.mdc-menu-items-no-wrap .foxy-list .mdc-deprecated-list-item__text{text-wrap:nowrap}.mdc-theme-name--red .mdc-floating-label,.mdc-theme-name--red.mdc-floating-label{color:#f44336}.mdc-theme-name--pink .mdc-floating-label,.mdc-theme-name--pink.mdc-floating-label{color:#e91e63}.mdc-theme-name--purple .mdc-floating-label,.mdc-theme-name--purple.mdc-floating-label{color:#9c27b0}.mdc-theme-name--deep-purple .mdc-floating-label,.mdc-theme-name--deep-purple.mdc-floating-label{color:#673ab7}.mdc-theme-name--indigo .mdc-floating-label,.mdc-theme-name--indigo.mdc-floating-label{color:#3f51b5}.mdc-theme-name--blue .mdc-floating-label,.mdc-theme-name--blue.mdc-floating-label{color:#2196f3}.mdc-theme-name--light-blue .mdc-floating-label,.mdc-theme-name--light-blue.mdc-floating-label{color:#03a9f4}.mdc-theme-name--cyan .mdc-floating-label,.mdc-theme-name--cyan.mdc-floating-label{color:#00bcd4}.mdc-theme-name--teal .mdc-floating-label,.mdc-theme-name--teal.mdc-floating-label{color:#009688}.mdc-theme-name--green .mdc-floating-label,.mdc-theme-name--green.mdc-floating-label{color:#4caf50}.mdc-theme-name--light-green .mdc-floating-label,.mdc-theme-name--light-green.mdc-floating-label{color:#8bc34a}.mdc-theme-name--lime .mdc-floating-label,.mdc-theme-name--lime.mdc-floating-label{color:#cddc39}.mdc-theme-name--yellow .mdc-floating-label,.mdc-theme-name--yellow.mdc-floating-label{color:#ffeb3b}.mdc-theme-name--amber .mdc-floating-label,.mdc-theme-name--amber.mdc-floating-label{color:#ffc107}.mdc-theme-name--orange .mdc-floating-label,.mdc-theme-name--orange.mdc-floating-label{color:#ff9800}.mdc-theme-name--deep-orange .mdc-floating-label,.mdc-theme-name--deep-orange.mdc-floating-label{color:#ff5722}.mdc-theme-name--brown .mdc-floating-label,.mdc-theme-name--brown.mdc-floating-label{color:#795548}.mdc-theme-name--grey .mdc-floating-label,.mdc-theme-name--grey.mdc-floating-label{color:#9e9e9e}.mdc-theme-name--blue-grey .mdc-floating-label,.mdc-theme-name--blue-grey.mdc-floating-label{color:#607d8b}.mdc-theme-name--black .mdc-floating-label,.mdc-theme-name--black.mdc-floating-label{color:#313131}.notification-box{align-items:flex-start;border:1px solid mui-palette("grey",200);border-radius:3px;display:flex;margin:1rem 0;padding:1rem}.notification-box.inline{display:inline-flex;padding:.15rem .75rem;margin:0;line-height:1.1}.notification-box.md-theme-red{background:mui-palette(red,50);border-color:mui-palette(red,100);border-left:5px solid mui-palette(red,500)}.notification-box.md-theme-pink{background:mui-palette(pink,50);border-color:mui-palette(pink,100);border-left:5px solid mui-palette(pink,500)}.notification-box.md-theme-purple{background:mui-palette(purple,50);border-color:mui-palette(purple,100);border-left:5px solid mui-palette(purple,500)}.notification-box.md-theme-deep-purple{background:mui-palette(deep-purple,50);border-color:mui-palette(deep-purple,100);border-left:5px solid mui-palette(deep-purple,500)}.notification-box.md-theme-indigo{background:mui-palette(indigo,50);border-color:mui-palette(indigo,100);border-left:5px solid mui-palette(indigo,500)}.notification-box.md-theme-blue{background:mui-palette(blue,50);border-color:mui-palette(blue,100);border-left:5px solid mui-palette(blue,500)}.notification-box.md-theme-light-blue{background:mui-palette(light-blue,50);border-color:mui-palette(light-blue,100);border-left:5px solid mui-palette(light-blue,500)}.notification-box.md-theme-cyan{background:mui-palette(cyan,50);border-color:mui-palette(cyan,100);border-left:5px solid mui-palette(cyan,500)}.notification-box.md-theme-teal{background:mui-palette(teal,50);border-color:mui-palette(teal,100);border-left:5px solid mui-palette(teal,500)}.notification-box.md-theme-green{background:mui-palette(green,50);border-color:mui-palette(green,100);border-left:5px solid mui-palette(green,500)}.notification-box.md-theme-light-green{background:mui-palette(light-green,50);border-color:mui-palette(light-green,100);border-left:5px solid mui-palette(light-green,500)}.notification-box.md-theme-lime{background:mui-palette(lime,50);border-color:mui-palette(lime,100);border-left:5px solid mui-palette(lime,500)}.notification-box.md-theme-yellow{background:mui-palette(#ff0,50);border-color:mui-palette(#ff0,100);border-left:5px solid mui-palette(#ff0,500)}.notification-box.md-theme-amber{background:mui-palette(amber,50);border-color:mui-palette(amber,100);border-left:5px solid mui-palette(amber,500)}.notification-box.md-theme-orange{background:mui-palette(orange,50);border-color:mui-palette(orange,100);border-left:5px solid mui-palette(orange,500)}.notification-box.md-theme-deep-orange{background:mui-palette(deep-orange,50);border-color:mui-palette(deep-orange,100);border-left:5px solid mui-palette(deep-orange,500)}.notification-box.md-theme-brown{background:mui-palette(brown,50);border-color:mui-palette(brown,100);border-left:5px solid mui-palette(brown,500)}.notification-box.md-theme-grey{background:mui-palette(grey,50);border-color:mui-palette(grey,100);border-left:5px solid mui-palette(grey,500)}.notification-box.md-theme-blue-grey{background:mui-palette(blue-grey,50);border-color:mui-palette(blue-grey,100);border-left:5px solid mui-palette(blue-grey,500)}.notification-box.md-theme-black{background:mui-palette(#000,50);border-color:mui-palette(#000,100);border-left:5px solid mui-palette(#000,500)}.md-card .notification-box{background:#fff;border:0 none;padding:0}.notification-box .md-icon{margin:-2px 1rem 0 0}.notification-box .notification-text{flex:1}@media screen and (max-width:600px){.notification-box .notification-text .mdc-button{font-size:smaller}}.md-card-content>.notification-box{margin:0}.link-hint{color:mui-palette("deep-orange",700);padding-left:.5rem;text-decoration:underline}.settings-list-item .mdc-card__content .notification-box{align-items:center}.notification-edit fieldset.md-fieldset .md-layout{margin-bottom:0}.vti__flag.be{width:18px}.vti__flag.ch{width:15px}.vti__flag.mc{width:19px}.vti__flag.ne{width:18px}.vti__flag.np{width:13px}.vti__flag.va{width:15px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.vti__flag{background-size:5630px 15px}}.vti__flag.ac{height:10px;background-position:0 0}.vti__flag.ad{height:14px;background-position:-22px 0}.vti__flag.ae{height:10px;background-position:-44px 0}.vti__flag.af{height:14px;background-position:-66px 0}.vti__flag.ag{height:14px;background-position:-88px 0}.vti__flag.ai{height:10px;background-position:-110px 0}.vti__flag.al{height:15px;background-position:-132px 0}.vti__flag.am{height:10px;background-position:-154px 0}.vti__flag.ao{height:14px;background-position:-176px 0}.vti__flag.aq{height:14px;background-position:-198px 0}.vti__flag.ar{height:13px;background-position:-220px 0}.vti__flag.as{height:10px;background-position:-242px 0}.vti__flag.at{height:14px;background-position:-264px 0}.vti__flag.au{height:10px;background-position:-286px 0}.vti__flag.aw{height:14px;background-position:-308px 0}.vti__flag.ax{height:13px;background-position:-330px 0}.vti__flag.az{height:10px;background-position:-352px 0}.vti__flag.ba{height:10px;background-position:-374px 0}.vti__flag.bb{height:14px;background-position:-396px 0}.vti__flag.bd{height:12px;background-position:-418px 0}.vti__flag.be{height:15px;background-position:-440px 0}.vti__flag.bf{height:14px;background-position:-460px 0}.vti__flag.bg{height:12px;background-position:-482px 0}.vti__flag.bh{height:12px;background-position:-504px 0}.vti__flag.bi{height:12px;background-position:-526px 0}.vti__flag.bj{height:14px;background-position:-548px 0}.vti__flag.bl{height:14px;background-position:-570px 0}.vti__flag.bm{height:10px;background-position:-592px 0}.vti__flag.bn{height:10px;background-position:-614px 0}.vti__flag.bo{height:14px;background-position:-636px 0}.vti__flag.bq{height:14px;background-position:-658px 0}.vti__flag.br{height:14px;background-position:-680px 0}.vti__flag.bs{height:10px;background-position:-702px 0}.vti__flag.bt{height:14px;background-position:-724px 0}.vti__flag.bv{height:15px;background-position:-746px 0}.vti__flag.bw{height:14px;background-position:-768px 0}.vti__flag.by{height:10px;background-position:-790px 0}.vti__flag.bz{height:14px;background-position:-812px 0}.vti__flag.ca{height:10px;background-position:-834px 0}.vti__flag.cc{height:10px;background-position:-856px 0}.vti__flag.cd{height:15px;background-position:-878px 0}.vti__flag.cf{height:14px;background-position:-900px 0}.vti__flag.cg{height:14px;background-position:-922px 0}.vti__flag.ch{height:15px;background-position:-944px 0}.vti__flag.ci{height:14px;background-position:-961px 0}.vti__flag.ck{height:10px;background-position:-983px 0}.vti__flag.cl{height:14px;background-position:-1005px 0}.vti__flag.cm{height:14px;background-position:-1027px 0}.vti__flag.cn{height:14px;background-position:-1049px 0}.vti__flag.co{height:14px;background-position:-1071px 0}.vti__flag.cp{height:14px;background-position:-1093px 0}.vti__flag.cr{height:12px;background-position:-1115px 0}.vti__flag.cu{height:10px;background-position:-1137px 0}.vti__flag.cv{height:12px;background-position:-1159px 0}.vti__flag.cw{height:14px;background-position:-1181px 0}.vti__flag.cx{height:10px;background-position:-1203px 0}.vti__flag.cy{height:14px;background-position:-1225px 0}.vti__flag.cz{height:14px;background-position:-1247px 0}.vti__flag.de{height:12px;background-position:-1269px 0}.vti__flag.dg{height:10px;background-position:-1291px 0}.vti__flag.dj{height:14px;background-position:-1313px 0}.vti__flag.dk{height:15px;background-position:-1335px 0}.vti__flag.dm{height:10px;background-position:-1357px 0}.vti__flag.do{height:13px;background-position:-1379px 0}.vti__flag.dz{height:14px;background-position:-1401px 0}.vti__flag.ea{height:14px;background-position:-1423px 0}.vti__flag.ec{height:14px;background-position:-1445px 0}.vti__flag.ee{height:13px;background-position:-1467px 0}.vti__flag.eg{height:14px;background-position:-1489px 0}.vti__flag.eh{height:10px;background-position:-1511px 0}.vti__flag.er{height:10px;background-position:-1533px 0}.vti__flag.es{height:14px;background-position:-1555px 0}.vti__flag.et{height:10px;background-position:-1577px 0}.vti__flag.eu{height:14px;background-position:-1599px 0}.vti__flag.fi{height:12px;background-position:-1621px 0}.vti__flag.fj{height:10px;background-position:-1643px 0}.vti__flag.fk{height:10px;background-position:-1665px 0}.vti__flag.fm{height:11px;background-position:-1687px 0}.vti__flag.fo{height:15px;background-position:-1709px 0}.vti__flag.fr{height:14px;background-position:-1731px 0}.vti__flag.ga{height:15px;background-position:-1753px 0}.vti__flag.gb{height:10px;background-position:-1775px 0}.vti__flag.gd{height:12px;background-position:-1797px 0}.vti__flag.ge{height:14px;background-position:-1819px 0}.vti__flag.gf{height:14px;background-position:-1841px 0}.vti__flag.gg{height:14px;background-position:-1863px 0}.vti__flag.gh{height:14px;background-position:-1885px 0}.vti__flag.gi{height:10px;background-position:-1907px 0}.vti__flag.gl{height:14px;background-position:-1929px 0}.vti__flag.gm{height:14px;background-position:-1951px 0}.vti__flag.gn{height:14px;background-position:-1973px 0}.vti__flag.gp{height:14px;background-position:-1995px 0}.vti__flag.gq{height:14px;background-position:-2017px 0}.vti__flag.gr{height:14px;background-position:-2039px 0}.vti__flag.gs{height:10px;background-position:-2061px 0}.vti__flag.gt{height:13px;background-position:-2083px 0}.vti__flag.gu{height:11px;background-position:-2105px 0}.vti__flag.gw{height:10px;background-position:-2127px 0}.vti__flag.gy{height:12px;background-position:-2149px 0}.vti__flag.hk{height:14px;background-position:-2171px 0}.vti__flag.hm{height:10px;background-position:-2193px 0}.vti__flag.hn{height:10px;background-position:-2215px 0}.vti__flag.hr{height:10px;background-position:-2237px 0}.vti__flag.ht{height:12px;background-position:-2259px 0}.vti__flag.hu{height:10px;background-position:-2281px 0}.vti__flag.ic{height:14px;background-position:-2303px 0}.vti__flag.id{height:14px;background-position:-2325px 0}.vti__flag.ie{height:10px;background-position:-2347px 0}.vti__flag.il{height:15px;background-position:-2369px 0}.vti__flag.im{height:10px;background-position:-2391px 0}.vti__flag.in{height:14px;background-position:-2413px 0}.vti__flag.io{height:10px;background-position:-2435px 0}.vti__flag.iq{height:14px;background-position:-2457px 0}.vti__flag.ir{height:12px;background-position:-2479px 0}.vti__flag.is{height:15px;background-position:-2501px 0}.vti__flag.it{height:14px;background-position:-2523px 0}.vti__flag.je{height:12px;background-position:-2545px 0}.vti__flag.jm{height:10px;background-position:-2567px 0}.vti__flag.jo{height:10px;background-position:-2589px 0}.vti__flag.jp{height:14px;background-position:-2611px 0}.vti__flag.ke{height:14px;background-position:-2633px 0}.vti__flag.kg{height:12px;background-position:-2655px 0}.vti__flag.kh{height:13px;background-position:-2677px 0}.vti__flag.ki{height:10px;background-position:-2699px 0}.vti__flag.km{height:12px;background-position:-2721px 0}.vti__flag.kn{height:14px;background-position:-2743px 0}.vti__flag.kp{height:10px;background-position:-2765px 0}.vti__flag.kr{height:14px;background-position:-2787px 0}.vti__flag.kw{height:10px;background-position:-2809px 0}.vti__flag.ky{height:10px;background-position:-2831px 0}.vti__flag.kz{height:10px;background-position:-2853px 0}.vti__flag.la{height:14px;background-position:-2875px 0}.vti__flag.lb{height:14px;background-position:-2897px 0}.vti__flag.lc{height:10px;background-position:-2919px 0}.vti__flag.li{height:12px;background-position:-2941px 0}.vti__flag.lk{height:10px;background-position:-2963px 0}.vti__flag.lr{height:11px;background-position:-2985px 0}.vti__flag.ls{height:14px;background-position:-3007px 0}.vti__flag.lt{height:12px;background-position:-3029px 0}.vti__flag.lu{height:12px;background-position:-3051px 0}.vti__flag.lv{height:10px;background-position:-3073px 0}.vti__flag.ly{height:10px;background-position:-3095px 0}.vti__flag.ma{height:14px;background-position:-3117px 0}.vti__flag.mc{height:15px;background-position:-3139px 0}.vti__flag.md{height:10px;background-position:-3160px 0}.vti__flag.me{height:10px;background-position:-3182px 0}.vti__flag.mf{height:14px;background-position:-3204px 0}.vti__flag.mg{height:14px;background-position:-3226px 0}.vti__flag.mh{height:11px;background-position:-3248px 0}.vti__flag.mk{height:10px;background-position:-3270px 0}.vti__flag.ml{height:14px;background-position:-3292px 0}.vti__flag.mm{height:14px;background-position:-3314px 0}.vti__flag.mn{height:10px;background-position:-3336px 0}.vti__flag.mo{height:14px;background-position:-3358px 0}.vti__flag.mp{height:10px;background-position:-3380px 0}.vti__flag.mq{height:14px;background-position:-3402px 0}.vti__flag.mr{height:14px;background-position:-3424px 0}.vti__flag.ms{height:10px;background-position:-3446px 0}.vti__flag.mt{height:14px;background-position:-3468px 0}.vti__flag.mu{height:14px;background-position:-3490px 0}.vti__flag.mv{height:14px;background-position:-3512px 0}.vti__flag.mw{height:14px;background-position:-3534px 0}.vti__flag.mx{height:12px;background-position:-3556px 0}.vti__flag.my{height:10px;background-position:-3578px 0}.vti__flag.mz{height:14px;background-position:-3600px 0}.vti__flag.na{height:14px;background-position:-3622px 0}.vti__flag.nc{height:10px;background-position:-3644px 0}.vti__flag.ne{height:15px;background-position:-3666px 0}.vti__flag.nf{height:10px;background-position:-3686px 0}.vti__flag.ng{height:10px;background-position:-3708px 0}.vti__flag.ni{height:12px;background-position:-3730px 0}.vti__flag.nl{height:14px;background-position:-3752px 0}.vti__flag.no{height:15px;background-position:-3774px 0}.vti__flag.np{height:15px;background-position:-3796px 0}.vti__flag.nr{height:10px;background-position:-3811px 0}.vti__flag.nu{height:10px;background-position:-3833px 0}.vti__flag.nz{height:10px;background-position:-3855px 0}.vti__flag.om{height:10px;background-position:-3877px 0}.vti__flag.pa{height:14px;background-position:-3899px 0}.vti__flag.pe{height:14px;background-position:-3921px 0}.vti__flag.pf{height:14px;background-position:-3943px 0}.vti__flag.pg{height:15px;background-position:-3965px 0}.vti__flag.ph{height:10px;background-position:-3987px 0}.vti__flag.pk{height:14px;background-position:-4009px 0}.vti__flag.pl{height:13px;background-position:-4031px 0}.vti__flag.pm{height:14px;background-position:-4053px 0}.vti__flag.pn{height:10px;background-position:-4075px 0}.vti__flag.pr{height:14px;background-position:-4097px 0}.vti__flag.ps{height:10px;background-position:-4119px 0}.vti__flag.pt{height:14px;background-position:-4141px 0}.vti__flag.pw{height:13px;background-position:-4163px 0}.vti__flag.py{height:11px;background-position:-4185px 0}.vti__flag.qa{height:8px;background-position:-4207px 0}.vti__flag.re{height:14px;background-position:-4229px 0}.vti__flag.ro{height:14px;background-position:-4251px 0}.vti__flag.rs{height:14px;background-position:-4273px 0}.vti__flag.ru{height:14px;background-position:-4295px 0}.vti__flag.rw{height:14px;background-position:-4317px 0}.vti__flag.sa{height:14px;background-position:-4339px 0}.vti__flag.sb{height:10px;background-position:-4361px 0}.vti__flag.sc{height:10px;background-position:-4383px 0}.vti__flag.sd{height:10px;background-position:-4405px 0}.vti__flag.se{height:13px;background-position:-4427px 0}.vti__flag.sg{height:14px;background-position:-4449px 0}.vti__flag.sh{height:10px;background-position:-4471px 0}.vti__flag.si{height:10px;background-position:-4493px 0}.vti__flag.sj{height:15px;background-position:-4515px 0}.vti__flag.sk{height:14px;background-position:-4537px 0}.vti__flag.sl{height:14px;background-position:-4559px 0}.vti__flag.sm{height:15px;background-position:-4581px 0}.vti__flag.sn{height:14px;background-position:-4603px 0}.vti__flag.so{height:14px;background-position:-4625px 0}.vti__flag.sr{height:14px;background-position:-4647px 0}.vti__flag.ss{height:10px;background-position:-4669px 0}.vti__flag.st{height:10px;background-position:-4691px 0}.vti__flag.sv{height:12px;background-position:-4713px 0}.vti__flag.sx{height:14px;background-position:-4735px 0}.vti__flag.sy{height:14px;background-position:-4757px 0}.vti__flag.sz{height:14px;background-position:-4779px 0}.vti__flag.ta{height:10px;background-position:-4801px 0}.vti__flag.tc{height:10px;background-position:-4823px 0}.vti__flag.td{height:14px;background-position:-4845px 0}.vti__flag.tf{height:14px;background-position:-4867px 0}.vti__flag.tg{height:13px;background-position:-4889px 0}.vti__flag.th{height:14px;background-position:-4911px 0}.vti__flag.tj{height:10px;background-position:-4933px 0}.vti__flag.tk{height:10px;background-position:-4955px 0}.vti__flag.tl{height:10px;background-position:-4977px 0}.vti__flag.tm{height:14px;background-position:-4999px 0}.vti__flag.tn{height:14px;background-position:-5021px 0}.vti__flag.to{height:10px;background-position:-5043px 0}.vti__flag.tr{height:14px;background-position:-5065px 0}.vti__flag.tt{height:12px;background-position:-5087px 0}.vti__flag.tv{height:10px;background-position:-5109px 0}.vti__flag.tw{height:14px;background-position:-5131px 0}.vti__flag.tz{height:14px;background-position:-5153px 0}.vti__flag.ua{height:14px;background-position:-5175px 0}.vti__flag.ug{height:14px;background-position:-5197px 0}.vti__flag.um{height:11px;background-position:-5219px 0}.vti__flag.us{height:11px;background-position:-5241px 0}.vti__flag.uy{height:14px;background-position:-5263px 0}.vti__flag.uz{height:10px;background-position:-5285px 0}.vti__flag.va{height:15px;background-position:-5307px 0}.vti__flag.vc{height:14px;background-position:-5324px 0}.vti__flag.ve{height:14px;background-position:-5346px 0}.vti__flag.vg{height:10px;background-position:-5368px 0}.vti__flag.vi{height:14px;background-position:-5390px 0}.vti__flag.vn{height:14px;background-position:-5412px 0}.vti__flag.vu{height:12px;background-position:-5434px 0}.vti__flag.wf{height:14px;background-position:-5456px 0}.vti__flag.ws{height:10px;background-position:-5478px 0}.vti__flag.xk{height:15px;background-position:-5500px 0}.vti__flag.ye{height:14px;background-position:-5522px 0}.vti__flag.yt{height:14px;background-position:-5544px 0}.vti__flag.za{height:14px;background-position:-5566px 0}.vti__flag.zm{height:14px;background-position:-5588px 0}.vti__flag.zw{height:10px;background-position:-5610px 0}.vti__flag{width:20px;height:15px;box-shadow:0 0 1px #888;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-color:#dbdbdb;background-position:20px 0}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.vti__flag{background-image:url(data:image/png;base64,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)}}.vti__flag.np{background-color:transparent}.vue-tel-input{border-radius:3px;display:flex;border:1px solid #bbb;text-align:left}.vue-tel-input.disabled .dropdown,.vue-tel-input.disabled .selection,.vue-tel-input.disabled input{cursor:no-drop}.vue-tel-input:focus-within{box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);border-color:#66afe9}.vti__dropdown{display:flex;flex-direction:column;align-content:center;justify-content:center;position:relative;padding:7px;cursor:pointer}.vti__dropdown.show{max-height:300px;overflow:scroll}.vti__dropdown.disabled,.vti__dropdown.open{background-color:#f3f3f3}.vti__dropdown.disabled{cursor:no-drop;outline:none}.vti__dropdown:hover{background-color:#f3f3f3}.vti__selection{font-size:.8em;display:flex;align-items:center}.vti__selection .vti__country-code{color:#666}.vti__flag{margin-right:5px;margin-left:5px}.vti__dropdown-list{z-index:1;padding:0;margin:0;text-align:left;list-style:none;max-height:200px;overflow-y:scroll;position:absolute;left:-1px;background-color:#fff;border:1px solid #ccc;width:390px}.vti__dropdown-list.below{top:33px}.vti__dropdown-list.above{top:auto;bottom:100%}.vti__dropdown-arrow{transform:scaleY(.5);display:inline-block;color:#666}.vti__dropdown-item{cursor:pointer;padding:4px 15px}.vti__dropdown-item.highlighted{background-color:#f3f3f3}.vti__dropdown-item.last-preferred{border-bottom:1px solid #cacaca}.vti__dropdown-item .vti__flag{display:inline-block;margin-right:5px}.vti__input{border:none;border-radius:0 2px 2px 0;width:100%;outline:none;padding-left:7px}.vue-tel-input-container{width:100%}.foxy-phone-container{display:block!important}.foxy-phone-container .mdc-text-field__ripple:after,.foxy-phone-container .mdc-text-field__ripple:before{width:100%!important;height:100%!important;position:absolute!important;top:0!important;left:0!important;border-radius:0!important}.foxy-phone-container .vue-tel-input-container{display:flex;position:relative;align-items:flex-start}.foxy-phone-container .vue-tel-input-container .vue-tel-input .vti__dropdown{padding:7px 7px 7px 0}.foxy-phone-container.mdc-text-field{border-bottom:1px solid rgba(0,0,0,.42);overflow:visible;z-index:2}.foxy-phone-container.mdc-text-field:not(.mdc-text-field--focused):not(.mdc-text-field--invalid):hover{border-bottom:1px solid rgba(0,0,0,.87)}.foxy-phone-container.mdc-text-field--filled:before{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.foxy-phone-container.mdc-text-field--focused{border-bottom:2px solid var(--mdc-theme-primary,#6200ee)}.foxy-phone-container.mdc-text-field--focused .mdc-text-field-helper-text{opacity:1}.foxy-phone-container.mdc-text-field--invalid:not(.mdc-text-field--disabled){border-bottom-color:var(--mdc-theme-error,#b00020)}.foxy-phone-container.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:var(--mdc-theme-error,#b00020)}.foxy-phone-container.foxy-phone-container .vue-tel-input{border:0 none;border-radius:0;flex:1;position:relative}.foxy-phone-container.foxy-phone-container .vue-tel-input:focus-within{border:0 none;box-shadow:none}.foxy-phone-container .vti__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-radius:0;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);-webkit-font-smoothing:antialiased;font-weight:var(--mdc-typography-subtitle1-font-weight,400);height:28px;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);min-width:0;padding:0;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);transition:opacity .15s cubic-bezier(.4,0,.2,1) 0ms;width:100%}.foxy-phone-container .vti__dropdown-list.below{top:34px}.mdc-touch-target-wrapper{display:inline}.mdc-radio{padding:10px}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.54)}.mdc-radio .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:#018786;border-color:var(--mdc-theme-secondary,#018786)}.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0,0,0,.38)}.mdc-radio .mdc-radio__background:before{background-color:#018786;background-color:var(--mdc-theme-secondary,#018786);top:-10px;left:-10px;width:40px;height:40px}.mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}}.mdc-radio{flex:0 0 auto;box-sizing:content-box;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio,.mdc-radio__background{display:inline-block;position:relative;width:20px;height:20px}.mdc-radio__background{box-sizing:border-box}.mdc-radio__background:before{position:absolute;transform:scale(0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity .12s cubic-bezier(.4,0,.6,1) 0ms,transform .12s cubic-bezier(.4,0,.6,1) 0ms}.mdc-radio__outer-circle{border-width:2px;transition:border-color .12s cubic-bezier(.4,0,.6,1) 0ms}.mdc-radio__inner-circle,.mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-style:solid;border-radius:50%}.mdc-radio__inner-circle{transform:scale(0);border-width:10px;transition:transform .12s cubic-bezier(.4,0,.6,1) 0ms,border-color .12s cubic-bezier(.4,0,.6,1) 0ms}.mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.mdc-radio--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-radio--touch .mdc-radio__native-control{top:-4px;right:-4px;left:-4px;width:48px;height:48px}.mdc-radio__native-control:checked+.mdc-radio__background,.mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity .12s cubic-bezier(0,0,.2,1) 0ms,transform .12s cubic-bezier(0,0,.2,1) 0ms}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color .12s cubic-bezier(0,0,.2,1) 0ms}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:transform .12s cubic-bezier(0,0,.2,1) 0ms,border-color .12s cubic-bezier(0,0,.2,1) 0ms}.mdc-radio--disabled{cursor:default;pointer-events:none}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{transform:scale(.5);transition:transform .12s cubic-bezier(0,0,.2,1) 0ms,border-color .12s cubic-bezier(0,0,.2,1) 0ms}.mdc-radio__native-control:disabled+.mdc-radio__background,[aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background{cursor:default}.mdc-radio__native-control:focus+.mdc-radio__background:before{transform:scale(1);opacity:.12;transition:opacity .12s cubic-bezier(0,0,.2,1) 0ms,transform .12s cubic-bezier(0,0,.2,1) 0ms}.mdc-radio{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-radio .mdc-radio__ripple:after,.mdc-radio .mdc-radio__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-radio .mdc-radio__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-radio .mdc-radio__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-radio.mdc-ripple-upgraded--unbounded .mdc-radio__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-radio.mdc-ripple-upgraded--foreground-activation .mdc-radio__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-radio.mdc-ripple-upgraded--foreground-deactivation .mdc-radio__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-radio .mdc-radio__ripple:after,.mdc-radio .mdc-radio__ripple:before{top:0;left:0;width:100%;height:100%}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple:after,.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple:before{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-radio .mdc-radio__ripple:after,.mdc-radio .mdc-radio__ripple:before{background-color:#018786;background-color:var(--mdc-ripple-color,var(--mdc-theme-secondary,#018786))}.mdc-radio.mdc-ripple-surface--hover .mdc-radio__ripple:before,.mdc-radio:hover .mdc-radio__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__ripple:before,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-radio:not(.mdc-ripple-upgraded) .mdc-radio__ripple:after{transition:opacity .15s linear}.mdc-radio:not(.mdc-ripple-upgraded):active .mdc-radio__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-radio.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__background:before,.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__background:before{content:none}.mdc-radio__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-radio~label>span{vertical-align:super;line-height:2}.mdc-radio~label>span>i.material-icons{vertical-align:middle}.mdc-form-field>.mdc-radio+label{text-align:left;text-wrap:wrap;align-self:baseline}.mdc-form-field>.mdc-radio{align-self:baseline;margin-top:7px}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-theme-text-secondary-on-light)}.mdc-form-field.mdc-form-field--radio--inline-flex{display:inline-flex;width:auto}.mdc-form-field.mdc-form-field--radio--flex{display:flex;width:auto}.mdc-theme-name--red.mdc-radio{--mdc-theme-secondary:#f44336}.mdc-theme-name--pink.mdc-radio{--mdc-theme-secondary:#e91e63}.mdc-theme-name--purple.mdc-radio{--mdc-theme-secondary:#9c27b0}.mdc-theme-name--deep-purple.mdc-radio{--mdc-theme-secondary:#673ab7}.mdc-theme-name--indigo.mdc-radio{--mdc-theme-secondary:#3f51b5}.mdc-theme-name--blue.mdc-radio{--mdc-theme-secondary:#2196f3}.mdc-theme-name--light-blue.mdc-radio{--mdc-theme-secondary:#03a9f4}.mdc-theme-name--cyan.mdc-radio{--mdc-theme-secondary:#00bcd4}.mdc-theme-name--teal.mdc-radio{--mdc-theme-secondary:#009688}.mdc-theme-name--green.mdc-radio{--mdc-theme-secondary:#4caf50}.mdc-theme-name--light-green.mdc-radio{--mdc-theme-secondary:#8bc34a}.mdc-theme-name--lime.mdc-radio{--mdc-theme-secondary:#cddc39}.mdc-theme-name--yellow.mdc-radio{--mdc-theme-secondary:#ffeb3b}.mdc-theme-name--amber.mdc-radio{--mdc-theme-secondary:#ffc107}.mdc-theme-name--orange.mdc-radio{--mdc-theme-secondary:#ff9800}.mdc-theme-name--deep-orange.mdc-radio{--mdc-theme-secondary:#ff5722}.mdc-theme-name--brown.mdc-radio{--mdc-theme-secondary:#795548}.mdc-theme-name--grey.mdc-radio{--mdc-theme-secondary:#9e9e9e}.mdc-theme-name--blue-grey.mdc-radio{--mdc-theme-secondary:#607d8b}.mdc-theme-name--black.mdc-radio{--mdc-theme-secondary:#313131}.mdc-deprecated-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}.mdc-deprecated-list:focus{outline:none}.mdc-deprecated-list-item__secondary-text{color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-background,rgba(0,0,0,.54))}.mdc-deprecated-list-item__graphic{background-color:transparent;color:rgba(0,0,0,.38);color:var(--mdc-theme-text-icon-on-background,rgba(0,0,0,.38))}.mdc-deprecated-list-item__meta{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-hint-on-background,rgba(0,0,0,.38))}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text{opacity:.38}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__secondary-text,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text{color:#000;color:var(--mdc-theme-on-surface,#000)}.mdc-deprecated-list-item--activated,.mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic,.mdc-deprecated-list-item--selected,.mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary,#6200ee)}.mdc-deprecated-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-deprecated-list-item__wrapper{display:block}.mdc-deprecated-list-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:16px;padding-right:16px;height:48px}.mdc-deprecated-list-item:focus{outline:none}.mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused:before,.mdc-deprecated-list-item:not(.mdc-deprecated-list-item--selected):focus:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused:before,.mdc-deprecated-list-item:not(.mdc-deprecated-list-item--selected):focus:before{border-color:CanvasText}}.mdc-deprecated-list-item.mdc-deprecated-list-item--selected:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px double transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-deprecated-list-item.mdc-deprecated-list-item--selected:before{border-color:CanvasText}}.mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:72px}.mdc-deprecated-list--image-list .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item{padding-left:0;padding-right:16px;height:72px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item{padding-left:16px;padding-right:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:20px;height:20px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}.mdc-deprecated-list-item__graphic{flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;-o-object-fit:cover;object-fit:cover;margin-left:0;margin-right:32px;width:24px;height:24px}.mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list-item__graphic{margin-left:32px;margin-right:0}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:32px;width:24px;height:24px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic{margin-left:32px;margin-right:0}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:40px;height:40px;border-radius:50%}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:40px;height:40px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}.mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:56px;height:56px}.mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:100px;height:56px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}.mdc-deprecated-list .mdc-deprecated-list-item__graphic{display:inline-flex}.mdc-deprecated-list-item__meta{margin-left:auto;margin-right:0}.mdc-deprecated-list-item__meta:not(.material-icons){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit)}.mdc-deprecated-list-item[dir=rtl] .mdc-deprecated-list-item__meta,[dir=rtl] .mdc-deprecated-list-item .mdc-deprecated-list-item__meta{margin-left:0;margin-right:auto}.mdc-deprecated-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-deprecated-list-item__text[for]{pointer-events:none}.mdc-deprecated-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list-item__primary-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-deprecated-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text:before,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text:before,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text:before,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text:before,.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text:after,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text:after,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text:after,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text:after,.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text:before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal}.mdc-deprecated-list-item__secondary-text:before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text{font-size:inherit}.mdc-deprecated-list--dense .mdc-deprecated-list-item{height:40px}.mdc-deprecated-list--two-line .mdc-deprecated-list-item__text{align-self:flex-start}.mdc-deprecated-list--two-line .mdc-deprecated-list-item{height:64px}.mdc-deprecated-list--two-line.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--image-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--video-list .mdc-deprecated-list-item{height:72px}.mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic{align-self:flex-start;margin-top:16px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--dense .mdc-deprecated-list-item{height:60px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:36px;height:36px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:16px;margin-right:0}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item{cursor:pointer}a.mdc-deprecated-list-item{color:inherit;text-decoration:none}.mdc-deprecated-list-divider{height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgba(0,0,0,.12)}.mdc-deprecated-list-divider--padded{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list-divider--padded[dir=rtl],[dir=rtl] .mdc-deprecated-list-divider--padded{margin-left:0;margin-right:16px}.mdc-deprecated-list-divider--inset{margin-left:72px;margin-right:0;width:calc(100% - 72px)}.mdc-deprecated-list-divider--inset[dir=rtl],[dir=rtl] .mdc-deprecated-list-divider--inset{margin-left:0;margin-right:72px}.mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded{margin-left:72px;margin-right:0;width:calc(100% - 88px)}.mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded[dir=rtl],[dir=rtl] .mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded{margin-left:0;margin-right:72px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:72px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:72px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:72px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:72px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:72px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:72px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading{margin-left:88px;margin-right:0;width:calc(100% - 88px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:88px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:88px;margin-right:0;width:calc(100% - 104px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:88px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:16px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading{margin-left:116px;margin-right:0;width:calc(100% - 116px)}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading{margin-left:0;margin-right:116px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:116px;margin-right:0;width:calc(100% - 132px)}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:0;margin-right:116px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:0;width:100%}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0;margin-right:0}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:0;width:calc(100% - 16px)}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl],[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0;margin-right:0}.mdc-deprecated-list-group .mdc-deprecated-list{padding:0}.mdc-deprecated-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);margin:.75rem 16px}.mdc-list-item__primary-text{color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}.mdc-list-item__secondary-text{color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-background,rgba(0,0,0,.54))}.mdc-list-item__overline-text{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-hint-on-background,rgba(0,0,0,.38))}.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--with-trailing-icon .mdc-list-item__end{background-color:transparent;color:rgba(0,0,0,.38);color:var(--mdc-theme-text-icon-on-background,rgba(0,0,0,.38))}.mdc-list-item__end{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-hint-on-background,rgba(0,0,0,.38))}.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end,.mdc-list-item--disabled .mdc-list-item__start{opacity:.38}.mdc-list-item--disabled .mdc-list-item__overline-text,.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text,.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end,.mdc-list-item--disabled.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:#000;color:var(--mdc-theme-on-surface,#000)}.mdc-list-item--activated .mdc-list-item__primary-text,.mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--selected .mdc-list-item__primary-text,.mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#6200ee;color:var(--mdc-theme-primary,#6200ee)}.mdc-deprecated-list-group__subheader{color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-list-divider:after{content:"";display:block;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#fff}}.mdc-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item__wrapper{display:block}.mdc-list-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer}.mdc-list-item:focus{outline:none}.mdc-list-item.mdc-list-item--with-one-line{height:48px}.mdc-list-item.mdc-list-item--with-two-lines{height:64px}.mdc-list-item.mdc-list-item--with-three-lines{height:88px}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start,.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end,.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--disabled,.mdc-list-item.mdc-list-item--non-interactive{cursor:auto}.mdc-list-item.mdc-ripple-upgraded--background-focused:before,.mdc-list-item:not(.mdc-list-item--selected):focus:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-list-item.mdc-ripple-upgraded--background-focused:before,.mdc-list-item:not(.mdc-list-item--selected):focus:before{border-color:CanvasText}}.mdc-list-item.mdc-list-item--selected:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px double transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-list-item.mdc-list-item--selected:before{border-color:CanvasText}}.mdc-list-item.mdc-list-item--selected:focus:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-list-item.mdc-list-item--selected:focus:before{border-color:CanvasText}}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor}.mdc-list-item__end,.mdc-list-item__start{flex-shrink:0;pointer-events:none}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-three-lines .mdc-list-item__content,.mdc-list-item--with-two-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__content[for]{pointer-events:none}.mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-list-item--with-three-lines .mdc-list-item__primary-text,.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-three-lines .mdc-list-item__primary-text:before,.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__primary-text:after,.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal}.mdc-list-item__secondary-text:before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item__overline-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-overline-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-overline-font-size,.75rem);line-height:2rem;line-height:var(--mdc-typography-overline-line-height,2rem);font-weight:500;font-weight:var(--mdc-typography-overline-font-weight,500);letter-spacing:.1666666667em;letter-spacing:var(--mdc-typography-overline-letter-spacing,.1666666667em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-overline-text-decoration,none);text-decoration:var(--mdc-typography-overline-text-decoration,none);text-transform:uppercase;text-transform:var(--mdc-typography-overline-text-transform,uppercase);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-three-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-three-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-avatar.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-avatar .mdc-list-item__start,.mdc-list-item--with-leading-avatar .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-avatar .mdc-list-item__start{border-radius:50%}.mdc-list-item--with-leading-icon .mdc-list-item__start{width:24px;height:24px}.mdc-list-item--with-leading-icon.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-icon.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:16px;margin-right:32px}.mdc-list-item--with-leading-icon .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-thumbnail.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-thumbnail.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-thumbnail.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-thumbnail .mdc-list-item__start,.mdc-list-item--with-leading-thumbnail .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-thumbnail .mdc-list-item__start{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-thumbnail .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-image.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-image.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-image.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-image .mdc-list-item__start,.mdc-list-item--with-leading-image .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-image .mdc-list-item__start{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-image .mdc-list-item__start{width:56px;height:56px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-one-line,.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-video.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-video.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-video.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-video .mdc-list-item__start{margin-left:0;margin-right:16px}.mdc-list-item--with-leading-video .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-video .mdc-list-item__start{margin-left:16px;margin-right:0}.mdc-list-item--with-leading-video .mdc-list-item__start{width:100px;height:56px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-one-line,.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-checkbox.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-checkbox.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}.mdc-list-item--with-leading-checkbox .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-checkbox .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-radio.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-radio.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-radio .mdc-list-item__start{margin-left:8px;margin-right:24px}.mdc-list-item--with-leading-radio .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-switch.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-leading-switch.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-switch.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-switch .mdc-list-item__start,.mdc-list-item--with-leading-switch .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-list-item--with-leading-switch .mdc-list-item__start{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-switch .mdc-list-item__start{width:36px;height:20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-trailing-icon.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-icon .mdc-list-item__end,.mdc-list-item--with-trailing-icon .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-icon .mdc-list-item__end{width:24px;height:24px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:flex-start}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-trailing-meta.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:28px;margin-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit)}.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-trailing-checkbox.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}.mdc-list-item--with-trailing-checkbox .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{width:40px;height:40px}.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-trailing-radio.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-radio .mdc-list-item__end{margin-left:24px;margin-right:8px}.mdc-list-item--with-trailing-radio .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio .mdc-list-item__end{width:40px;height:40px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-switch.mdc-list-item{padding-left:auto;padding-right:0}.mdc-list-item--with-trailing-switch.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-switch.mdc-list-item{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-switch .mdc-list-item__end,.mdc-list-item--with-trailing-switch .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-list-item--with-trailing-switch .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-switch .mdc-list-item__end{width:36px;height:20px}.mdc-list-item--with-trailing-switch.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item,.mdc-list-item[dir=rtl],[dir=rtl] .mdc-list-item{padding-left:16px;padding-right:16px}.mdc-list-group .mdc-deprecated-list{padding:0}.mdc-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);margin:.75rem 16px}.mdc-list-divider{background-color:rgba(0,0,0,.12);height:1px;padding:0;background-clip:content-box}.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset,.mdc-list-divider.mdc-list-divider--with-leading-inset{padding-left:16px;padding-right:auto}.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset,.mdc-list-divider.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider.mdc-list-divider--with-leading-inset{padding-left:auto;padding-right:16px}.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider.mdc-list-divider--with-trailing-inset[dir=rtl],[dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider.mdc-list-divider--with-trailing-inset{padding-left:16px;padding-right:auto}.mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset{padding-left:0;padding-right:auto}.mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset[dir=rtl],[dir=rtl] .mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset{padding-left:auto;padding-right:0}.mdc-list-divider[dir=rtl],[dir=rtl] .mdc-list-divider{padding:0}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-deprecated-list-item__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-list-item__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-activated-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-deprecated-list-item__ripple:before{opacity:.16;opacity:var(--mdc-ripple-hover-opacity,.16)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-activated-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-list-item__ripple:before{opacity:.16;opacity:var(--mdc-ripple-hover-opacity,.16)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple:before{opacity:.08;opacity:var(--mdc-ripple-selected-opacity,.08)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-hover-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple:before{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-focus-opacity,.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple:after{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-press-opacity,.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple:before{opacity:.08;opacity:var(--mdc-ripple-selected-opacity,.08)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple:after,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-hover-opacity,.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-focus-opacity,.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-press-opacity,.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-deprecated-list-item--disabled{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple:before,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:after,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple:before,.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,.mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple:before,.mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}:not(.mdc-list-item--disabled).mdc-list-item{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:after,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:after,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:after,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item:hover .mdc-list-item__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-activated-opacity,.12)}:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple:after,:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item--activated:hover .mdc-list-item__ripple:before{opacity:.16;opacity:var(--mdc-ripple-hover-opacity,.16)}:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple:before{opacity:.08;opacity:var(--mdc-ripple-selected-opacity,.08)}:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple:after,:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item--selected:hover .mdc-list-item__ripple:before{opacity:.12;opacity:var(--mdc-ripple-hover-opacity,.12)}:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-focus-opacity,.2)}:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.2;opacity:var(--mdc-ripple-press-opacity,.2)}:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.2)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-list-item--disabled{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-list-item--disabled .mdc-list-item__ripple:after,.mdc-list-item--disabled .mdc-list-item__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-list-item--disabled .mdc-list-item__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-list-item--disabled .mdc-list-item__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-list-item--disabled .mdc-list-item__ripple:after,.mdc-list-item--disabled .mdc-list-item__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-list-item--disabled .mdc-list-item__ripple:after,.mdc-list-item--disabled .mdc-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,#000)}.mdc-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,.mdc-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-list-item--disabled .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width,calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height,calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,transform .12s cubic-bezier(0,0,.2,1),height .25s cubic-bezier(0,0,.2,1);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface,#fff);color:#000;color:var(--mdc-theme-on-surface,#000);border-radius:4px;border-radius:var(--mdc-shape-medium,4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity 75ms linear}.mdc-menu-surface[dir=rtl],[dir=rtl] .mdc-menu-surface{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mdc-menu{min-width:112px;min-width:var(--mdc-menu-min-width,112px)}.mdc-menu .mdc-deprecated-list,.mdc-menu .mdc-deprecated-list-item__graphic,.mdc-menu .mdc-deprecated-list-item__meta{color:rgba(0,0,0,.87)}.mdc-menu .mdc-deprecated-list,.mdc-menu .mdc-list{position:relative}.mdc-menu .mdc-deprecated-list .mdc-elevation-overlay,.mdc-menu .mdc-list .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-menu .mdc-deprecated-list-divider{margin:8px 0}.mdc-menu .mdc-deprecated-list-item{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mdc-menu .mdc-deprecated-list-item--disabled{cursor:auto}.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__graphic,.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__text{pointer-events:none}.mdc-menu__selection-group{padding:0;fill:currentColor}.mdc-menu__selection-group .mdc-deprecated-list-item{padding-left:56px;padding-right:16px}.mdc-menu__selection-group .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-menu__selection-group .mdc-deprecated-list-item{padding-left:16px;padding-right:56px}.mdc-menu__selection-group .mdc-menu__selection-group-icon{left:16px;right:auto;display:none;position:absolute;top:50%;transform:translateY(-50%)}.mdc-menu__selection-group .mdc-menu__selection-group-icon[dir=rtl],[dir=rtl] .mdc-menu__selection-group .mdc-menu__selection-group-icon{left:auto;right:16px}.mdc-menu-item--selected .mdc-menu__selection-group-icon{display:inline}.mdc-select{display:inline-flex;position:relative}.mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text{color:rgba(0,0,0,.87)}.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:rgba(0,0,0,.38)}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:rgba(98,0,238,.87)}.mdc-select.mdc-select--disabled .mdc-floating-label{color:rgba(0,0,0,.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:rgba(0,0,0,.54)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#6200ee;fill:var(--mdc-theme-primary,#6200ee)}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:rgba(0,0,0,.38)}.mdc-select:not(.mdc-select--disabled)+.mdc-select-helper-text{color:rgba(0,0,0,.6)}.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:rgba(0,0,0,.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__icon{color:rgba(0,0,0,.54)}.mdc-select.mdc-select--disabled .mdc-select__icon{color:rgba(0,0,0,.38)}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:red}.mdc-select.mdc-select--disabled .mdc-floating-label{color:GrayText}.mdc-select.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:GrayText}.mdc-select.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select.mdc-select--disabled .mdc-notched-outline__trailing{border-color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__icon,.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:GrayText}}.mdc-select .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-select .mdc-select__anchor{padding-left:16px;padding-right:0}.mdc-select .mdc-select__anchor[dir=rtl],[dir=rtl] .mdc-select .mdc-select__anchor{padding-left:0;padding-right:16px}.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor,.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor[dir=rtl],[dir=rtl] .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor{padding-left:0;padding-right:0}.mdc-select .mdc-select__icon{width:24px;height:24px;font-size:24px}.mdc-select .mdc-select__dropdown-icon{width:24px;height:24px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item,.mdc-select .mdc-select__menu .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:12px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic[dir=rtl],[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic{margin-left:12px;margin-right:0}.mdc-select__dropdown-icon{margin-left:12px;margin-right:12px;display:inline-flex;position:relative;align-self:center;align-items:center;justify-content:center;flex-shrink:0;pointer-events:none}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active,.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{position:absolute;top:0;left:0}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-graphic{width:41.6666666667%;height:20.8333333333%}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:1;transition:opacity 75ms linear 75ms}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:0;transition:opacity 75ms linear}.mdc-select__dropdown-icon[dir=rtl],[dir=rtl] .mdc-select__dropdown-icon{margin-left:12px;margin-right:12px}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:0;transition:opacity 49.5ms linear}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:1;transition:opacity .1005s linear 49.5ms}.mdc-select__anchor{width:200px;min-width:0;flex:1 1 auto;position:relative;box-sizing:border-box;overflow:hidden;outline:none;cursor:pointer}.mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-106%) scale(.75)}.mdc-select__selected-text-container{display:flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none;box-sizing:border-box;width:auto;min-width:0;flex-grow:1;height:28px;border:none;outline:none;padding:0;background-color:transparent;color:inherit}.mdc-select__selected-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height,1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:100%;text-align:left}.mdc-select__selected-text[dir=rtl],[dir=rtl] .mdc-select__selected-text{text-align:right}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-floating-label,.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label,.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--invalid+.mdc-select-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error,#b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-select__dropdown-icon,.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#b00020;fill:var(--mdc-theme-error,#b00020)}.mdc-select--disabled{cursor:default;pointer-events:none}.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item,.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item[dir=rtl],[dir=rtl] .mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item{padding-left:12px;padding-right:12px}.mdc-select__menu .mdc-deprecated-list .mdc-select__icon,.mdc-select__menu .mdc-deprecated-list .mdc-select__icon[dir=rtl],.mdc-select__menu .mdc-list .mdc-select__icon,.mdc-select__menu .mdc-list .mdc-select__icon[dir=rtl],[dir=rtl] .mdc-select__menu .mdc-deprecated-list .mdc-select__icon,[dir=rtl] .mdc-select__menu .mdc-list .mdc-select__icon{margin-left:0;margin-right:0}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--activated,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--selected,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic{color:#000;color:var(--mdc-theme-on-surface,#000)}.mdc-select__menu .mdc-list-item__start{display:inline-flex;align-items:center}.mdc-select__option,.mdc-select__option[dir=rtl],[dir=rtl] .mdc-select__option{padding-left:16px;padding-right:16px}.mdc-select__one-line-option.mdc-list-item--with-one-line{height:48px}.mdc-select__two-line-option.mdc-list-item--with-two-lines{height:64px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__start{margin-top:20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text:before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text:after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-select__two-line-option.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end:before{display:inline-block;width:0;height:36px;content:"";vertical-align:0}.mdc-select__option-with-leading-content{padding-left:0;padding-right:12px}.mdc-select__option-with-leading-content.mdc-list-item{padding-left:0;padding-right:auto}.mdc-select__option-with-leading-content.mdc-list-item[dir=rtl],[dir=rtl] .mdc-select__option-with-leading-content.mdc-list-item{padding-left:auto;padding-right:0}.mdc-select__option-with-leading-content .mdc-list-item__start{margin-left:12px;margin-right:0}.mdc-select__option-with-leading-content .mdc-list-item__start[dir=rtl],[dir=rtl] .mdc-select__option-with-leading-content .mdc-list-item__start{margin-left:0;margin-right:12px}.mdc-select__option-with-leading-content .mdc-list-item__start{width:36px;height:24px}.mdc-select__option-with-leading-content[dir=rtl],[dir=rtl] .mdc-select__option-with-leading-content{padding-left:12px;padding-right:0}.mdc-select__option-with-meta.mdc-list-item{padding-left:auto;padding-right:0}.mdc-select__option-with-meta.mdc-list-item[dir=rtl],[dir=rtl] .mdc-select__option-with-meta.mdc-list-item{padding-left:0;padding-right:auto}.mdc-select__option-with-meta .mdc-list-item__end,.mdc-select__option-with-meta .mdc-list-item__end[dir=rtl],[dir=rtl] .mdc-select__option-with-meta .mdc-list-item__end{margin-left:12px;margin-right:12px}.mdc-select--filled .mdc-select__anchor{height:56px;display:flex;align-items:baseline}.mdc-select--filled .mdc-select__anchor:before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text:before{content:"​"}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor:before{display:none}.mdc-select--filled .mdc-select__anchor{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-select--filled:not(.mdc-select--disabled) .mdc-select__anchor{background-color:#f5f5f5}.mdc-select--filled.mdc-select--disabled .mdc-select__anchor{background-color:#fafafa}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.42)}.mdc-select--filled:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.87)}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple:after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary,#6200ee)}.mdc-select--filled.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.06)}.mdc-select--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-select--filled .mdc-floating-label--float-above{max-width:calc(133.33333% - 85.33333px)}.mdc-select--filled .mdc-menu-surface--is-open-below{border-top-left-radius:0;border-top-right-radius:0}.mdc-select--filled.mdc-select--focused.mdc-line-ripple:after{transform:scaleY(2);opacity:1}.mdc-select--filled .mdc-floating-label{left:16px;right:auto}.mdc-select--filled .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-select--filled .mdc-floating-label{left:auto;right:16px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{left:48px;right:auto}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{left:auto;right:48px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label--float-above{max-width:calc(133.33333% - 128px)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple:before,.mdc-select--invalid:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error,#b00020)}.mdc-select--outlined{border:none}.mdc-select--outlined .mdc-select__anchor{height:56px}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-56px .25s 1;animation:mdc-floating-label-shake-float-above-select-outlined-56px .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-56px{0%{transform:translateX(0) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-34.75px) scale(.75)}to{transform:translateX(0) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-56px{0%{transform:translateX(0) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-34.75px) scale(.75)}to{transform:translateX(0) translateY(-34.75px) scale(.75)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small,4px)}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl],[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small,4px);border-bottom-left-radius:0}@supports(top:max(0%)){.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-shape-small,4px))}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small,4px);border-bottom-left-radius:0}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl],[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small,4px)}@supports(top:max(0%)){.mdc-select--outlined .mdc-select__anchor{padding-left:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-select--outlined .mdc-select__anchor[dir=rtl],[dir=rtl] .mdc-select--outlined .mdc-select__anchor{padding-left:0}@supports(top:max(0%)){.mdc-select--outlined .mdc-select__anchor[dir=rtl],[dir=rtl] .mdc-select--outlined .mdc-select__anchor{padding-right:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}.mdc-select--outlined+.mdc-select-helper-text{margin-left:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-select--outlined+.mdc-select-helper-text[dir=rtl],[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text{margin-left:0}@supports(top:max(0%)){.mdc-select--outlined+.mdc-select-helper-text[dir=rtl],[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text{margin-right:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-select--outlined.mdc-select--disabled .mdc-select__anchor,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor{background-color:transparent}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.38)}.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.87)}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px;border-color:#6200ee;border-color:var(--mdc-theme-primary,#6200ee)}.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.06)}.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-select--outlined .mdc-select__anchor{display:flex;align-items:baseline;overflow:visible}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined .25s 1;animation:mdc-floating-label-shake-float-above-select-outlined .25s 1}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(.75);font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text:before{content:"​"}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--outlined .mdc-select__anchor:before{display:none}.mdc-select--outlined .mdc-select__selected-text-container{display:flex;border:none;z-index:1;background-color:transparent}.mdc-select--outlined .mdc-select__icon{z-index:2}.mdc-select--outlined .mdc-floating-label{line-height:1.15rem;left:4px;right:auto}.mdc-select--outlined .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-select--outlined .mdc-floating-label{left:auto;right:4px}.mdc-select--outlined.mdc-select--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__trailing,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error,#b00020)}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px;border-color:#b00020;border-color:var(--mdc-theme-error,#b00020)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label{left:36px;right:auto}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label{left:auto;right:36px}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(.75)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(32px) scale(.75)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px .25s 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px{0%{transform:translateX(-32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(-32px) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px{0%{transform:translateX(-32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(-32px) translateY(-34.75px) scale(.75)}}.mdc-select--outlined.mdc-select--with-leading-icon[dir=rtl] .mdc-floating-label--shake,[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px .25s 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl{0%{transform:translateX(32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% + 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% + 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(32px) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl{0%{transform:translateX(32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% + 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% + 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(32px) translateY(-34.75px) scale(.75)}}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 96px)}.mdc-select--outlined .mdc-menu-surface{margin-bottom:8px}.mdc-select--outlined .mdc-menu-surface--is-open-below,.mdc-select--outlined.mdc-select--no-label .mdc-menu-surface{margin-bottom:0}.mdc-select__anchor{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-select__anchor .mdc-select__ripple:after,.mdc-select__anchor .mdc-select__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-select__anchor .mdc-select__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-select__anchor .mdc-select__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-select__anchor.mdc-ripple-upgraded--unbounded .mdc-select__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-select__anchor.mdc-ripple-upgraded--foreground-activation .mdc-select__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-select__anchor.mdc-ripple-upgraded--foreground-deactivation .mdc-select__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-select__anchor .mdc-select__ripple:after,.mdc-select__anchor .mdc-select__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-select__anchor .mdc-select__ripple:after,.mdc-select__anchor .mdc-select__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,rgba(0,0,0,.87))}.mdc-select__anchor.mdc-ripple-surface--hover .mdc-select__ripple:before,.mdc-select__anchor:hover .mdc-select__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-select__anchor.mdc-ripple-upgraded--background-focused .mdc-select__ripple:before,.mdc-select__anchor:not(.mdc-ripple-upgraded):focus .mdc-select__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-select__anchor .mdc-select__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple:after,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple:before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple:before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple:after{transition:opacity .15s linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple:after,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple:before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple:before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple:before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple:after{transition:opacity .15s linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-select-helper-text{margin:0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal}.mdc-select-helper-text,.mdc-select-helper-text[dir=rtl],[dir=rtl] .mdc-select-helper-text{margin-left:16px;margin-right:16px}.mdc-select-helper-text:before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-select-helper-text--validation-msg{opacity:0;transition:opacity .18s cubic-bezier(.4,0,.2,1)}.mdc-select--invalid+.mdc-select-helper-text--validation-msg,.mdc-select-helper-text--validation-msg-persistent{opacity:1}.mdc-select--with-leading-icon .mdc-select__icon{display:inline-block;box-sizing:border-box;border:none;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;align-self:center;background-color:transparent;fill:currentColor;margin-left:12px;margin-right:12px}.mdc-select--with-leading-icon .mdc-select__icon[dir=rtl],[dir=rtl] .mdc-select--with-leading-icon .mdc-select__icon{margin-left:12px;margin-right:12px}.mdc-select__icon:not([tabindex]),.mdc-select__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label{color:#000}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:var(--mdc-theme-primary,#689f38)}.mdc-select:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:#000}.mdc-select.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:var(--mdc-theme-primary,#689f38)}.mdc-select .mdc-deprecated-list-item,.mdc-select .mdc-list-item{align-items:center;height:48px}.select-wrapper{display:inline-block;margin:.2rem 0 1.2rem;padding-top:.5rem}.mdc-select.w-full,.select-wrapper.w-full{width:100%}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#f44336}.mdc-select.mdc-theme-name--red.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#f44336}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--red.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#f44336}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--red:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#f44336}.mdc-select.mdc-theme-name--red.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--red .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--red .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--red .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--red .mdc-list-item__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#e91e63}.mdc-select.mdc-theme-name--pink.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#e91e63}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--pink.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#e91e63}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--pink:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#e91e63}.mdc-select.mdc-theme-name--pink.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--pink .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--pink .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--pink .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--pink .mdc-list-item__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#9c27b0}.mdc-select.mdc-theme-name--purple.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#9c27b0}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--purple.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#9c27b0}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#9c27b0}.mdc-select.mdc-theme-name--purple.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--purple .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--purple .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--purple .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--purple .mdc-list-item__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#673ab7}.mdc-select.mdc-theme-name--deep-purple.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#673ab7}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--deep-purple.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#673ab7}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--deep-purple:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#673ab7}.mdc-select.mdc-theme-name--deep-purple.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--deep-purple .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--deep-purple .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--deep-purple .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--deep-purple .mdc-list-item__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#3f51b5}.mdc-select.mdc-theme-name--indigo.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#3f51b5}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--indigo.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#3f51b5}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--indigo:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#3f51b5}.mdc-select.mdc-theme-name--indigo.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--indigo .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--indigo .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--indigo .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--indigo .mdc-list-item__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#2196f3}.mdc-select.mdc-theme-name--blue.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#2196f3}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--blue.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#2196f3}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#2196f3}.mdc-select.mdc-theme-name--blue.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--blue .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--blue .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--blue .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--blue .mdc-list-item__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#03a9f4}.mdc-select.mdc-theme-name--light-blue.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#03a9f4}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--light-blue.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#03a9f4}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--light-blue:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#03a9f4}.mdc-select.mdc-theme-name--light-blue.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--light-blue .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--light-blue .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--light-blue .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--light-blue .mdc-list-item__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#00bcd4}.mdc-select.mdc-theme-name--cyan.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#00bcd4}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--cyan.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#00bcd4}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--cyan:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#00bcd4}.mdc-select.mdc-theme-name--cyan.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--cyan .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--cyan .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--cyan .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--cyan .mdc-list-item__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#009688}.mdc-select.mdc-theme-name--teal.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#009688}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--teal.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#009688}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--teal:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#009688}.mdc-select.mdc-theme-name--teal.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--teal .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--teal .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--teal .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--teal .mdc-list-item__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#4caf50}.mdc-select.mdc-theme-name--green.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#4caf50}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--green.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#4caf50}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#4caf50}.mdc-select.mdc-theme-name--green.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--green .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--green .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--green .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--green .mdc-list-item__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#8bc34a}.mdc-select.mdc-theme-name--light-green.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#8bc34a}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--light-green.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#8bc34a}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--light-green:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#8bc34a}.mdc-select.mdc-theme-name--light-green.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--light-green .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--light-green .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--light-green .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--light-green .mdc-list-item__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#cddc39}.mdc-select.mdc-theme-name--lime.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#cddc39}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--lime.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#cddc39}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--lime:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#cddc39}.mdc-select.mdc-theme-name--lime.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--lime .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--lime .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--lime .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--lime .mdc-list-item__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#ffeb3b}.mdc-select.mdc-theme-name--yellow.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#ffeb3b}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--yellow.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#ffeb3b}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--yellow:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#ffeb3b}.mdc-select.mdc-theme-name--yellow.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--yellow .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--yellow .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--yellow .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--yellow .mdc-list-item__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#ffc107}.mdc-select.mdc-theme-name--amber.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#ffc107}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--amber.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#ffc107}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--amber:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#ffc107}.mdc-select.mdc-theme-name--amber.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--amber .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--amber .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--amber .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--amber .mdc-list-item__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#ff9800}.mdc-select.mdc-theme-name--orange.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#ff9800}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--orange.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#ff9800}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#ff9800}.mdc-select.mdc-theme-name--orange.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--orange .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--orange .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--orange .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--orange .mdc-list-item__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#ff5722}.mdc-select.mdc-theme-name--deep-orange.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#ff5722}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--deep-orange.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#ff5722}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--deep-orange:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#ff5722}.mdc-select.mdc-theme-name--deep-orange.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--deep-orange .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--deep-orange .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--deep-orange .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--deep-orange .mdc-list-item__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#795548}.mdc-select.mdc-theme-name--brown.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#795548}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--brown.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#795548}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--brown:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#795548}.mdc-select.mdc-theme-name--brown.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--brown .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--brown .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--brown .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--brown .mdc-list-item__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--grey.mdc-select--disabled .mdc-line-ripple:before,.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--grey.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#9e9e9e}.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--grey.mdc-select--disabled .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--grey .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--grey .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--grey .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--grey .mdc-list-item__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#607d8b}.mdc-select.mdc-theme-name--blue-grey.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#607d8b}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--blue-grey.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#607d8b}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--blue-grey:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#607d8b}.mdc-select.mdc-theme-name--blue-grey.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--blue-grey .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--blue-grey .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--blue-grey .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--blue-grey .mdc-list-item__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled) .mdc-line-ripple:before{border-bottom-color:#000}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled) .mdc-line-ripple:after,.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled):hover .mdc-line-ripple:before{border-bottom-color:#313131}.mdc-select.mdc-theme-name--black.mdc-select--disabled .mdc-line-ripple:before{border-bottom-color:#9e9e9e}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#313131}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-select.mdc-theme-name--black.mdc-select--disabled .mdc-floating-label{color:#9e9e9e}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled) .mdc-floating-label--float-above{color:#000}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-floating-label--float-above{color:#313131}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#000}.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon,.mdc-select.mdc-theme-name--black:not(.mdc-select--disabled):not(.mdc-select--focused):hover .mdc-select__dropdown-icon{fill:#313131}.mdc-select.mdc-theme-name--black.mdc-select--disabled .mdc-select__dropdown-icon{fill:#9e9e9e}.mdc-select.mdc-theme-name--black .mdc-deprecated-list-item__ripple:after,.mdc-select.mdc-theme-name--black .mdc-deprecated-list-item__ripple:before,.mdc-select.mdc-theme-name--black .mdc-list-item__ripple:after,.mdc-select.mdc-theme-name--black .mdc-list-item__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.select-wrapper.mdc-text-field--invalid:not(.mdc-select--disabled) .mdc-select .mdc-floating-label,.select-wrapper.mdc-text-field--invalid:not(.mdc-select--disabled) .mdc-select .mdc-floating-label.mdc-floating-label--float-above,.select-wrapper.mdc-text-field--invalid:not(.mdc-select--disabled) .mdc-select .mdc-floating-label.mdc-floating-label--required.mdc-floating-label--float-above,.select-wrapper.mdc-text-field--invalid:not(.mdc-select--disabled) .mdc-select .mdc-select__selected-text-container .mdc-select__selected-text{color:#d84315}.select-wrapper.mdc-text-field--invalid:not(.mdc-select--disabled) .mdc-select-helper-text.mdc-select-helper-text--validation-msg{color:#d84315;opacity:unset}.mdc-select .mdc-select__anchor{width:auto}.mdc-select .mdc-menu-surface.mdc-menu-surface--open.mdc-menu.mdc-select__menu{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.mdc-select .mdc-menu-surface .foxy-list .foxy-list-item [role=option] .mdc-deprecated-list-item__text{text-wrap:initial}.mdc-select2{display:inline-block;height:auto;width:100%;min-width:225px;position:relative;text-align:left}.mdc-select2 label{left:16px;max-width:calc(100% - 64px);pointer-events:none;position:absolute;right:auto;top:27px;transform:translateY(-50%);transform-origin:left top;transition:transform .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1);will-change:transform;z-index:1}.mdc-select2.mdc-select2--has-value label{left:16px;max-width:calc(133.33333% - 85.33333px);opacity:.75;transform:translateY(-108%) scale(.75);color:var(--mdc-theme-primary)}.md-input-container .mdc-select2+.md-helper-text{bottom:-7px}.md-input-container .mdc-select2.has-helper-text{height:77px}.select2-container{background-color:#f5f5f5;border-radius:var(--mdc-shape-small,4px) var(--mdc-shape-small,4px) 0 0;border-bottom:1px solid rgba(0,0,0,.4);box-sizing:border-box;display:block;margin:0;height:56px;max-width:100%;min-width:200px;padding-left:16px;position:relative;vertical-align:middle}.select2-container :focus{outline:0}.select2-container:focus-within,.select2-container:hover{background-color:#ededed}.select2-container.select2-container--open,.select2-container:focus-within{border-bottom:2px solid var(--mdc-theme-primary)}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline;list-style:none;padding:0}.select2-container .select2-selection--multiple .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;margin-left:5px;padding:0;max-width:100%;resize:none;height:18px;vertical-align:bottom;font-family:sans-serif;overflow:hidden;word-break:keep-all}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-container .select2-dropdown{border:none;margin-top:8px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12)}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-results__option--selectable{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.select2-container--default .select2-selection--single{align-items:baseline;display:flex;height:52px;padding-top:4px;width:100%;color:var(--mdc-theme-text-primary-on-light)}.select2-container--default .select2-selection--single .select2-selection__rendered{flex-grow:1;line-height:56px;padding:.5rem 0 0}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;height:54px;margin-right:20px;padding-right:0}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#9e9e9e}.select2-container--default .select2-selection--single .select2-selection__arrow{height:24px;margin:0 12px;text-align:center;width:24px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:rgba(0,0,0,.54) transparent transparent transparent;border-style:solid;border-width:5px 5px 0 5px;font-size:0;height:0;position:relative;top:-2px;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent rgba(0,0,0,.54) transparent;border-width:0 5px 5px 5px;font-size:0;top:-8px}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default.select2-selection--multiple label{left:0!important}.select2-container--default .select2-search--dropdown .select2-search__field{background:#f5f5f5;border:0 none;border-bottom:1px solid rgba(0,0,0,.54);border-radius:var(--mdc-shape-small,4px) var(--mdc-shape-small,4px) 0 0;font-size:inherit;padding:.75rem}.select2-container--default .select2-search--dropdown .select2-search__field:focus{border-bottom:2px solid var(--mdc-theme-primary)}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option{align-items:center;min-height:3rem;padding:1em 16px;position:relative;color:var(--mdc-theme-text-primary-on-light)}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--group{padding:0}.select2-container--default .select2-results__option--disabled{color:#9e9e9e}.select2-container--default .select2-results__option--selected{background-color:#eee}.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{background-color:#f5f5f5}.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable.select2-results__option--selected{background-color:#e0e0e0}.select2-container--default .select2-results__group{cursor:default;display:block;font-size:.9em;font-weight:400;opacity:.5;padding:6px}.select2-selection--multiple label{left:0!important}.ModeMultiple+span.select2-container{height:auto;margin-top:5px;margin-bottom:-7px}.ModeMultiple+span.select2-container.select2{margin-top:0;background-color:transparent!important;padding-left:0!important;display:inline-block!important}.ModeMultiple+span.select2-container .selection{height:auto;min-height:32px}.ModeMultiple+span.select2-container .selection .select2-selection{height:auto!important;margin-top:4px;min-height:32px}.ModeMultiple+span.select2-container .select2-selection--multiple{display:flex!important;justify-content:flex-start;align-items:center;min-height:40px;height:48px!important;padding-top:16px;flex-wrap:wrap;gap:3px}.ModeMultiple+span.select2-container .select2-selection--multiple ul{padding:0;list-style:none}.ModeMultiple+span.select2-container .select2-selection--multiple .select2-selection__rendered{display:contents;padding:0;width:auto;line-height:17px;height:auto;overflow:unset}.ModeMultiple+span.select2-container .select2-selection--multiple li{display:inline-flex;margin-right:5px;flex-direction:row-reverse;padding:4px 6px;border-radius:15px;margin-top:0;overflow:hidden;text-overflow:ellipsis}.ModeMultiple+span.select2-container .select2-selection--multiple li:hover{filter:brightness(.9)}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove{border:none;border-radius:50%;width:1.2rem;height:1.2rem;position:relative;cursor:pointer}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove span{font-size:0!important}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove:after,.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove:before{content:"";position:absolute;top:50%;left:50%;width:80%;height:2px;background-color:currentColor}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove:before{transform:translate(-50%,-50%) rotate(45deg)}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__remove:after{transform:translate(-50%,-50%) rotate(-45deg)}.ModeMultiple+span.select2-container .select2-selection--multiple li .select2-selection__choice__display{font-size:.875rem;padding:1px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ModeMultiple+span.select2-container .select2-selection--multiple .select2-search--inline textarea{display:inline;line-height:1.3em}.md-theme-red ul li.select2-selection__choice{background-color:#ffcdd2;color:#000}.md-theme-red ul li.select2-selection__choice button{background-color:#f44336;color:#ffcdd2}.md-theme-red ul li.select2-selection__choice button:hover{background-color:foxy-colors(red,900)}.md-theme-red .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-red .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(red,500)}.md-theme-pink ul li.select2-selection__choice{background-color:#f8bbd0;color:#000}.md-theme-pink ul li.select2-selection__choice button{background-color:#e91e63;color:#f8bbd0}.md-theme-pink ul li.select2-selection__choice button:hover{background-color:foxy-colors(pink,900)}.md-theme-pink .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-pink .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(pink,500)}.md-theme-purple ul li.select2-selection__choice{background-color:#e1bee7;color:#000}.md-theme-purple ul li.select2-selection__choice button{background-color:#9c27b0;color:#e1bee7}.md-theme-purple ul li.select2-selection__choice button:hover{background-color:foxy-colors(purple,900)}.md-theme-purple .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-purple .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(purple,500)}.md-theme-deep-purple ul li.select2-selection__choice{background-color:#d1c4e9;color:#000}.md-theme-deep-purple ul li.select2-selection__choice button{background-color:#673ab7;color:#d1c4e9}.md-theme-deep-purple ul li.select2-selection__choice button:hover{background-color:foxy-colors(deep-purple,900)}.md-theme-deep-purple .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-deep-purple .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(deep-purple,500)}.md-theme-indigo ul li.select2-selection__choice{background-color:#c5cae9;color:#000}.md-theme-indigo ul li.select2-selection__choice button{background-color:#3f51b5;color:#c5cae9}.md-theme-indigo ul li.select2-selection__choice button:hover{background-color:foxy-colors(indigo,900)}.md-theme-indigo .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-indigo .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(indigo,500)}.md-theme-blue ul li.select2-selection__choice{background-color:#bbdefb;color:#000}.md-theme-blue ul li.select2-selection__choice button{background-color:#2196f3;color:#bbdefb}.md-theme-blue ul li.select2-selection__choice button:hover{background-color:foxy-colors(blue,900)}.md-theme-blue .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-blue .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(blue,500)}.md-theme-light-blue ul li.select2-selection__choice{background-color:#b3e5fc;color:#000}.md-theme-light-blue ul li.select2-selection__choice button{background-color:#03a9f4;color:#b3e5fc}.md-theme-light-blue ul li.select2-selection__choice button:hover{background-color:foxy-colors(light-blue,900)}.md-theme-light-blue .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-light-blue .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(light-blue,500)}.md-theme-cyan ul li.select2-selection__choice{background-color:#b2ebf2;color:#000}.md-theme-cyan ul li.select2-selection__choice button{background-color:#00bcd4;color:#b2ebf2}.md-theme-cyan ul li.select2-selection__choice button:hover{background-color:foxy-colors(cyan,900)}.md-theme-cyan .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-cyan .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(cyan,500)}.md-theme-teal ul li.select2-selection__choice{background-color:#b2dfdb;color:#000}.md-theme-teal ul li.select2-selection__choice button{background-color:#009688;color:#b2dfdb}.md-theme-teal ul li.select2-selection__choice button:hover{background-color:foxy-colors(teal,900)}.md-theme-teal .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-teal .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(teal,500)}.md-theme-green ul li.select2-selection__choice{background-color:#c8e6c9;color:#000}.md-theme-green ul li.select2-selection__choice button{background-color:#4caf50;color:#c8e6c9}.md-theme-green ul li.select2-selection__choice button:hover{background-color:foxy-colors(green,900)}.md-theme-green .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-green .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(green,500)}.md-theme-light-green ul li.select2-selection__choice{background-color:#dcedc8;color:#000}.md-theme-light-green ul li.select2-selection__choice button{background-color:#8bc34a;color:#dcedc8}.md-theme-light-green ul li.select2-selection__choice button:hover{background-color:foxy-colors(light-green,900)}.md-theme-light-green .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-light-green .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(light-green,500)}.md-theme-lime ul li.select2-selection__choice{background-color:#f0f4c3;color:#000}.md-theme-lime ul li.select2-selection__choice button{background-color:#cddc39;color:#f0f4c3}.md-theme-lime ul li.select2-selection__choice button:hover{background-color:foxy-colors(lime,900)}.md-theme-lime .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-lime .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(lime,500)}.md-theme-yellow ul li.select2-selection__choice{background-color:#fff9c4;color:#000}.md-theme-yellow ul li.select2-selection__choice button{background-color:#ffeb3b;color:#fff9c4}.md-theme-yellow ul li.select2-selection__choice button:hover{background-color:foxy-colors(#ff0,900)}.md-theme-yellow .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-yellow .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(#ff0,500)}.md-theme-amber ul li.select2-selection__choice{background-color:#ffecb3;color:#000}.md-theme-amber ul li.select2-selection__choice button{background-color:#ffc107;color:#ffecb3}.md-theme-amber ul li.select2-selection__choice button:hover{background-color:foxy-colors(amber,900)}.md-theme-amber .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-amber .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(amber,500)}.md-theme-orange ul li.select2-selection__choice{background-color:#ffe0b2;color:#000}.md-theme-orange ul li.select2-selection__choice button{background-color:#ff9800;color:#ffe0b2}.md-theme-orange ul li.select2-selection__choice button:hover{background-color:foxy-colors(orange,900)}.md-theme-orange .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-orange .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(orange,500)}.md-theme-deep-orange ul li.select2-selection__choice{background-color:#ffccbc;color:#000}.md-theme-deep-orange ul li.select2-selection__choice button{background-color:#ff5722;color:#ffccbc}.md-theme-deep-orange ul li.select2-selection__choice button:hover{background-color:foxy-colors(deep-orange,900)}.md-theme-deep-orange .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-deep-orange .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(deep-orange,500)}.md-theme-brown ul li.select2-selection__choice{background-color:#d7ccc8;color:#000}.md-theme-brown ul li.select2-selection__choice button{background-color:#795548;color:#d7ccc8}.md-theme-brown ul li.select2-selection__choice button:hover{background-color:foxy-colors(brown,900)}.md-theme-brown .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-brown .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(brown,500)}.md-theme-grey ul li.select2-selection__choice{background-color:#f5f5f5;color:#000}.md-theme-grey ul li.select2-selection__choice button{background-color:#9e9e9e;color:#f5f5f5}.md-theme-grey ul li.select2-selection__choice button:hover{background-color:foxy-colors(grey,900)}.md-theme-grey .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-grey .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(grey,500)}.md-theme-blue-grey ul li.select2-selection__choice{background-color:#cfd8dc;color:#000}.md-theme-blue-grey ul li.select2-selection__choice button{background-color:#607d8b;color:#cfd8dc}.md-theme-blue-grey ul li.select2-selection__choice button:hover{background-color:foxy-colors(blue-grey,900)}.md-theme-blue-grey .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-blue-grey .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(blue-grey,500)}.md-theme-black ul li.select2-selection__choice{background-color:#535353;color:#fff}.md-theme-black ul li.select2-selection__choice button{background-color:#313131;color:#535353}.md-theme-black ul li.select2-selection__choice button:hover{background-color:foxy-colors(#000,900)}.md-theme-black .select2-results__options{padding:8px 0;max-height:256px!important}.md-theme-black .select2-results__options .select2-results__option.select2-results__option--selected{color:foxy-colors(#000,500)}.foxy-checkbox-list-menu{display:flex;flex-direction:column;width:100%;position:relative;display:inline-block}.foxy-checkbox-list-menu .textfield-container{position:relative}.foxy-checkbox-list-menu ul{list-style:none;margin:0;padding:.75rem 0}.foxy-checkbox-list-menu ul li{margin:0;padding:2px 20px 2px 2px}.foxy-checkbox-list-menu ul li:focus-within{background-color:#d3d3d3}.foxy-checkbox-list-menu ul li:hover{background-color:#ededed}.foxy-checkbox-list-menu .md-input-container:before{position:absolute;display:inline-block;margin-left:6px;margin-top:2px;top:67%;right:0;transform:translateY(-50%) scaleY(.45) scaleX(.85);transition:all .15s linear;content:"▼";color:gray}.foxy-checkbox-list-menu .menu-popup{position:absolute;top:77px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.35);z-index:9999;border-radius:4px}.foxy-checkbox-list-menu .popupOverlay{position:fixed;z-index:-1;top:0;left:0;width:100%;height:100%;overflow:auto}.foxy-checkbox-list-menu .content-container{overflow-x:auto;overflow-y:auto;width:auto;max-height:256px;color:currentColor}.foxy-checkbox-list-menu .content-container.full-width{width:100%}.foxy-checkbox-list-menu .content-container fieldset{padding:0;margin:0}.foxy-checkbox-list-menu .content-container fieldset legend{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.foxy-checkbox-list-menu .full-width .content-container,.foxy-checkbox-list-menu .full-width.menu-popup{width:100%}.foxy-checkbox-list-menu div.textfield-container label:focus-within{background-color:#dcdcdc}.foxy-checkbox-list-menu div.textfield-container label input.mdc-text-field__input[type=button]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:break-word;word-break:break-all;font-size:small;text-align:left}.foxy-checkbox-list-menu.checkbox-menu-filled div.textfield-container label .mdc-text-field__icon{margin-top:10px}.foxy-checkbox-list-menu .container{display:block;position:relative;padding:15px 10px 12px 43px;cursor:pointer;font-size:16px;-webkit-user-select:none;-moz-user-select:none;user-select:none;line-height:.7rem}.foxy-checkbox-list-menu .content-container .span-label-text{display:inline-block;line-height:1.2;margin-top:-6px}.foxy-checkbox-list-menu .container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.foxy-checkbox-list-menu .checkmark{position:absolute;top:10px;left:12px;height:20px;width:20px;border:2px solid #696666;border-radius:2px;transition:transform .2s ease-in-out}.foxy-checkbox-list-menu .container input:focus-visible,.foxy-checkbox-list-menu .container:focus-visible{outline:none}.foxy-checkbox-list-menu .container:focus-visible .checkmark,.foxy-checkbox-list-menu .container:focus-within .checkmark{outline-offset:2px;outline-style:dotted;outline-color:#000;outline-width:2px}.foxy-checkbox-list-menu .container input:checked~.checkmark,.foxy-checkbox-list-menu .container[role=checkbox][aria-checked=mixed] .checkmark-indeterminate,.foxy-checkbox-list-menu .container[role=checkbox][aria-checked=true] .checkmark{background-color:var(--mdc-theme-primary,#689f38);border:none}.foxy-checkbox-list-menu .checkmark:after{content:"";position:absolute;display:none}.foxy-checkbox-list-menu .container input:checked~.checkmark:after,.foxy-checkbox-list-menu .container[role=checkbox][aria-checked=true] .checkmark:after{display:block}.foxy-checkbox-list-menu .container .checkmark:after{left:6px;top:2px;width:7px;height:14px;border:solid #fff;border-width:0 .15rem .15rem 0;transform:rotate(45deg)}.mdc-snackbar{z-index:8;margin:8px;display:none;position:fixed;right:0;bottom:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;pointer-events:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-snackbar__surface{background-color:#333}.mdc-snackbar__label{color:hsla(0,0%,100%,.87)}.mdc-snackbar__surface{min-width:344px}@media(max-width:344px),(max-width:480px){.mdc-snackbar__surface{min-width:100%}}.mdc-snackbar__surface{max-width:672px;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);border-radius:4px;border-radius:var(--mdc-shape-small,4px)}.mdc-snackbar--closing,.mdc-snackbar--open,.mdc-snackbar--opening{display:flex}.mdc-snackbar--open .mdc-snackbar__actions,.mdc-snackbar--open .mdc-snackbar__label{visibility:visible}.mdc-snackbar--leading{justify-content:flex-start}.mdc-snackbar--stacked .mdc-snackbar__label{padding-left:16px;padding-right:8px;padding-bottom:12px}.mdc-snackbar--stacked .mdc-snackbar__label[dir=rtl],[dir=rtl] .mdc-snackbar--stacked .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mdc-snackbar--stacked .mdc-snackbar__surface{flex-direction:column;align-items:flex-start}.mdc-snackbar--stacked .mdc-snackbar__actions{align-self:flex-end;margin-bottom:8px}.mdc-snackbar__surface{padding-left:0;padding-right:8px;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;transform:scale(.8);opacity:0}.mdc-snackbar__surface:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-snackbar__surface[dir=rtl],[dir=rtl] .mdc-snackbar__surface{padding-left:8px;padding-right:0}.mdc-snackbar--open .mdc-snackbar__surface{transform:scale(1);opacity:1;pointer-events:auto;transition:opacity .15s cubic-bezier(0,0,.2,1) 0ms,transform .15s cubic-bezier(0,0,.2,1) 0ms}.mdc-snackbar--closing .mdc-snackbar__surface{transform:scale(1);transition:opacity 75ms cubic-bezier(.4,0,1,1) 0ms}.mdc-snackbar__label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);padding-left:16px;padding-right:8px;width:100%;flex-grow:1;box-sizing:border-box;margin:0;visibility:hidden;padding-top:14px;padding-bottom:14px}.mdc-snackbar__label[dir=rtl],[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mdc-snackbar__label:before{display:inline;content:attr(data-mdc-snackbar-label-text)}.mdc-snackbar__actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box;visibility:hidden}.mdc-snackbar__action:not(:disabled){color:#bb86fc}.mdc-snackbar__action:after,.mdc-snackbar__action:before{background-color:#bb86fc;background-color:var(--mdc-ripple-color,#bb86fc)}.mdc-snackbar__action.mdc-ripple-surface--hover:before,.mdc-snackbar__action:hover:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-snackbar__action.mdc-ripple-upgraded--background-focused:before,.mdc-snackbar__action:not(.mdc-ripple-upgraded):focus:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-snackbar__action:not(.mdc-ripple-upgraded):after{transition:opacity .15s linear}.mdc-snackbar__action:not(.mdc-ripple-upgraded):active:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-snackbar__action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-snackbar__dismiss{color:hsla(0,0%,100%,.87)}.mdc-snackbar__dismiss .mdc-icon-button__ripple:after,.mdc-snackbar__dismiss .mdc-icon-button__ripple:before{background-color:hsla(0,0%,100%,.87);background-color:var(--mdc-ripple-color,hsla(0,0%,100%,.87))}.mdc-snackbar__dismiss.mdc-ripple-surface--hover .mdc-icon-button__ripple:before,.mdc-snackbar__dismiss:hover .mdc-icon-button__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-snackbar__dismiss.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple:before,.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple:after{transition:opacity .15s linear}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-snackbar__dismiss.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-snackbar__dismiss.mdc-snackbar__dismiss{width:36px;height:36px;padding:6px;font-size:18px}.mdc-snackbar__dismiss.mdc-snackbar__dismiss.mdc-icon-button--reduced-size{width:36px;height:36px;padding:6px}.mdc-snackbar__dismiss.mdc-snackbar__dismiss.mdc-icon-button--reduced-size.mdc-icon-button--touch{margin-top:0;margin-bottom:0;margin-right:0;margin-left:0}.mdc-snackbar__dismiss.mdc-snackbar__dismiss .mdc-icon-button__touch{position:absolute;top:50%;height:36px;left:50%;width:36px;transform:translate(-50%,-50%)}.mdc-snackbar__action+.mdc-snackbar__dismiss{margin-left:8px;margin-right:0}.mdc-snackbar__action+.mdc-snackbar__dismiss[dir=rtl],[dir=rtl] .mdc-snackbar__action+.mdc-snackbar__dismiss{margin-left:0;margin-right:8px}.mdc-snackbar__actions .mdc-snackbar__dismiss{background:transparent;border:0 none}.mdc-snackbar__action:not(:disabled){color:#9ccc65}.mdc-snackbar--position-bottom-center,.mdc-snackbar--position-top-center{justify-content:center}.mdc-snackbar--position-bottom-right,.mdc-snackbar--position-top-right{margin-right:24px;justify-content:flex-end}.mdc-snackbar--position-bottom-left,.mdc-snackbar--position-top-left{margin-left:24px;justify-content:flex-start}.mdc-snackbar--position-top-center,.mdc-snackbar--position-top-left,.mdc-snackbar--position-top-right{margin-top:24px}.mdc-snackbar--position-bottom-left,.mdc-snackbar--position-bottom-right{margin-bottom:24px}.mdc-snackbar--position-top-center,.mdc-snackbar--position-top-left,.mdc-snackbar--position-top-right{top:0;bottom:unset}.mdc-snackbar--position-top-center .mdc-snackbar-container,.mdc-snackbar--position-top-left .mdc-snackbar-container,.mdc-snackbar--position-top-right .mdc-snackbar-container{transform:translate3D(0,calc(-100% - 24px),0)}.mdc-snackbar--position-bottom-center,.mdc-snackbar--position-bottom-left,.mdc-snackbar--position-bottom-right{bottom:0}.mdc-snackbar--position-bottom-center .mdc-snackbar-container,.mdc-snackbar--position-bottom-left .mdc-snackbar-container,.mdc-snackbar--position-bottom-right .mdc-snackbar-container{transform:translate3D(0,calc(100% + 24px),0)}.foxy-stepper .foxy-step{margin-bottom:-25px;position:relative;padding-bottom:10px}.foxy-stepper .step-main{display:none;padding:7px;margin-bottom:20px;margin-left:50px}.foxy-stepper .foxy-step.foxy_step__active .step-main{display:block}.foxy-stepper .foxy-step-header{margin-bottom:24px;padding-left:50px;cursor:pointer;position:relative}.foxy-stepper .foxy-step-header:hover{background-color:#e7e5e5}.foxy-stepper .foxy-step-header .md-subheading{font-weight:500}.foxy-stepper .foxy-step-header .foxy-step-message{color:dimgray}.foxy-stepper .foxy-step-footer{display:flex;gap:1rem;margin:15px auto}.foxy-stepper .progress__bar__container{position:absolute;height:100%;top:0;left:12px;padding-top:10px}.foxy-stepper .progress__bar:before{content:"";position:absolute;top:10px;left:50%;transform:translateX(-50%);width:1px;height:var(--element-height);background-color:gray;z-index:-1}.foxy-stepper .icon__container{border-radius:50%;width:30px;height:30px;display:flex;justify-content:center;align-items:center}.foxy-stepper .icon__container .material-icons{font-size:14px}.foxy-stepper .icon__container .index__icon{cursor:pointer;font-family:monospace;font-size:12px;font-weight:500}.foxy-stepper .icon__container{background-color:#bdbdbd}.foxy-stepper .icon__container .index__icon,.foxy-stepper .icon__container .material-icons{color:#000}.foxy-stepper.mdc-theme-name--red .foxy_step__previous .icon__container{background-color:#d32f2f}.foxy-stepper.mdc-theme-name--red .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--red .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--red .foxy_step__active .icon__container{background-color:#d32f2f}.foxy-stepper.mdc-theme-name--red .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--red .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--red .foxy-step-footer button.md-raised{background-color:#d32f2f;color:#fff}.foxy-stepper.mdc-theme-name--pink .foxy_step__previous .icon__container{background-color:#c2185b}.foxy-stepper.mdc-theme-name--pink .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--pink .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--pink .foxy_step__active .icon__container{background-color:#c2185b}.foxy-stepper.mdc-theme-name--pink .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--pink .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--pink .foxy-step-footer button.md-raised{background-color:#c2185b;color:#fff}.foxy-stepper.mdc-theme-name--purple .foxy_step__previous .icon__container{background-color:#7b1fa2}.foxy-stepper.mdc-theme-name--purple .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--purple .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--purple .foxy_step__active .icon__container{background-color:#7b1fa2}.foxy-stepper.mdc-theme-name--purple .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--purple .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--purple .foxy-step-footer button.md-raised{background-color:#7b1fa2;color:#fff}.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__previous .icon__container{background-color:#512da8}.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__active .icon__container{background-color:#512da8}.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--deep-purple .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--deep-purple .foxy-step-footer button.md-raised{background-color:#512da8;color:#fff}.foxy-stepper.mdc-theme-name--indigo .foxy_step__previous .icon__container{background-color:#303f9f}.foxy-stepper.mdc-theme-name--indigo .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--indigo .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--indigo .foxy_step__active .icon__container{background-color:#303f9f}.foxy-stepper.mdc-theme-name--indigo .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--indigo .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--indigo .foxy-step-footer button.md-raised{background-color:#303f9f;color:#fff}.foxy-stepper.mdc-theme-name--blue .foxy_step__previous .icon__container{background-color:#1976d2}.foxy-stepper.mdc-theme-name--blue .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--blue .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--blue .foxy_step__active .icon__container{background-color:#1976d2}.foxy-stepper.mdc-theme-name--blue .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--blue .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--blue .foxy-step-footer button.md-raised{background-color:#1976d2;color:#fff}.foxy-stepper.mdc-theme-name--light-blue .foxy_step__previous .icon__container{background-color:#0288d1}.foxy-stepper.mdc-theme-name--light-blue .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--light-blue .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--light-blue .foxy_step__active .icon__container{background-color:#0288d1}.foxy-stepper.mdc-theme-name--light-blue .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--light-blue .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--light-blue .foxy-step-footer button.md-raised{background-color:#0288d1;color:#fff}.foxy-stepper.mdc-theme-name--cyan .foxy_step__previous .icon__container{background-color:#0097a7}.foxy-stepper.mdc-theme-name--cyan .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--cyan .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--cyan .foxy_step__active .icon__container{background-color:#0097a7}.foxy-stepper.mdc-theme-name--cyan .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--cyan .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--cyan .foxy-step-footer button.md-raised{background-color:#0097a7;color:#fff}.foxy-stepper.mdc-theme-name--teal .foxy_step__previous .icon__container{background-color:#00796b}.foxy-stepper.mdc-theme-name--teal .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--teal .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--teal .foxy_step__active .icon__container{background-color:#00796b}.foxy-stepper.mdc-theme-name--teal .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--teal .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--teal .foxy-step-footer button.md-raised{background-color:#00796b;color:#fff}.foxy-stepper.mdc-theme-name--green .foxy_step__previous .icon__container{background-color:#388e3c}.foxy-stepper.mdc-theme-name--green .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--green .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--green .foxy_step__active .icon__container{background-color:#388e3c}.foxy-stepper.mdc-theme-name--green .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--green .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--green .foxy-step-footer button.md-raised{background-color:#388e3c;color:#fff}.foxy-stepper.mdc-theme-name--light-green .foxy_step__previous .icon__container{background-color:#689f38}.foxy-stepper.mdc-theme-name--light-green .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--light-green .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--light-green .foxy_step__active .icon__container{background-color:#689f38}.foxy-stepper.mdc-theme-name--light-green .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--light-green .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--light-green .foxy-step-footer button.md-raised{background-color:#689f38;color:#fff}.foxy-stepper.mdc-theme-name--lime .foxy_step__previous .icon__container{background-color:#afb42b}.foxy-stepper.mdc-theme-name--lime .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--lime .foxy_step__previous .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--lime .foxy_step__active .icon__container{background-color:#afb42b}.foxy-stepper.mdc-theme-name--lime .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--lime .foxy_step__active .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--lime .foxy-step-footer button.md-raised{background-color:#afb42b;color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--yellow .foxy_step__previous .icon__container{background-color:#fbc02d}.foxy-stepper.mdc-theme-name--yellow .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--yellow .foxy_step__previous .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--yellow .foxy_step__active .icon__container{background-color:#fbc02d}.foxy-stepper.mdc-theme-name--yellow .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--yellow .foxy_step__active .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--yellow .foxy-step-footer button.md-raised{background-color:#fbc02d;color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--amber .foxy_step__previous .icon__container{background-color:#ffa000}.foxy-stepper.mdc-theme-name--amber .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--amber .foxy_step__previous .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--amber .foxy_step__active .icon__container{background-color:#ffa000}.foxy-stepper.mdc-theme-name--amber .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--amber .foxy_step__active .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--amber .foxy-step-footer button.md-raised{background-color:#ffa000;color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--orange .foxy_step__previous .icon__container{background-color:#f57c00}.foxy-stepper.mdc-theme-name--orange .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--orange .foxy_step__previous .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--orange .foxy_step__active .icon__container{background-color:#f57c00}.foxy-stepper.mdc-theme-name--orange .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--orange .foxy_step__active .icon__container .material-icons{color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--orange .foxy-step-footer button.md-raised{background-color:#f57c00;color:rgba(0,0,0,.87)}.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__previous .icon__container{background-color:#e64a19}.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__active .icon__container{background-color:#e64a19}.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--deep-orange .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--deep-orange .foxy-step-footer button.md-raised{background-color:#e64a19;color:#fff}.foxy-stepper.mdc-theme-name--brown .foxy_step__previous .icon__container{background-color:#5d4037}.foxy-stepper.mdc-theme-name--brown .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--brown .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--brown .foxy_step__active .icon__container{background-color:#5d4037}.foxy-stepper.mdc-theme-name--brown .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--brown .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--brown .foxy-step-footer button.md-raised{background-color:#5d4037;color:#fff}.foxy-stepper.mdc-theme-name--grey .foxy_step__previous .icon__container{background-color:#616161}.foxy-stepper.mdc-theme-name--grey .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--grey .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--grey .foxy_step__active .icon__container{background-color:#616161}.foxy-stepper.mdc-theme-name--grey .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--grey .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--grey .foxy-step-footer button.md-raised{background-color:#616161;color:#fff}.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__previous .icon__container{background-color:#455a64}.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__active .icon__container{background-color:#455a64}.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--blue-grey .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--blue-grey .foxy-step-footer button.md-raised{background-color:#455a64;color:#fff}.foxy-stepper.mdc-theme-name--black .foxy_step__previous .icon__container{background-color:#202020}.foxy-stepper.mdc-theme-name--black .foxy_step__previous .icon__container .index__icon,.foxy-stepper.mdc-theme-name--black .foxy_step__previous .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--black .foxy_step__active .icon__container{background-color:#202020}.foxy-stepper.mdc-theme-name--black .foxy_step__active .icon__container .index__icon,.foxy-stepper.mdc-theme-name--black .foxy_step__active .icon__container .material-icons{color:#fff}.foxy-stepper.mdc-theme-name--black .foxy-step-footer button.md-raised{background-color:#202020;color:#fff}.foxy-stepper .foxy_step__error .icon__container{background-color:#d84315!important}.foxy-stepper .foxy_step__error .icon__container .material-icons{color:#fff}.foxy-stepper .foxy_step__error .foxy-step-message,.foxy-stepper .foxy_step__error .header-text{color:#d84315}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity,0);transition:opacity .28s cubic-bezier(.4,0,.2,1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color,#fff)}.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative}.mdc-switch:disabled{cursor:default;pointer-events:none}.mdc-switch__track{overflow:hidden;position:relative;width:100%}.mdc-switch__track:after,.mdc-switch__track:before{border:1px solid transparent;border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%}@media screen and (forced-colors:active){.mdc-switch__track:after,.mdc-switch__track:before{border-color:currentColor}}.mdc-switch__track:before{transition:transform 75ms cubic-bezier(0,0,.2,1) 0ms;transform:translateX(0)}.mdc-switch__track:after{transition:transform 75ms cubic-bezier(.4,0,.6,1) 0ms;transform:translateX(-100%)}.mdc-switch__track[dir=rtl]:after,[dir=rtl] .mdc-switch__track:after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track:before{transition:transform 75ms cubic-bezier(.4,0,.6,1) 0ms;transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track[dir=rtl]:before,[dir=rtl] .mdc-switch--selected .mdc-switch__track:before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track:after{transition:transform 75ms cubic-bezier(0,0,.2,1) 0ms;transform:translateX(0)}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms cubic-bezier(.4,0,.2,1) 0ms;left:0;right:auto;transform:translateX(0)}.mdc-switch__handle-track[dir=rtl],[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__handle-track[dir=rtl],[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto}.mdc-switch__handle[dir=rtl],[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mdc-switch__handle:after,.mdc-switch__handle:before{border:1px solid transparent;border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms cubic-bezier(.4,0,.2,1) 0ms,border-color 75ms cubic-bezier(.4,0,.2,1) 0ms;z-index:-1}@media screen and (forced-colors:active){.mdc-switch__handle:after,.mdc-switch__handle:before{border-color:currentColor}}.mdc-switch__shadow{border-radius:inherit;position:absolute}.mdc-elevation-overlay,.mdc-switch__shadow{bottom:0;left:0;right:0;top:0}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:-1}.mdc-switch:disabled .mdc-switch__ripple{display:none}.mdc-switch__icons{height:100%;position:relative;width:100%;z-index:1}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms cubic-bezier(.4,0,1,1) 0ms}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms cubic-bezier(0,0,.2,1) 30ms}.mdc-switch{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-switch .mdc-switch__ripple:after,.mdc-switch .mdc-switch__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-switch .mdc-switch__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-switch .mdc-switch__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-switch.mdc-ripple-upgraded .mdc-switch__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-switch.mdc-ripple-upgraded .mdc-switch__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-switch.mdc-ripple-upgraded--unbounded .mdc-switch__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-switch.mdc-ripple-upgraded--foreground-activation .mdc-switch__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-switch.mdc-ripple-upgraded--foreground-deactivation .mdc-switch__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-switch .mdc-switch__ripple:after,.mdc-switch .mdc-switch__ripple:before{top:0;left:0;width:100%;height:100%}.mdc-switch.mdc-ripple-upgraded .mdc-switch__ripple:after,.mdc-switch.mdc-ripple-upgraded .mdc-switch__ripple:before{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-switch.mdc-ripple-upgraded .mdc-switch__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-switch .mdc-switch__focus-ring-wrapper{width:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mdc-switch.mdc-ripple-upgraded--background-focused .mdc-switch__focus-ring,.mdc-switch:not(.mdc-ripple-upgraded):focus .mdc-switch__focus-ring{pointer-events:none;border:2px solid transparent;border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-switch.mdc-ripple-upgraded--background-focused .mdc-switch__focus-ring,.mdc-switch:not(.mdc-ripple-upgraded):focus .mdc-switch__focus-ring{border-color:CanvasText}}.mdc-switch.mdc-ripple-upgraded--background-focused .mdc-switch__focus-ring:after,.mdc-switch:not(.mdc-ripple-upgraded):focus .mdc-switch__focus-ring:after{content:"";border:2px solid transparent;border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-switch.mdc-ripple-upgraded--background-focused .mdc-switch__focus-ring:after,.mdc-switch:not(.mdc-ripple-upgraded):focus .mdc-switch__focus-ring:after{border-color:CanvasText}}.mdc-switch{width:36px;width:var(--mdc-switch-track-width,36px)}.mdc-switch.mdc-switch--selected:enabled .mdc-switch__handle:after{background:#6200ee;background:var(--mdc-switch-selected-handle-color,var(--mdc-theme-primary,#6200ee))}.mdc-switch.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle:after{background:#310077;background:var(--mdc-switch-selected-hover-handle-color,#310077)}.mdc-switch.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle:after{background:#310077;background:var(--mdc-switch-selected-focus-handle-color,#310077)}.mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__handle:after{background:#310077;background:var(--mdc-switch-selected-pressed-handle-color,#310077)}.mdc-switch.mdc-switch--selected:disabled .mdc-switch__handle:after{background:#424242;background:var(--mdc-switch-disabled-selected-handle-color,#424242)}.mdc-switch.mdc-switch--unselected:enabled .mdc-switch__handle:after{background:#616161;background:var(--mdc-switch-unselected-handle-color,#616161)}.mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle:after{background:#212121;background:var(--mdc-switch-unselected-hover-handle-color,#212121)}.mdc-switch.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle:after{background:#212121;background:var(--mdc-switch-unselected-focus-handle-color,#212121)}.mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__handle:after{background:#212121;background:var(--mdc-switch-unselected-pressed-handle-color,#212121)}.mdc-switch.mdc-switch--unselected:disabled .mdc-switch__handle:after{background:#424242;background:var(--mdc-switch-disabled-unselected-handle-color,#424242)}.mdc-switch .mdc-switch__handle:before{background:#fff;background:var(--mdc-switch-handle-surface-color,var(--mdc-theme-surface,#fff))}.mdc-switch:enabled .mdc-switch__shadow{--mdc-elevation-box-shadow-for-gss:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);box-shadow:var(--mdc-switch-handle-elevation,var(--mdc-elevation-box-shadow-for-gss))}.mdc-switch:disabled .mdc-switch__shadow{--mdc-elevation-box-shadow-for-gss:0px 0px 0px 0px rgba(0,0,0,.2),0px 0px 0px 0px rgba(0,0,0,.14),0px 0px 0px 0px rgba(0,0,0,.12);box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);box-shadow:var(--mdc-switch-disabled-handle-elevation,var(--mdc-elevation-box-shadow-for-gss))}.mdc-switch .mdc-switch__focus-ring-wrapper,.mdc-switch .mdc-switch__handle{height:20px;height:var(--mdc-switch-handle-height,20px)}.mdc-switch:disabled .mdc-switch__handle:after{opacity:.38;opacity:var(--mdc-switch-disabled-handle-opacity,.38)}.mdc-switch .mdc-switch__handle{border-radius:10px;border-radius:var(--mdc-switch-handle-shape,10px);width:20px;width:var(--mdc-switch-handle-width,20px)}.mdc-switch .mdc-switch__handle-track{width:calc(100% - 20px);width:calc(100% - var(--mdc-switch-handle-width, 20px))}.mdc-switch.mdc-switch--selected:enabled .mdc-switch__icon{fill:#fff;fill:var(--mdc-switch-selected-icon-color,var(--mdc-theme-on-primary,#fff))}.mdc-switch.mdc-switch--selected:disabled .mdc-switch__icon{fill:#fff;fill:var(--mdc-switch-disabled-selected-icon-color,var(--mdc-theme-on-primary,#fff))}.mdc-switch.mdc-switch--unselected:enabled .mdc-switch__icon{fill:#fff;fill:var(--mdc-switch-unselected-icon-color,var(--mdc-theme-on-primary,#fff))}.mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icon{fill:#fff;fill:var(--mdc-switch-disabled-unselected-icon-color,var(--mdc-theme-on-primary,#fff))}.mdc-switch.mdc-switch--selected:disabled .mdc-switch__icons{opacity:.38;opacity:var(--mdc-switch-disabled-selected-icon-opacity,.38)}.mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icons{opacity:.38;opacity:var(--mdc-switch-disabled-unselected-icon-opacity,.38)}.mdc-switch.mdc-switch--selected .mdc-switch__icon{width:18px;width:var(--mdc-switch-selected-icon-size,18px);height:18px;height:var(--mdc-switch-selected-icon-size,18px)}.mdc-switch.mdc-switch--unselected .mdc-switch__icon{width:18px;width:var(--mdc-switch-unselected-icon-size,18px);height:18px;height:var(--mdc-switch-unselected-icon-size,18px)}.mdc-switch.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple:after,.mdc-switch.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple:before{background-color:#6200ee;background-color:var(--mdc-switch-selected-hover-state-layer-color,var(--mdc-theme-primary,#6200ee))}.mdc-switch.mdc-switch--selected:enabled:focus .mdc-switch__ripple:after,.mdc-switch.mdc-switch--selected:enabled:focus .mdc-switch__ripple:before{background-color:#6200ee;background-color:var(--mdc-switch-selected-focus-state-layer-color,var(--mdc-theme-primary,#6200ee))}.mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__ripple:after,.mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__ripple:before{background-color:#6200ee;background-color:var(--mdc-switch-selected-pressed-state-layer-color,var(--mdc-theme-primary,#6200ee))}.mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple:after,.mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple:before{background-color:#424242;background-color:var(--mdc-switch-unselected-hover-state-layer-color,#424242)}.mdc-switch.mdc-switch--unselected:enabled:focus .mdc-switch__ripple:after,.mdc-switch.mdc-switch--unselected:enabled:focus .mdc-switch__ripple:before{background-color:#424242;background-color:var(--mdc-switch-unselected-focus-state-layer-color,#424242)}.mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__ripple:after,.mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__ripple:before{background-color:#424242;background-color:var(--mdc-switch-unselected-pressed-state-layer-color,#424242)}.mdc-switch.mdc-switch--selected:enabled:hover:not(:focus).mdc-ripple-surface--hover .mdc-switch__ripple:before,.mdc-switch.mdc-switch--selected:enabled:hover:not(:focus):hover .mdc-switch__ripple:before{opacity:.04;opacity:var(--mdc-switch-selected-hover-state-layer-opacity,.04)}.mdc-switch.mdc-switch--selected:enabled:focus.mdc-ripple-upgraded--background-focused .mdc-switch__ripple:before,.mdc-switch.mdc-switch--selected:enabled:focus:not(.mdc-ripple-upgraded):focus .mdc-switch__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-switch-selected-focus-state-layer-opacity,.12)}.mdc-switch.mdc-switch--selected:enabled:active:not(.mdc-ripple-upgraded) .mdc-switch__ripple:after{transition:opacity .15s linear}.mdc-switch.mdc-switch--selected:enabled:active:not(.mdc-ripple-upgraded):active .mdc-switch__ripple:after{transition-duration:75ms;opacity:.1;opacity:var(--mdc-switch-selected-pressed-state-layer-opacity,.1)}.mdc-switch.mdc-switch--selected:enabled:active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-switch-selected-pressed-state-layer-opacity,0.1)}.mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus).mdc-ripple-surface--hover .mdc-switch__ripple:before,.mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus):hover .mdc-switch__ripple:before{opacity:.04;opacity:var(--mdc-switch-unselected-hover-state-layer-opacity,.04)}.mdc-switch.mdc-switch--unselected:enabled:focus.mdc-ripple-upgraded--background-focused .mdc-switch__ripple:before,.mdc-switch.mdc-switch--unselected:enabled:focus:not(.mdc-ripple-upgraded):focus .mdc-switch__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-switch-unselected-focus-state-layer-opacity,.12)}.mdc-switch.mdc-switch--unselected:enabled:active:not(.mdc-ripple-upgraded) .mdc-switch__ripple:after{transition:opacity .15s linear}.mdc-switch.mdc-switch--unselected:enabled:active:not(.mdc-ripple-upgraded):active .mdc-switch__ripple:after{transition-duration:75ms;opacity:.1;opacity:var(--mdc-switch-unselected-pressed-state-layer-opacity,.1)}.mdc-switch.mdc-switch--unselected:enabled:active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-switch-unselected-pressed-state-layer-opacity,0.1)}.mdc-switch .mdc-switch__ripple{height:48px;height:var(--mdc-switch-state-layer-size,48px);width:48px;width:var(--mdc-switch-state-layer-size,48px)}.mdc-switch .mdc-switch__track{height:14px;height:var(--mdc-switch-track-height,14px)}.mdc-switch:disabled .mdc-switch__track{opacity:.12;opacity:var(--mdc-switch-disabled-track-opacity,.12)}.mdc-switch:enabled .mdc-switch__track:after{background:#d7bbff;background:var(--mdc-switch-selected-track-color,#d7bbff)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track:after{background:#d7bbff;background:var(--mdc-switch-selected-hover-track-color,#d7bbff)}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track:after{background:#d7bbff;background:var(--mdc-switch-selected-focus-track-color,#d7bbff)}.mdc-switch:enabled:active .mdc-switch__track:after{background:#d7bbff;background:var(--mdc-switch-selected-pressed-track-color,#d7bbff)}.mdc-switch:disabled .mdc-switch__track:after{background:#424242;background:var(--mdc-switch-disabled-selected-track-color,#424242)}.mdc-switch:enabled .mdc-switch__track:before{background:#e0e0e0;background:var(--mdc-switch-unselected-track-color,#e0e0e0)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track:before{background:#e0e0e0;background:var(--mdc-switch-unselected-hover-track-color,#e0e0e0)}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track:before{background:#e0e0e0;background:var(--mdc-switch-unselected-focus-track-color,#e0e0e0)}.mdc-switch:enabled:active .mdc-switch__track:before{background:#e0e0e0;background:var(--mdc-switch-unselected-pressed-track-color,#e0e0e0)}.mdc-switch:disabled .mdc-switch__track:before{background:#424242;background:var(--mdc-switch-disabled-unselected-track-color,#424242)}.mdc-switch .mdc-switch__track{border-radius:7px;border-radius:var(--mdc-switch-track-shape,7px)}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-switch:disabled .mdc-switch__handle:after{opacity:1;opacity:var(--mdc-switch-disabled-handle-opacity,1)}.mdc-switch.mdc-switch--selected:enabled .mdc-switch__icon{fill:ButtonText;fill:var(--mdc-switch-selected-icon-color,ButtonText)}.mdc-switch.mdc-switch--selected:disabled .mdc-switch__icon{fill:GrayText;fill:var(--mdc-switch-disabled-selected-icon-color,GrayText)}.mdc-switch.mdc-switch--unselected:enabled .mdc-switch__icon{fill:ButtonText;fill:var(--mdc-switch-unselected-icon-color,ButtonText)}.mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icon{fill:GrayText;fill:var(--mdc-switch-disabled-unselected-icon-color,GrayText)}.mdc-switch.mdc-switch--selected:disabled .mdc-switch__icons{opacity:1;opacity:var(--mdc-switch-disabled-selected-icon-opacity,1)}.mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icons{opacity:1;opacity:var(--mdc-switch-disabled-unselected-icon-opacity,1)}.mdc-switch:disabled .mdc-switch__track{opacity:1;opacity:var(--mdc-switch-disabled-track-opacity,1)}}.mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}.mdc-form-field>label[dir=rtl],[dir=rtl] .mdc-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}.mdc-form-field--align-end>label[dir=rtl],[dir=rtl] .mdc-form-field--align-end>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl],[dir=rtl] .mdc-form-field--space-between>label{margin:0}.mdc-switch.mdc-theme-name--default{--mdc-switch-selected-handle-color:#558b2f;--mdc-switch-selected-focus-handle-color:#558b2f;--mdc-switch-selected-pressed-handle-color:#558b2f;--mdc-switch-selected-hover-handle-color:#558b2f;--mdc-switch-selected-track-color:#dcedc8;--mdc-switch-selected-focus-track-color:#dcedc8;--mdc-switch-selected-hover-track-color:#dcedc8;--mdc-switch-selected-pressed-track-color:#dcedc8;--mdc-switch-selected-focus-state-layer-color:#dcedc8;--mdc-switch-selected-pressed-state-layer-color:#dcedc8;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--red{--mdc-switch-selected-handle-color:#f44336;--mdc-switch-selected-focus-handle-color:#f44336;--mdc-switch-selected-pressed-handle-color:#f44336;--mdc-switch-selected-hover-handle-color:#f44336;--mdc-switch-selected-track-color:#ffcdd2;--mdc-switch-selected-focus-track-color:#ffcdd2;--mdc-switch-selected-hover-track-color:#ffcdd2;--mdc-switch-selected-pressed-track-color:#ffcdd2;--mdc-switch-selected-focus-state-layer-color:#ffcdd2;--mdc-switch-selected-pressed-state-layer-color:#ffcdd2;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--pink{--mdc-switch-selected-handle-color:#e91e63;--mdc-switch-selected-focus-handle-color:#e91e63;--mdc-switch-selected-pressed-handle-color:#e91e63;--mdc-switch-selected-hover-handle-color:#e91e63;--mdc-switch-selected-track-color:#f8bbd0;--mdc-switch-selected-focus-track-color:#f8bbd0;--mdc-switch-selected-hover-track-color:#f8bbd0;--mdc-switch-selected-pressed-track-color:#f8bbd0;--mdc-switch-selected-focus-state-layer-color:#f8bbd0;--mdc-switch-selected-pressed-state-layer-color:#f8bbd0;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--purple{--mdc-switch-selected-handle-color:#9c27b0;--mdc-switch-selected-focus-handle-color:#9c27b0;--mdc-switch-selected-pressed-handle-color:#9c27b0;--mdc-switch-selected-hover-handle-color:#9c27b0;--mdc-switch-selected-track-color:#e1bee7;--mdc-switch-selected-focus-track-color:#e1bee7;--mdc-switch-selected-hover-track-color:#e1bee7;--mdc-switch-selected-pressed-track-color:#e1bee7;--mdc-switch-selected-focus-state-layer-color:#e1bee7;--mdc-switch-selected-pressed-state-layer-color:#e1bee7;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--deep-purple{--mdc-switch-selected-handle-color:#673ab7;--mdc-switch-selected-focus-handle-color:#673ab7;--mdc-switch-selected-pressed-handle-color:#673ab7;--mdc-switch-selected-hover-handle-color:#673ab7;--mdc-switch-selected-track-color:#d1c4e9;--mdc-switch-selected-focus-track-color:#d1c4e9;--mdc-switch-selected-hover-track-color:#d1c4e9;--mdc-switch-selected-pressed-track-color:#d1c4e9;--mdc-switch-selected-focus-state-layer-color:#d1c4e9;--mdc-switch-selected-pressed-state-layer-color:#d1c4e9;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--indigo{--mdc-switch-selected-handle-color:#3f51b5;--mdc-switch-selected-focus-handle-color:#3f51b5;--mdc-switch-selected-pressed-handle-color:#3f51b5;--mdc-switch-selected-hover-handle-color:#3f51b5;--mdc-switch-selected-track-color:#c5cae9;--mdc-switch-selected-focus-track-color:#c5cae9;--mdc-switch-selected-hover-track-color:#c5cae9;--mdc-switch-selected-pressed-track-color:#c5cae9;--mdc-switch-selected-focus-state-layer-color:#c5cae9;--mdc-switch-selected-pressed-state-layer-color:#c5cae9;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--blue{--mdc-switch-selected-handle-color:#2196f3;--mdc-switch-selected-focus-handle-color:#2196f3;--mdc-switch-selected-pressed-handle-color:#2196f3;--mdc-switch-selected-hover-handle-color:#2196f3;--mdc-switch-selected-track-color:#bbdefb;--mdc-switch-selected-focus-track-color:#bbdefb;--mdc-switch-selected-hover-track-color:#bbdefb;--mdc-switch-selected-pressed-track-color:#bbdefb;--mdc-switch-selected-focus-state-layer-color:#bbdefb;--mdc-switch-selected-pressed-state-layer-color:#bbdefb;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--light-blue{--mdc-switch-selected-handle-color:#03a9f4;--mdc-switch-selected-focus-handle-color:#03a9f4;--mdc-switch-selected-pressed-handle-color:#03a9f4;--mdc-switch-selected-hover-handle-color:#03a9f4;--mdc-switch-selected-track-color:#b3e5fc;--mdc-switch-selected-focus-track-color:#b3e5fc;--mdc-switch-selected-hover-track-color:#b3e5fc;--mdc-switch-selected-pressed-track-color:#b3e5fc;--mdc-switch-selected-focus-state-layer-color:#b3e5fc;--mdc-switch-selected-pressed-state-layer-color:#b3e5fc;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--cyan{--mdc-switch-selected-handle-color:#00bcd4;--mdc-switch-selected-focus-handle-color:#00bcd4;--mdc-switch-selected-pressed-handle-color:#00bcd4;--mdc-switch-selected-hover-handle-color:#00bcd4;--mdc-switch-selected-track-color:#b2ebf2;--mdc-switch-selected-focus-track-color:#b2ebf2;--mdc-switch-selected-hover-track-color:#b2ebf2;--mdc-switch-selected-pressed-track-color:#b2ebf2;--mdc-switch-selected-focus-state-layer-color:#b2ebf2;--mdc-switch-selected-pressed-state-layer-color:#b2ebf2;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--teal{--mdc-switch-selected-handle-color:#009688;--mdc-switch-selected-focus-handle-color:#009688;--mdc-switch-selected-pressed-handle-color:#009688;--mdc-switch-selected-hover-handle-color:#009688;--mdc-switch-selected-track-color:#b2dfdb;--mdc-switch-selected-focus-track-color:#b2dfdb;--mdc-switch-selected-hover-track-color:#b2dfdb;--mdc-switch-selected-pressed-track-color:#b2dfdb;--mdc-switch-selected-focus-state-layer-color:#b2dfdb;--mdc-switch-selected-pressed-state-layer-color:#b2dfdb;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--green{--mdc-switch-selected-handle-color:#4caf50;--mdc-switch-selected-focus-handle-color:#4caf50;--mdc-switch-selected-pressed-handle-color:#4caf50;--mdc-switch-selected-hover-handle-color:#4caf50;--mdc-switch-selected-track-color:#c8e6c9;--mdc-switch-selected-focus-track-color:#c8e6c9;--mdc-switch-selected-hover-track-color:#c8e6c9;--mdc-switch-selected-pressed-track-color:#c8e6c9;--mdc-switch-selected-focus-state-layer-color:#c8e6c9;--mdc-switch-selected-pressed-state-layer-color:#c8e6c9;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--light-green{--mdc-switch-selected-handle-color:#8bc34a;--mdc-switch-selected-focus-handle-color:#8bc34a;--mdc-switch-selected-pressed-handle-color:#8bc34a;--mdc-switch-selected-hover-handle-color:#8bc34a;--mdc-switch-selected-track-color:#dcedc8;--mdc-switch-selected-focus-track-color:#dcedc8;--mdc-switch-selected-hover-track-color:#dcedc8;--mdc-switch-selected-pressed-track-color:#dcedc8;--mdc-switch-selected-focus-state-layer-color:#dcedc8;--mdc-switch-selected-pressed-state-layer-color:#dcedc8;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--lime{--mdc-switch-selected-handle-color:#cddc39;--mdc-switch-selected-focus-handle-color:#cddc39;--mdc-switch-selected-pressed-handle-color:#cddc39;--mdc-switch-selected-hover-handle-color:#cddc39;--mdc-switch-selected-track-color:#f0f4c3;--mdc-switch-selected-focus-track-color:#f0f4c3;--mdc-switch-selected-hover-track-color:#f0f4c3;--mdc-switch-selected-pressed-track-color:#f0f4c3;--mdc-switch-selected-focus-state-layer-color:#f0f4c3;--mdc-switch-selected-pressed-state-layer-color:#f0f4c3;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--yellow{--mdc-switch-selected-handle-color:#ffeb3b;--mdc-switch-selected-focus-handle-color:#ffeb3b;--mdc-switch-selected-pressed-handle-color:#ffeb3b;--mdc-switch-selected-hover-handle-color:#ffeb3b;--mdc-switch-selected-track-color:#fff9c4;--mdc-switch-selected-focus-track-color:#fff9c4;--mdc-switch-selected-hover-track-color:#fff9c4;--mdc-switch-selected-pressed-track-color:#fff9c4;--mdc-switch-selected-focus-state-layer-color:#fff9c4;--mdc-switch-selected-pressed-state-layer-color:#fff9c4;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--amber{--mdc-switch-selected-handle-color:#ffc107;--mdc-switch-selected-focus-handle-color:#ffc107;--mdc-switch-selected-pressed-handle-color:#ffc107;--mdc-switch-selected-hover-handle-color:#ffc107;--mdc-switch-selected-track-color:#ffecb3;--mdc-switch-selected-focus-track-color:#ffecb3;--mdc-switch-selected-hover-track-color:#ffecb3;--mdc-switch-selected-pressed-track-color:#ffecb3;--mdc-switch-selected-focus-state-layer-color:#ffecb3;--mdc-switch-selected-pressed-state-layer-color:#ffecb3;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--orange{--mdc-switch-selected-handle-color:#ff9800;--mdc-switch-selected-focus-handle-color:#ff9800;--mdc-switch-selected-pressed-handle-color:#ff9800;--mdc-switch-selected-hover-handle-color:#ff9800;--mdc-switch-selected-track-color:#ffe0b2;--mdc-switch-selected-focus-track-color:#ffe0b2;--mdc-switch-selected-hover-track-color:#ffe0b2;--mdc-switch-selected-pressed-track-color:#ffe0b2;--mdc-switch-selected-focus-state-layer-color:#ffe0b2;--mdc-switch-selected-pressed-state-layer-color:#ffe0b2;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--deep-orange{--mdc-switch-selected-handle-color:#ff5722;--mdc-switch-selected-focus-handle-color:#ff5722;--mdc-switch-selected-pressed-handle-color:#ff5722;--mdc-switch-selected-hover-handle-color:#ff5722;--mdc-switch-selected-track-color:#ffccbc;--mdc-switch-selected-focus-track-color:#ffccbc;--mdc-switch-selected-hover-track-color:#ffccbc;--mdc-switch-selected-pressed-track-color:#ffccbc;--mdc-switch-selected-focus-state-layer-color:#ffccbc;--mdc-switch-selected-pressed-state-layer-color:#ffccbc;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--brown{--mdc-switch-selected-handle-color:#795548;--mdc-switch-selected-focus-handle-color:#795548;--mdc-switch-selected-pressed-handle-color:#795548;--mdc-switch-selected-hover-handle-color:#795548;--mdc-switch-selected-track-color:#d7ccc8;--mdc-switch-selected-focus-track-color:#d7ccc8;--mdc-switch-selected-hover-track-color:#d7ccc8;--mdc-switch-selected-pressed-track-color:#d7ccc8;--mdc-switch-selected-focus-state-layer-color:#d7ccc8;--mdc-switch-selected-pressed-state-layer-color:#d7ccc8;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--grey{--mdc-switch-selected-handle-color:#9e9e9e;--mdc-switch-selected-focus-handle-color:#9e9e9e;--mdc-switch-selected-pressed-handle-color:#9e9e9e;--mdc-switch-selected-hover-handle-color:#9e9e9e;--mdc-switch-selected-track-color:#f5f5f5;--mdc-switch-selected-focus-track-color:#f5f5f5;--mdc-switch-selected-hover-track-color:#f5f5f5;--mdc-switch-selected-pressed-track-color:#f5f5f5;--mdc-switch-selected-focus-state-layer-color:#f5f5f5;--mdc-switch-selected-pressed-state-layer-color:#f5f5f5;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--blue-grey{--mdc-switch-selected-handle-color:#607d8b;--mdc-switch-selected-focus-handle-color:#607d8b;--mdc-switch-selected-pressed-handle-color:#607d8b;--mdc-switch-selected-hover-handle-color:#607d8b;--mdc-switch-selected-track-color:#cfd8dc;--mdc-switch-selected-focus-track-color:#cfd8dc;--mdc-switch-selected-hover-track-color:#cfd8dc;--mdc-switch-selected-pressed-track-color:#cfd8dc;--mdc-switch-selected-focus-state-layer-color:#cfd8dc;--mdc-switch-selected-pressed-state-layer-color:#cfd8dc;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch.mdc-theme-name--black{--mdc-switch-selected-handle-color:#313131;--mdc-switch-selected-focus-handle-color:#313131;--mdc-switch-selected-pressed-handle-color:#313131;--mdc-switch-selected-hover-handle-color:#313131;--mdc-switch-selected-track-color:#535353;--mdc-switch-selected-focus-track-color:#535353;--mdc-switch-selected-hover-track-color:#535353;--mdc-switch-selected-pressed-track-color:#535353;--mdc-switch-selected-focus-state-layer-color:#535353;--mdc-switch-selected-pressed-state-layer-color:#535353;--mdc-switch-unselected-handle-color:#fafafa;--mdc-switch-unselected-hover-handle-color:#fafafa;--mdc-switch-unselected-focus-handle-color:#fafafa;--mdc-switch-unselected-pressed-handle-color:#fafafa}.mdc-switch__icon{display:none}.foxy-switch-with-helper .foxy-helper-text{color:#757575;margin:0 0 1em 40px;letter-spacing:normal;margin-top:4px;font-size:14px}.mdc-switch[role=switch]{margin-right:12px}.mdc-tab-bar{width:100%}.mdc-tab{height:48px}.mdc-tab--stacked{height:72px}.mdc-tab-scroller{overflow-y:hidden}.mdc-tab-scroller.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-content{transition:transform .25s cubic-bezier(.4,0,.2,1)}.mdc-tab-scroller__test{position:absolute;top:-9999px;width:100px;height:100px;overflow-x:scroll}.mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:touch;display:flex;overflow-x:hidden}.mdc-tab-scroller__scroll-area::-webkit-scrollbar,.mdc-tab-scroller__test::-webkit-scrollbar{display:none}.mdc-tab-scroller__scroll-area--scroll{overflow-x:scroll}.mdc-tab-scroller__scroll-content{position:relative;display:flex;flex:1 0 auto;transform:none;will-change:transform}.mdc-tab-scroller--align-start .mdc-tab-scroller__scroll-content{justify-content:flex-start}.mdc-tab-scroller--align-end .mdc-tab-scroller__scroll-content{justify-content:flex-end}.mdc-tab-scroller--align-center .mdc-tab-scroller__scroll-content{justify-content:center}.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:auto}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-color:#6200ee;border-color:var(--mdc-theme-primary,#6200ee)}.mdc-tab-indicator .mdc-tab-indicator__content--icon{color:#018786;color:var(--mdc-theme-secondary,#018786)}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:2px}.mdc-tab-indicator .mdc-tab-indicator__content--icon{height:34px;font-size:34px}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator__content--icon{align-self:center;margin:0 auto}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}.mdc-tab-indicator .mdc-tab-indicator__content{transition:transform .25s cubic-bezier(.4,0,.2,1)}.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition:opacity .15s linear}.mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition-delay:.1s}.mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-button-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-button-font-size,.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height,2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight,500);letter-spacing:.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing,.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration,none);text-decoration:var(--mdc-typography-button-text-decoration,none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform,uppercase);position:relative}.mdc-tab .mdc-tab__text-label{color:rgba(0,0,0,.6)}.mdc-tab .mdc-tab__icon{color:rgba(0,0,0,.54);fill:currentColor}.mdc-tab.mdc-ripple-upgraded--background-focused.mdc-tab--active .mdc-tab__focus-ring,.mdc-tab:not(.mdc-ripple-upgraded):focus.mdc-tab--active .mdc-tab__focus-ring{pointer-events:none;border:2px solid transparent;border-radius:8px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% - 12px);width:calc(100% - 8px);margin-top:-2px;z-index:2}@media screen and (forced-colors:active){.mdc-tab.mdc-ripple-upgraded--background-focused.mdc-tab--active .mdc-tab__focus-ring,.mdc-tab:not(.mdc-ripple-upgraded):focus.mdc-tab--active .mdc-tab__focus-ring{border-color:CanvasText}}.mdc-tab.mdc-ripple-upgraded--background-focused.mdc-tab--active .mdc-tab__focus-ring:after,.mdc-tab:not(.mdc-ripple-upgraded):focus.mdc-tab--active .mdc-tab__focus-ring:after{content:"";border:2px solid transparent;border-radius:10px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-tab.mdc-ripple-upgraded--background-focused.mdc-tab--active .mdc-tab__focus-ring:after,.mdc-tab:not(.mdc-ripple-upgraded):focus.mdc-tab--active .mdc-tab__focus-ring:after{border-color:CanvasText}}.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__focus-ring,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__focus-ring{pointer-events:none;border:2px solid transparent;border-radius:8px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% - 8px);width:calc(100% - 8px);z-index:2}@media screen and (forced-colors:active){.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__focus-ring,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__focus-ring{border-color:CanvasText}}.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__focus-ring:after,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__focus-ring:after{content:"";border:2px solid transparent;border-radius:10px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors:active){.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__focus-ring:after,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__focus-ring:after{border-color:CanvasText}}.mdc-tab__content{position:relative}.mdc-tab__icon{width:24px;height:24px;font-size:24px}.mdc-tab--active .mdc-tab__icon,.mdc-tab--active .mdc-tab__text-label{color:#6200ee;color:var(--mdc-theme-primary,#6200ee)}.mdc-tab--active .mdc-tab__icon{fill:currentColor}.mdc-tab{background:none;min-width:90px;padding-right:24px;padding-left:24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;margin:0;padding-top:0;padding-bottom:0;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;z-index:1}.mdc-tab::-moz-focus-inner{padding:0;border:0}.mdc-tab--min-width{flex:0 1 auto}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{display:inline-block;line-height:1}.mdc-tab__icon,.mdc-tab__text-label{transition:color .15s linear;z-index:2}.mdc-tab--stacked .mdc-tab__content{flex-direction:column;align-items:center;justify-content:center}.mdc-tab--stacked .mdc-tab__text-label{padding-top:6px;padding-bottom:4px}.mdc-tab--active .mdc-tab__icon,.mdc-tab--active .mdc-tab__text-label{transition-delay:.1s}.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label{padding-left:8px;padding-right:0}.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label[dir=rtl],[dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label{padding-left:0;padding-right:8px}.mdc-tab{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-tab .mdc-tab__ripple:after,.mdc-tab .mdc-tab__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-tab .mdc-tab__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-tab .mdc-tab__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-tab.mdc-ripple-upgraded--unbounded .mdc-tab__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-tab.mdc-ripple-upgraded--foreground-activation .mdc-tab__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-tab.mdc-ripple-upgraded--foreground-deactivation .mdc-tab__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-tab .mdc-tab__ripple:after,.mdc-tab .mdc-tab__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-tab .mdc-tab__ripple:after,.mdc-tab .mdc-tab__ripple:before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}.mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-tab__ripple{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;will-change:transform,opacity}.mdc-theme-name--red .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--red .mdc-tab .mdc-tab__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--red .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--red .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--red .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#f44336;fill:currentColor}.mdc-theme-name--red .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--red .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#f44336;background-color:var(--mdc-ripple-color,#f44336)}.mdc-theme-name--red .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--red .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--red .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--red .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--red .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--red .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--red .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--red .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#f44336}.mdc-theme-name--red .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#f44336}.mdc-theme-name--pink .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--pink .mdc-tab .mdc-tab__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--pink .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--pink .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#e91e63;fill:currentColor}.mdc-theme-name--pink .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--pink .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#e91e63;background-color:var(--mdc-ripple-color,#e91e63)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--pink .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--pink .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--pink .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--pink .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#e91e63}.mdc-theme-name--pink .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#e91e63}.mdc-theme-name--purple .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--purple .mdc-tab .mdc-tab__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--purple .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--purple .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#9c27b0;fill:currentColor}.mdc-theme-name--purple .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--purple .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#9c27b0;background-color:var(--mdc-ripple-color,#9c27b0)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--purple .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--purple .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#9c27b0}.mdc-theme-name--purple .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#9c27b0}.mdc-theme-name--deep-purple .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--deep-purple .mdc-tab .mdc-tab__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--deep-purple .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--deep-purple .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#673ab7;fill:currentColor}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#673ab7;background-color:var(--mdc-ripple-color,#673ab7)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#673ab7}.mdc-theme-name--deep-purple .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#673ab7}.mdc-theme-name--indigo .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--indigo .mdc-tab .mdc-tab__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--indigo .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--indigo .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#3f51b5;fill:currentColor}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--indigo .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,#3f51b5)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--indigo .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--indigo .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#3f51b5}.mdc-theme-name--indigo .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#3f51b5}.mdc-theme-name--blue .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--blue .mdc-tab .mdc-tab__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--blue .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--blue .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#2196f3;fill:currentColor}.mdc-theme-name--blue .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--blue .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#2196f3;background-color:var(--mdc-ripple-color,#2196f3)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--blue .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#2196f3}.mdc-theme-name--blue .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#2196f3}.mdc-theme-name--light-blue .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--light-blue .mdc-tab .mdc-tab__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--light-blue .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--light-blue .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#03a9f4;fill:currentColor}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#03a9f4;background-color:var(--mdc-ripple-color,#03a9f4)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#03a9f4}.mdc-theme-name--light-blue .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#03a9f4}.mdc-theme-name--cyan .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--cyan .mdc-tab .mdc-tab__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--cyan .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--cyan .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#00bcd4;fill:currentColor}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--cyan .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#00bcd4;background-color:var(--mdc-ripple-color,#00bcd4)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--cyan .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--cyan .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#00bcd4}.mdc-theme-name--cyan .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#00bcd4}.mdc-theme-name--teal .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--teal .mdc-tab .mdc-tab__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--teal .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--teal .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#009688;fill:currentColor}.mdc-theme-name--teal .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--teal .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#009688;background-color:var(--mdc-ripple-color,#009688)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--teal .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--teal .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--teal .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--teal .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#009688}.mdc-theme-name--teal .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#009688}.mdc-theme-name--green .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--green .mdc-tab .mdc-tab__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--green .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--green .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--green .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#4caf50;fill:currentColor}.mdc-theme-name--green .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--green .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#4caf50;background-color:var(--mdc-ripple-color,#4caf50)}.mdc-theme-name--green .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--green .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--green .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--green .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--green .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#4caf50}.mdc-theme-name--green .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#4caf50}.mdc-theme-name--light-green .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--light-green .mdc-tab .mdc-tab__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--light-green .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--light-green .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#8bc34a;fill:currentColor}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--light-green .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#8bc34a;background-color:var(--mdc-ripple-color,#8bc34a)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--light-green .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--light-green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#8bc34a}.mdc-theme-name--light-green .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#8bc34a}.mdc-theme-name--lime .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--lime .mdc-tab .mdc-tab__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--lime .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--lime .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#cddc39;fill:currentColor}.mdc-theme-name--lime .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--lime .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#cddc39;background-color:var(--mdc-ripple-color,#cddc39)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--lime .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--lime .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--lime .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--lime .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#cddc39}.mdc-theme-name--lime .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#cddc39}.mdc-theme-name--yellow .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--yellow .mdc-tab .mdc-tab__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--yellow .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--yellow .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#ffeb3b;fill:currentColor}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--yellow .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#ffeb3b;background-color:var(--mdc-ripple-color,#ffeb3b)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--yellow .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--yellow .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#ffeb3b}.mdc-theme-name--yellow .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#ffeb3b}.mdc-theme-name--amber .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--amber .mdc-tab .mdc-tab__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--amber .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--amber .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#ffc107;fill:currentColor}.mdc-theme-name--amber .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--amber .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#ffc107;background-color:var(--mdc-ripple-color,#ffc107)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--amber .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--amber .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--amber .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--amber .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#ffc107}.mdc-theme-name--amber .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#ffc107}.mdc-theme-name--orange .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--orange .mdc-tab .mdc-tab__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--orange .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--orange .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#ff9800;fill:currentColor}.mdc-theme-name--orange .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--orange .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#ff9800;background-color:var(--mdc-ripple-color,#ff9800)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--orange .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--orange .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#ff9800}.mdc-theme-name--orange .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#ff9800}.mdc-theme-name--deep-orange .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--deep-orange .mdc-tab .mdc-tab__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--deep-orange .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--deep-orange .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#ff5722;fill:currentColor}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#ff5722;background-color:var(--mdc-ripple-color,#ff5722)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#ff5722}.mdc-theme-name--deep-orange .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#ff5722}.mdc-theme-name--brown .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--brown .mdc-tab .mdc-tab__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--brown .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--brown .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#795548;fill:currentColor}.mdc-theme-name--brown .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--brown .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#795548;background-color:var(--mdc-ripple-color,#795548)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--brown .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--brown .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--brown .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--brown .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#795548}.mdc-theme-name--brown .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#795548}.mdc-theme-name--grey .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--grey .mdc-tab .mdc-tab__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--grey .mdc-tab:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--grey .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#9e9e9e;fill:currentColor}.mdc-theme-name--grey .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--grey .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#9e9e9e;background-color:var(--mdc-ripple-color,#9e9e9e)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--grey .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.08;opacity:var(--mdc-ripple-hover-opacity,.08)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-focus-opacity,.24)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.24;opacity:var(--mdc-ripple-press-opacity,.24)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.24)}.mdc-theme-name--grey .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#9e9e9e}.mdc-theme-name--grey .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#9e9e9e}.mdc-theme-name--blue-grey .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--blue-grey .mdc-tab .mdc-tab__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--blue-grey .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--blue-grey .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#607d8b;fill:currentColor}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#607d8b;background-color:var(--mdc-ripple-color,#607d8b)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#607d8b}.mdc-theme-name--blue-grey .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#607d8b}.mdc-theme-name--black .mdc-tab .mdc-tab__ripple:after,.mdc-theme-name--black .mdc-tab .mdc-tab__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--black .mdc-tab:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black .mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--black .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black .mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black .mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black .mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black .mdc-tab.mdc-tab--active .mdc-tab__icon{color:#313131;fill:currentColor}.mdc-theme-name--black .mdc-tab.mdc-tab--active .mdc-tab__ripple:after,.mdc-theme-name--black .mdc-tab.mdc-tab--active .mdc-tab__ripple:before{background-color:#313131;background-color:var(--mdc-ripple-color,#313131)}.mdc-theme-name--black .mdc-tab.mdc-tab--active.mdc-ripple-surface--hover .mdc-tab__ripple:before,.mdc-theme-name--black .mdc-tab.mdc-tab--active:hover .mdc-tab__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-theme-name--black .mdc-tab.mdc-tab--active.mdc-ripple-upgraded--background-focused .mdc-tab__ripple:before,.mdc-theme-name--black .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-theme-name--black .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded) .mdc-tab__ripple:after{transition:opacity .15s linear}.mdc-theme-name--black .mdc-tab.mdc-tab--active:not(.mdc-ripple-upgraded):active .mdc-tab__ripple:after{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity,.12)}.mdc-theme-name--black .mdc-tab.mdc-tab--active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity,0.12)}.mdc-theme-name--black .mdc-tab.mdc-tab--active .mdc-tab__text-label{color:#313131}.mdc-theme-name--black .mdc-tab.mdc-tab--active .mdc-tab-indicator__content--underline{border-color:#313131}.foxy-tabs .tab-contents{overflow:hidden;padding:16px}.foxy-tabs .tab-contents .foxy-tab-item{width:100%;opacity:0;transform:translateX(0)}.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:transform .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1)}.mdc-floating-label[dir=rtl],[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required:after{margin-left:1px;margin-right:0;content:"*"}.mdc-floating-label--required[dir=rtl]:after,[dir=rtl] .mdc-floating-label--required:after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{transform:translateY(-106%) scale(.75)}.mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-standard .25s 1;animation:mdc-floating-label-shake-float-above-standard .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(0) translateY(-106%) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-106%) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-106%) scale(.75)}to{transform:translateX(0) translateY(-106%) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(0) translateY(-106%) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-106%) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-106%) scale(.75)}to{transform:translateX(0) translateY(-106%) scale(.75)}}.mdc-line-ripple:after,.mdc-line-ripple:before{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple:before{border-bottom-width:1px;z-index:1}.mdc-line-ripple:after{transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2;transition:transform .18s cubic-bezier(.4,0,.2,1),opacity .18s cubic-bezier(.4,0,.2,1)}.mdc-line-ripple--active:after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating:after{opacity:0}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}.mdc-notched-outline[dir=rtl],[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}.mdc-notched-outline__leading[dir=rtl],.mdc-notched-outline__trailing,[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{flex-grow:1}.mdc-notched-outline__trailing[dir=rtl],[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 24px)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl],[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}@-webkit-keyframes mdc-ripple-fg-radius-in{0%{-webkit-animation-timing-function:cubic-bezier(.4,0,.2,1);animation-timing-function:cubic-bezier(.4,0,.2,1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@keyframes mdc-ripple-fg-radius-in{0%{-webkit-animation-timing-function:cubic-bezier(.4,0,.2,1);animation-timing-function:cubic-bezier(.4,0,.2,1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity,0)}}@keyframes mdc-ripple-fg-opacity-in{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity,0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity,0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity,0)}to{opacity:0}}.mdc-text-field--filled{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-text-field--filled .mdc-text-field__ripple:after,.mdc-text-field--filled .mdc-text-field__ripple:before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-text-field--filled .mdc-text-field__ripple:before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.mdc-text-field--filled .mdc-text-field__ripple:after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple:before{transform:scale(var(--mdc-ripple-fg-scale,1))}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple:after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple:after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple:after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple:after{-webkit-animation:mdc-ripple-fg-opacity-out .15s;animation:mdc-ripple-fg-opacity-out .15s;transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.mdc-text-field--filled .mdc-text-field__ripple:after,.mdc-text-field--filled .mdc-text-field__ripple:before{top:-50%;left:-50%;width:200%;height:200%}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple:after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-text-field{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(0,0,0,.87)}@media{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0,0,0,.54)}}@media{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}}.mdc-text-field .mdc-text-field__input{caret-color:#6200ee;caret-color:var(--mdc-theme-primary,#6200ee)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading,.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0,0,0,.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix,.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0,0,0,.6)}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity .15s cubic-bezier(.4,0,.2,1) 0ms;width:100%;min-width:0;border:none;border-radius:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media{.mdc-text-field__input::-moz-placeholder{-moz-transition:opacity 67ms cubic-bezier(.4,0,.2,1) 0ms;transition:opacity 67ms cubic-bezier(.4,0,.2,1) 0ms;opacity:0}.mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(.4,0,.2,1) 0ms;opacity:0}}@media{.mdc-text-field__input:-ms-input-placeholder{-ms-transition:opacity 67ms cubic-bezier(.4,0,.2,1) 0ms;transition:opacity 67ms cubic-bezier(.4,0,.2,1) 0ms;opacity:0}}@media{.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:.11s;opacity:1}.mdc-text-field--focused .mdc-text-field__input::placeholder,.mdc-text-field--no-label .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:.11s;opacity:1}}@media{.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:.11s;opacity:1}}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity .15s cubic-bezier(.4,0,.2,1) 0ms;opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens:none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}.mdc-text-field__affix--prefix[dir=rtl],[dir=rtl] .mdc-text-field__affix--prefix{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl],.mdc-text-field__affix--suffix,[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix[dir=rtl],[dir=rtl] .mdc-text-field__affix--suffix{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl],[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled .mdc-text-field__ripple:after,.mdc-text-field--filled .mdc-text-field__ripple:before{background-color:rgba(0,0,0,.87);background-color:var(--mdc-ripple-color,rgba(0,0,0,.87))}.mdc-text-field--filled.mdc-ripple-surface--hover .mdc-text-field__ripple:before,.mdc-text-field--filled:hover .mdc-text-field__ripple:before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity,.04)}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple:before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple:before{transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity,.12)}.mdc-text-field--filled:before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#f5f5f5}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.42)}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.87)}.mdc-text-field--filled .mdc-line-ripple:after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary,#6200ee)}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}.mdc-text-field--filled .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label,.mdc-text-field--filled.mdc-text-field--no-label:before{display:none}@supports(-webkit-hyphens:none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(.75);font-size:1rem}.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined .25s 1;animation:mdc-floating-label-shake-float-above-text-field-outlined .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(0) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-34.75px) scale(.75)}to{transform:translateX(0) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(0) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-34.75px) scale(.75)}to{transform:translateX(0) translateY(-34.75px) scale(.75)}}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.38)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.87)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary,#6200ee)}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small,4px)}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small,4px);border-bottom-left-radius:0}@supports(top:max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-shape-small,4px))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small,4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small,4px);border-bottom-left-radius:0}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small,4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small,4px)}@supports(top:max(0%)){.mdc-text-field--outlined{padding-right:max(16px,var(--mdc-shape-small,4px))}.mdc-text-field--outlined,.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px,var(--mdc-shape-small,4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top:max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px,var(--mdc-shape-small,4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl],[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:0}@supports(top:max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl],[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:max(16px,var(--mdc-shape-small,4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top:max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl],[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:0}@supports(top:max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl],[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:max(16px,calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-text-field__ripple:after,.mdc-text-field--outlined .mdc-text-field__ripple:before{content:none}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}.mdc-text-field--outlined .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none!important;background-color:transparent}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0;transition:none}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px;line-height:1.5rem}.mdc-text-field--textarea.mdc-text-field--filled:before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-filled .25s 1;animation:mdc-floating-label-shake-float-above-textarea-filled .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(0) translateY(-10.25px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-10.25px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-10.25px) scale(.75)}to{transform:translateX(0) translateY(-10.25px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(0) translateY(-10.25px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-10.25px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-10.25px) scale(.75)}to{transform:translateX(0) translateY(-10.25px) scale(.75)}}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1);font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(.75);font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-outlined .25s 1;animation:mdc-floating-label-shake-float-above-textarea-outlined .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(0) translateY(-24.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-24.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-24.75px) scale(.75)}to{transform:translateX(0) translateY(-24.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(0) translateY(-24.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(4%) translateY(-24.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(-4%) translateY(-24.75px) scale(.75)}to{transform:translateX(0) translateY(-24.75px) scale(.75)}}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter:after{display:inline-block;width:0;height:16px;content:"";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter:before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input{transform:translateX(1px) translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}.mdc-text-field--with-leading-icon[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:auto}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{left:auto;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(133.33333% - 85.33333px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:auto}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:auto;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(32px) scale(.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon .25s 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(-32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(-32px) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(-32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(-32px) translateY(-34.75px) scale(.75)}}.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon .25s 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon .25s 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% + 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% + 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(32px) translateY(-34.75px) scale(.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(32px) translateY(-34.75px) scale(.75)}33%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(calc(4% + 32px)) translateY(-34.75px) scale(.75)}66%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(calc(-4% + 32px)) translateY(-34.75px) scale(.75)}to{transform:translateX(32px) translateY(-34.75px) scale(.75)}}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}.mdc-text-field--with-trailing-icon[dir=rtl],[dir=rtl] .mdc-text-field--with-trailing-icon{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(133.33333% - 85.33333px)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(133.33333% - 128px)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(98,0,238,.87)}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple:after,.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple:before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid .mdc-text-field__input{caret-color:#b00020;caret-color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:#b00020;color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple:before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error,#b00020)}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0,0,0,.38)}@media{.mdc-text-field--disabled .mdc-text-field__input::-moz-placeholder{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0,0,0,.38)}}@media{.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,.38)}}.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-text-field__icon--leading,.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0,0,0,.3)}.mdc-text-field--disabled .mdc-text-field__affix--prefix,.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0,0,0,.38)}.mdc-text-field--disabled .mdc-line-ripple:before{border-bottom-color:rgba(0,0,0,.06)}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0,0,0,.06)}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-text-field--disabled .mdc-text-field__input::-moz-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:GrayText}}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}}@media (-ms-high-contrast:active),screen and (forced-colors:active){.mdc-text-field--disabled .mdc-floating-label,.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled .mdc-text-field__affix--prefix,.mdc-text-field--disabled .mdc-text-field__affix--suffix,.mdc-text-field--disabled .mdc-text-field__icon--leading,.mdc-text-field--disabled .mdc-text-field__icon--trailing,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:GrayText}.mdc-text-field--disabled .mdc-line-ripple:before{border-bottom-color:GrayText}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:GrayText}}@media screen and (forced-colors:active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl],[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input{text-align:left}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input{direction:ltr}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading{order:1}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix{order:2}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input{order:3}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix{order:4}.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing{order:5}.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix,[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-right:12px}.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix,[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity .15s cubic-bezier(.4,0,.2,1) 0ms}.mdc-text-field-helper-text:before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:auto}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap}.mdc-text-field-character-counter:before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-text-field-character-counter[dir=rtl],[dir=rtl] .mdc-text-field-character-counter{margin-left:0;margin-right:auto;padding-left:0;padding-right:16px}.mdc-text-field__icon{align-self:center;cursor:pointer}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-text-field__icon svg{display:block}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px}.mdc-text-field__icon--leading[dir=rtl],[dir=rtl] .mdc-text-field__icon--leading{margin-left:8px;margin-right:16px}.mdc-text-field__icon--trailing{padding:12px;margin-left:0;margin-right:0}.mdc-text-field__icon--trailing[dir=rtl],[dir=rtl] .mdc-text-field__icon--trailing{margin-left:0;margin-right:0}.textfield-container{margin:.2rem 0 1.2rem;padding-top:.5rem;width:100%}.textfield-container .mdc-text-field--textarea{width:100%}.textfield-container label input{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mdc-textfield{width:100%}.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-theme-primary,#689f38)}.mdc-theme-name--red.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#f44336}.mdc-theme-name--red.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#f44336}.mdc-theme-name--pink.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#e91e63}.mdc-theme-name--pink.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#e91e63}.mdc-theme-name--purple.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#9c27b0}.mdc-theme-name--purple.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#9c27b0}.mdc-theme-name--deep-purple.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#673ab7}.mdc-theme-name--deep-purple.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#673ab7}.mdc-theme-name--indigo.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#3f51b5}.mdc-theme-name--indigo.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#3f51b5}.mdc-theme-name--blue.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#2196f3}.mdc-theme-name--blue.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#2196f3}.mdc-theme-name--light-blue.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#03a9f4}.mdc-theme-name--light-blue.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#03a9f4}.mdc-theme-name--cyan.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#00bcd4}.mdc-theme-name--cyan.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#00bcd4}.mdc-theme-name--teal.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#009688}.mdc-theme-name--teal.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#009688}.mdc-theme-name--green.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#4caf50}.mdc-theme-name--green.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#4caf50}.mdc-theme-name--light-green.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#8bc34a}.mdc-theme-name--light-green.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#8bc34a}.mdc-theme-name--lime.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#cddc39}.mdc-theme-name--lime.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#cddc39}.mdc-theme-name--yellow.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#ffeb3b}.mdc-theme-name--yellow.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#ffeb3b}.mdc-theme-name--amber.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#ffc107}.mdc-theme-name--amber.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#ffc107}.mdc-theme-name--orange.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#ff9800}.mdc-theme-name--orange.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#ff9800}.mdc-theme-name--deep-orange.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#ff5722}.mdc-theme-name--deep-orange.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#ff5722}.mdc-theme-name--brown.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#795548}.mdc-theme-name--brown.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#795548}.mdc-theme-name--grey.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#9e9e9e}.mdc-theme-name--grey.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#9e9e9e}.mdc-theme-name--blue-grey.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#607d8b}.mdc-theme-name--blue-grey.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#607d8b}.mdc-theme-name--black.mdc-textfield.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:#313131}.mdc-theme-name--black.mdc-textfield .mdc-line-ripple:after{border-bottom-color:#313131}.foxy-textfield-with-icon-wrapper,.md-copyable,.md-refreshable{position:relative}.foxy-textfield-with-icon-wrapper .textfield-container.textfield-with-icon label input,.md-copyable .textfield-container.textfield-with-icon label input,.md-refreshable .textfield-container.textfield-with-icon label input{width:calc(100% - 2rem)}.foxy-textfield-with-icon-wrapper .foxy-textfield-action-button,.md-copyable .foxy-textfield-action-button,.md-refreshable .foxy-textfield-action-button{position:absolute;top:6px;right:0}.textfield-container .mdc-textfield .mdc-text-field__ripple{height:auto}.md-toolbar{min-height:64px;padding:0 8px;display:flex;align-items:center;align-content:center;flex-flow:row wrap;position:relative;transition:all .4s cubic-bezier(.25,.8,.25,1);transform:translateZ(0);z-index:2}.md-toolbar.md-dense{min-height:48px}.md-toolbar.md-dense.md-medium{min-height:72px}.md-toolbar.md-dense.md-large{min-height:96px}.md-toolbar.md-dense .md-toolbar-container{height:48px}.md-toolbar.md-medium{min-height:88px}.md-toolbar.md-medium .md-toolbar-container:nth-child(2) .md-title:first-child{margin-left:56px}.md-toolbar.md-large{min-height:128px;align-content:inherit}.md-toolbar.md-large .md-toolbar-container:nth-child(2) .md-title:first-child{margin-left:56px}.md-toolbar.md-account-header{min-height:164px}.md-toolbar.md-account-header .md-ink-ripple{color:#fff}.md-toolbar.md-account-header .md-list-item-container:hover:not([disabled]){background-color:hsla(0,0%,100%,.12)}.md-toolbar.md-account-header .md-avatar-list{margin:16px 0 8px}.md-toolbar.md-account-header .md-avatar-list .md-list-item-container{align-items:flex-start}.md-toolbar.md-account-header .md-avatar-list .md-avatar+.md-avatar{margin-left:16px}.md-toolbar .md-toolbar-container{width:100%;height:64px;display:flex;align-items:center;align-self:flex-start}.md-toolbar .md-toolbar-container>.md-button:first-child{margin-left:0;margin-right:16px}.md-toolbar .md-toolbar-container>.md-button+.md-button{margin-left:0}.md-toolbar>.md-button:first-child{margin-left:0;margin-right:16px}.md-toolbar>.md-button+.md-button{margin-left:0}.md-toolbar .md-button:hover:not([disabled]):not(.md-raised):not(.md-icon-button):not(.md-fab){background-color:hsla(0,0%,100%,.1)}.md-toolbar .md-title{margin:0;font-size:20px;font-weight:400}.md-toolbar .md-title:first-child{margin-left:8px}.md-toolbar .md-title+.md-input-container{margin-left:24px}.md-toolbar .md-input-container{min-height:32px;margin-top:0;margin-bottom:0;padding-top:0}.md-toolbar .md-list{padding:0;margin:0 -8px;flex:1}.main-sidebar.md-sidenav .md-toolbar{min-height:172px;border-bottom:1px solid rgba(0,0,0,.12)}.md-table-card .md-toolbar{padding-left:16px;background-color:#fff}.md-theme-default.md-toolbar.md-transparent{background-color:transparent;color:rgba(0,0,0,.87)}.md-toolbar.md-theme-white{background-color:#fff;color:rgba(0,0,0,.87)}.mdc-theme-name--red.foxy-toolbar{background-color:#f44336;color:#fff}.mdc-theme-name--pink.foxy-toolbar{background-color:#e91e63;color:#fff}.mdc-theme-name--purple.foxy-toolbar{background-color:#9c27b0;color:#fff}.mdc-theme-name--deep-purple.foxy-toolbar{background-color:#673ab7;color:#fff}.mdc-theme-name--indigo.foxy-toolbar{background-color:#3f51b5;color:#fff}.mdc-theme-name--blue.foxy-toolbar{background-color:#2196f3;color:#000}.mdc-theme-name--light-blue.foxy-toolbar{background-color:#03a9f4;color:#000}.mdc-theme-name--cyan.foxy-toolbar{background-color:#00bcd4;color:#000}.mdc-theme-name--teal.foxy-toolbar{background-color:#009688;color:#000}.mdc-theme-name--green.foxy-toolbar{background-color:#4caf50;color:#000}.mdc-theme-name--light-green.foxy-toolbar{background-color:#8bc34a;color:#000}.mdc-theme-name--lime.foxy-toolbar{background-color:#cddc39;color:#000}.mdc-theme-name--yellow.foxy-toolbar{background-color:#ffeb3b;color:#000}.mdc-theme-name--amber.foxy-toolbar{background-color:#ffc107;color:#000}.mdc-theme-name--orange.foxy-toolbar{background-color:#ff9800;color:#000}.mdc-theme-name--deep-orange.foxy-toolbar{background-color:#ff5722;color:#000}.mdc-theme-name--brown.foxy-toolbar{background-color:#795548;color:#fff}.mdc-theme-name--grey.foxy-toolbar{background-color:#9e9e9e;color:#000}.mdc-theme-name--blue-grey.foxy-toolbar{background-color:#607d8b;color:#fff}.mdc-theme-name--black.foxy-toolbar{background-color:#313131;color:#fff}.md-toolbar.md-accent,.md-toolbar.mdc-theme-name--accent{background-color:#d84315;color:#fff}.mdc-tooltip__caret-surface-bottom,.mdc-tooltip__caret-surface-top,.mdc-tooltip__surface{border-radius:4px;border-radius:var(--mdc-shape-small,4px)}.mdc-tooltip__surface{color:#fff;color:var(--mdc-theme-text-primary-on-dark,#fff);background-color:rgba(0,0,0,.6);word-break:break-all;word-break:var(--mdc-tooltip-word-break,normal);overflow-wrap:anywhere}.mdc-tooltip{z-index:9}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity .15s cubic-bezier(0,0,.2,1) 0ms,transform .15s cubic-bezier(0,0,.2,1) 0ms}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms cubic-bezier(.4,0,1,1) 0ms}.mdc-tooltip__title{color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-light,rgba(0,0,0,.87))}.mdc-tooltip__content{color:rgba(0,0,0,.6)}.mdc-tooltip__content-link{color:#6200ee;color:var(--mdc-theme-primary,#6200ee)}.mdc-tooltip{position:fixed;display:none}.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-bottom,.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-top,.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__surface{background-color:#fff}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--hide,.mdc-tooltip--showing,.mdc-tooltip--shown{display:inline-flex}.mdc-tooltip--hide.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--shown.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size,.75rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing,.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface:before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors:active){.mdc-tooltip__surface:before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);align-items:flex-start;border-radius:4px;display:flex;flex-direction:column;line-height:20px;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl],[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{display:block;margin-top:0;line-height:20px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-subtitle2-font-size,.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height,1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight,500);letter-spacing:.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing,.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform,inherit);margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__title:before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-tooltip__surface .mdc-tooltip__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body2-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:.875rem;font-size:var(--mdc-typography-body2-font-size,.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height,1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight,400);letter-spacing:.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing,.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-decoration:var(--mdc-typography-body2-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform,inherit);max-width:184px;margin:8px;text-align:left}.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl],[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:304px;align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-bottom,.mdc-tooltip__caret-surface-top{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(.9396926208)}.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay,.mdc-tooltip__caret-surface-top .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);outline:1px solid transparent;z-index:-1}@media screen and (forced-colors:active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mdc-theme-name--red .mdc-tooltip__content a{color:#f44336}.mdc-theme-name--pink .mdc-tooltip__content a{color:#e91e63}.mdc-theme-name--purple .mdc-tooltip__content a{color:#9c27b0}.mdc-theme-name--deep-purple .mdc-tooltip__content a{color:#673ab7}.mdc-theme-name--indigo .mdc-tooltip__content a{color:#3f51b5}.mdc-theme-name--blue .mdc-tooltip__content a{color:#2196f3}.mdc-theme-name--light-blue .mdc-tooltip__content a{color:#03a9f4}.mdc-theme-name--cyan .mdc-tooltip__content a{color:#00bcd4}.mdc-theme-name--teal .mdc-tooltip__content a{color:#009688}.mdc-theme-name--green .mdc-tooltip__content a{color:#4caf50}.mdc-theme-name--light-green .mdc-tooltip__content a{color:#8bc34a}.mdc-theme-name--lime .mdc-tooltip__content a{color:#cddc39}.mdc-theme-name--yellow .mdc-tooltip__content a{color:#ffeb3b}.mdc-theme-name--amber .mdc-tooltip__content a{color:#ffc107}.mdc-theme-name--orange .mdc-tooltip__content a{color:#ff9800}.mdc-theme-name--deep-orange .mdc-tooltip__content a{color:#ff5722}.mdc-theme-name--brown .mdc-tooltip__content a{color:#795548}.mdc-theme-name--grey .mdc-tooltip__content a{color:#9e9e9e}.mdc-theme-name--blue-grey .mdc-tooltip__content a{color:#607d8b}.mdc-theme-name--black .mdc-tooltip__content a{color:#313131} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/chunk-vendors.css b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/chunk-vendors.css new file mode 100644 index 0000000..26d9a39 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/css/chunk-vendors.css @@ -0,0 +1,1390 @@ +@charset "UTF-8";.code-editor .dropdown .list.fade-enter-active,.code-editor .dropdown .list.fade-leave-active{transition:transform .2s ease,opacity .2s ease}.code-editor .dropdown .list.fade-enter-from,.code-editor .dropdown .list.fade-leave-to{opacity:0;transform:translateY(-10px)}.code-editor .dropdown{cursor:pointer;position:relative}.code-editor .dropdown:focus{outline:none}.code-editor .disabled{cursor:default}.code-editor .disabled:hover>.title{opacity:.5!important}.code-editor .dropdown:hover>.title{opacity:1}.code-editor .dropdown>.title{transition:opacity .2s ease;opacity:.5;display:flex;align-items:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-editor .dropdown>.title>div{white-space:nowrap;font-size:12px;line-height:16px}.code-editor .dropdown>.title>svg{transition:.2s;margin-left:3px;margin-top:1px}.code-editor .dropdown>.list{box-sizing:border-box;position:absolute;padding:1px;border-radius:6px;overflow:hidden;top:24px;left:0;box-shadow:0 4px 12px rgba(0,0,0,.2)}.code-editor .dropdown>.list:before{content:"";position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;background:currentColor;opacity:.2}.code-editor .copy-code{transition:opacity .2s ease;position:relative;opacity:.5;width:16px;height:16px;cursor:pointer}.code-editor .copy-code:focus{outline:none}.code-editor .copy-code>svg{pointer-events:none}.code-editor .copy-code:hover{opacity:1}.code-editor .copy-code:hover>.tooltip{display:block}.code-editor .copy-code>.tooltip{font-family:sans-serif;display:none;position:absolute;bottom:-10px;left:-96px;font-size:12px;color:#fff;width:84px;height:30px;line-height:30px;background:rgba(0,0,0,.8);box-sizing:border-box;text-align:center;border-radius:4px}[theme=base16-3024]{ + /*! + Theme: 3024 + Author: Jan T. Sott (http://github.com/idleberg) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-3024] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-3024] code.hljs{padding:3px 5px}[theme=base16-3024] .hljs{color:#a5a2a2;background:#090300}[theme=base16-3024] .hljs ::-moz-selection,[theme=base16-3024] .hljs::-moz-selection{background-color:#4a4543;color:#a5a2a2}[theme=base16-3024] .hljs ::selection,[theme=base16-3024] .hljs::selection{background-color:#4a4543;color:#a5a2a2}[theme=base16-3024] .hljs-comment{color:#5c5855}[theme=base16-3024] .hljs-tag{color:#807d7c}[theme=base16-3024] .hljs-operator,[theme=base16-3024] .hljs-punctuation,[theme=base16-3024] .hljs-subst{color:#a5a2a2}[theme=base16-3024] .hljs-operator{opacity:.7}[theme=base16-3024] .hljs-bullet,[theme=base16-3024] .hljs-deletion,[theme=base16-3024] .hljs-name,[theme=base16-3024] .hljs-selector-tag,[theme=base16-3024] .hljs-template-variable,[theme=base16-3024] .hljs-variable{color:#db2d20}[theme=base16-3024] .hljs-attr,[theme=base16-3024] .hljs-link,[theme=base16-3024] .hljs-literal,[theme=base16-3024] .hljs-number,[theme=base16-3024] .hljs-symbol,[theme=base16-3024] .hljs-variable.constant_{color:#e8bbd0}[theme=base16-3024] .hljs-class .hljs-title,[theme=base16-3024] .hljs-title,[theme=base16-3024] .hljs-title.class_{color:#fded02}[theme=base16-3024] .hljs-strong{font-weight:700;color:#fded02}[theme=base16-3024] .hljs-addition,[theme=base16-3024] .hljs-code,[theme=base16-3024] .hljs-string,[theme=base16-3024] .hljs-title.class_.inherited__{color:#01a252}[theme=base16-3024] .hljs-built_in,[theme=base16-3024] .hljs-doctag,[theme=base16-3024] .hljs-keyword.hljs-atrule,[theme=base16-3024] .hljs-quote,[theme=base16-3024] .hljs-regexp{color:#b5e4f4}[theme=base16-3024] .hljs-attribute,[theme=base16-3024] .hljs-function .hljs-title,[theme=base16-3024] .hljs-section,[theme=base16-3024] .hljs-title.function_,[theme=base16-3024] .ruby .hljs-property{color:#01a0e4}[theme=base16-3024] .diff .hljs-meta,[theme=base16-3024] .hljs-keyword,[theme=base16-3024] .hljs-template-tag,[theme=base16-3024] .hljs-type{color:#a16a94}[theme=base16-3024] .hljs-emphasis{color:#a16a94;font-style:italic}[theme=base16-3024] .hljs-meta,[theme=base16-3024] .hljs-meta .hljs-keyword,[theme=base16-3024] .hljs-meta .hljs-string{color:#cdab53}[theme=base16-3024] .hljs-meta .hljs-keyword,[theme=base16-3024] .hljs-meta-keyword{font-weight:700}[theme=base16-apathy]{ + /*! + Theme: Apathy + Author: Jannik Siebert (https://github.com/janniks) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-apathy] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-apathy] code.hljs{padding:3px 5px}[theme=base16-apathy] .hljs{color:#81b5ac;background:#031a16}[theme=base16-apathy] .hljs ::-moz-selection,[theme=base16-apathy] .hljs::-moz-selection{background-color:#184e45;color:#81b5ac}[theme=base16-apathy] .hljs ::selection,[theme=base16-apathy] .hljs::selection{background-color:#184e45;color:#81b5ac}[theme=base16-apathy] .hljs-comment{color:#2b685e}[theme=base16-apathy] .hljs-tag{color:#5f9c92}[theme=base16-apathy] .hljs-operator,[theme=base16-apathy] .hljs-punctuation,[theme=base16-apathy] .hljs-subst{color:#81b5ac}[theme=base16-apathy] .hljs-operator{opacity:.7}[theme=base16-apathy] .hljs-bullet,[theme=base16-apathy] .hljs-deletion,[theme=base16-apathy] .hljs-name,[theme=base16-apathy] .hljs-selector-tag,[theme=base16-apathy] .hljs-template-variable,[theme=base16-apathy] .hljs-variable{color:#3e9688}[theme=base16-apathy] .hljs-attr,[theme=base16-apathy] .hljs-link,[theme=base16-apathy] .hljs-literal,[theme=base16-apathy] .hljs-number,[theme=base16-apathy] .hljs-symbol,[theme=base16-apathy] .hljs-variable.constant_{color:#3e7996}[theme=base16-apathy] .hljs-class .hljs-title,[theme=base16-apathy] .hljs-title,[theme=base16-apathy] .hljs-title.class_{color:#3e4c96}[theme=base16-apathy] .hljs-strong{font-weight:700;color:#3e4c96}[theme=base16-apathy] .hljs-addition,[theme=base16-apathy] .hljs-code,[theme=base16-apathy] .hljs-string,[theme=base16-apathy] .hljs-title.class_.inherited__{color:#883e96}[theme=base16-apathy] .hljs-built_in,[theme=base16-apathy] .hljs-doctag,[theme=base16-apathy] .hljs-keyword.hljs-atrule,[theme=base16-apathy] .hljs-quote,[theme=base16-apathy] .hljs-regexp{color:#963e4c}[theme=base16-apathy] .hljs-attribute,[theme=base16-apathy] .hljs-function .hljs-title,[theme=base16-apathy] .hljs-section,[theme=base16-apathy] .hljs-title.function_,[theme=base16-apathy] .ruby .hljs-property{color:#96883e}[theme=base16-apathy] .diff .hljs-meta,[theme=base16-apathy] .hljs-keyword,[theme=base16-apathy] .hljs-template-tag,[theme=base16-apathy] .hljs-type{color:#4c963e}[theme=base16-apathy] .hljs-emphasis{color:#4c963e;font-style:italic}[theme=base16-apathy] .hljs-meta,[theme=base16-apathy] .hljs-meta .hljs-keyword,[theme=base16-apathy] .hljs-meta .hljs-string{color:#3e965b}[theme=base16-apathy] .hljs-meta .hljs-keyword,[theme=base16-apathy] .hljs-meta-keyword{font-weight:700}[theme=base16-apprentice]{ + /*! + Theme: Apprentice + Author: romainl + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-apprentice] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-apprentice] code.hljs{padding:3px 5px}[theme=base16-apprentice] .hljs{color:#bcbcbc;background:#262626}[theme=base16-apprentice] .hljs ::-moz-selection,[theme=base16-apprentice] .hljs::-moz-selection{background-color:#333;color:#bcbcbc}[theme=base16-apprentice] .hljs ::selection,[theme=base16-apprentice] .hljs::selection{background-color:#333;color:#bcbcbc}[theme=base16-apprentice] .hljs-comment{color:#6c6c6c}[theme=base16-apprentice] .hljs-tag{color:#787878}[theme=base16-apprentice] .hljs-operator,[theme=base16-apprentice] .hljs-punctuation,[theme=base16-apprentice] .hljs-subst{color:#bcbcbc}[theme=base16-apprentice] .hljs-operator{opacity:.7}[theme=base16-apprentice] .hljs-bullet,[theme=base16-apprentice] .hljs-deletion,[theme=base16-apprentice] .hljs-name,[theme=base16-apprentice] .hljs-selector-tag,[theme=base16-apprentice] .hljs-template-variable,[theme=base16-apprentice] .hljs-variable{color:#5f8787}[theme=base16-apprentice] .hljs-attr,[theme=base16-apprentice] .hljs-link,[theme=base16-apprentice] .hljs-literal,[theme=base16-apprentice] .hljs-number,[theme=base16-apprentice] .hljs-symbol,[theme=base16-apprentice] .hljs-variable.constant_{color:#ff8700}[theme=base16-apprentice] .hljs-class .hljs-title,[theme=base16-apprentice] .hljs-title,[theme=base16-apprentice] .hljs-title.class_{color:#5f8787}[theme=base16-apprentice] .hljs-strong{font-weight:700;color:#5f8787}[theme=base16-apprentice] .hljs-addition,[theme=base16-apprentice] .hljs-code,[theme=base16-apprentice] .hljs-string,[theme=base16-apprentice] .hljs-title.class_.inherited__{color:#87af87}[theme=base16-apprentice] .hljs-built_in,[theme=base16-apprentice] .hljs-doctag,[theme=base16-apprentice] .hljs-keyword.hljs-atrule,[theme=base16-apprentice] .hljs-quote,[theme=base16-apprentice] .hljs-regexp{color:#5f875f}[theme=base16-apprentice] .hljs-attribute,[theme=base16-apprentice] .hljs-function .hljs-title,[theme=base16-apprentice] .hljs-section,[theme=base16-apprentice] .hljs-title.function_,[theme=base16-apprentice] .ruby .hljs-property{color:#ffffaf}[theme=base16-apprentice] .diff .hljs-meta,[theme=base16-apprentice] .hljs-keyword,[theme=base16-apprentice] .hljs-template-tag,[theme=base16-apprentice] .hljs-type{color:#87afd7}[theme=base16-apprentice] .hljs-emphasis{color:#87afd7;font-style:italic}[theme=base16-apprentice] .hljs-meta,[theme=base16-apprentice] .hljs-meta .hljs-keyword,[theme=base16-apprentice] .hljs-meta .hljs-string{color:#5f87af}[theme=base16-apprentice] .hljs-meta .hljs-keyword,[theme=base16-apprentice] .hljs-meta-keyword{font-weight:700}[theme=base16-ashes]{ + /*! + Theme: Ashes + Author: Jannik Siebert (https://github.com/janniks) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ashes] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ashes] code.hljs{padding:3px 5px}[theme=base16-ashes] .hljs{color:#c7ccd1;background:#1c2023}[theme=base16-ashes] .hljs ::-moz-selection,[theme=base16-ashes] .hljs::-moz-selection{background-color:#565e65;color:#c7ccd1}[theme=base16-ashes] .hljs ::selection,[theme=base16-ashes] .hljs::selection{background-color:#565e65;color:#c7ccd1}[theme=base16-ashes] .hljs-comment{color:#747c84}[theme=base16-ashes] .hljs-tag{color:#adb3ba}[theme=base16-ashes] .hljs-operator,[theme=base16-ashes] .hljs-punctuation,[theme=base16-ashes] .hljs-subst{color:#c7ccd1}[theme=base16-ashes] .hljs-operator{opacity:.7}[theme=base16-ashes] .hljs-bullet,[theme=base16-ashes] .hljs-deletion,[theme=base16-ashes] .hljs-name,[theme=base16-ashes] .hljs-selector-tag,[theme=base16-ashes] .hljs-template-variable,[theme=base16-ashes] .hljs-variable{color:#c7ae95}[theme=base16-ashes] .hljs-attr,[theme=base16-ashes] .hljs-link,[theme=base16-ashes] .hljs-literal,[theme=base16-ashes] .hljs-number,[theme=base16-ashes] .hljs-symbol,[theme=base16-ashes] .hljs-variable.constant_{color:#c7c795}[theme=base16-ashes] .hljs-class .hljs-title,[theme=base16-ashes] .hljs-title,[theme=base16-ashes] .hljs-title.class_{color:#aec795}[theme=base16-ashes] .hljs-strong{font-weight:700;color:#aec795}[theme=base16-ashes] .hljs-addition,[theme=base16-ashes] .hljs-code,[theme=base16-ashes] .hljs-string,[theme=base16-ashes] .hljs-title.class_.inherited__{color:#95c7ae}[theme=base16-ashes] .hljs-built_in,[theme=base16-ashes] .hljs-doctag,[theme=base16-ashes] .hljs-keyword.hljs-atrule,[theme=base16-ashes] .hljs-quote,[theme=base16-ashes] .hljs-regexp{color:#95aec7}[theme=base16-ashes] .hljs-attribute,[theme=base16-ashes] .hljs-function .hljs-title,[theme=base16-ashes] .hljs-section,[theme=base16-ashes] .hljs-title.function_,[theme=base16-ashes] .ruby .hljs-property{color:#ae95c7}[theme=base16-ashes] .diff .hljs-meta,[theme=base16-ashes] .hljs-keyword,[theme=base16-ashes] .hljs-template-tag,[theme=base16-ashes] .hljs-type{color:#c795ae}[theme=base16-ashes] .hljs-emphasis{color:#c795ae;font-style:italic}[theme=base16-ashes] .hljs-meta,[theme=base16-ashes] .hljs-meta .hljs-keyword,[theme=base16-ashes] .hljs-meta .hljs-string{color:#c79595}[theme=base16-ashes] .hljs-meta .hljs-keyword,[theme=base16-ashes] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-cave-light]{ + /*! + Theme: Atelier Cave Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-cave-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-cave-light] code.hljs{padding:3px 5px}[theme=base16-atelier-cave-light] .hljs{color:#585260;background:#efecf4}[theme=base16-atelier-cave-light] .hljs ::-moz-selection,[theme=base16-atelier-cave-light] .hljs::-moz-selection{background-color:#8b8792;color:#585260}[theme=base16-atelier-cave-light] .hljs ::selection,[theme=base16-atelier-cave-light] .hljs::selection{background-color:#8b8792;color:#585260}[theme=base16-atelier-cave-light] .hljs-comment{color:#7e7887}[theme=base16-atelier-cave-light] .hljs-tag{color:#655f6d}[theme=base16-atelier-cave-light] .hljs-operator,[theme=base16-atelier-cave-light] .hljs-punctuation,[theme=base16-atelier-cave-light] .hljs-subst{color:#585260}[theme=base16-atelier-cave-light] .hljs-operator{opacity:.7}[theme=base16-atelier-cave-light] .hljs-bullet,[theme=base16-atelier-cave-light] .hljs-deletion,[theme=base16-atelier-cave-light] .hljs-name,[theme=base16-atelier-cave-light] .hljs-selector-tag,[theme=base16-atelier-cave-light] .hljs-template-variable,[theme=base16-atelier-cave-light] .hljs-variable{color:#be4678}[theme=base16-atelier-cave-light] .hljs-attr,[theme=base16-atelier-cave-light] .hljs-link,[theme=base16-atelier-cave-light] .hljs-literal,[theme=base16-atelier-cave-light] .hljs-number,[theme=base16-atelier-cave-light] .hljs-symbol,[theme=base16-atelier-cave-light] .hljs-variable.constant_{color:#aa573c}[theme=base16-atelier-cave-light] .hljs-class .hljs-title,[theme=base16-atelier-cave-light] .hljs-title,[theme=base16-atelier-cave-light] .hljs-title.class_{color:#a06e3b}[theme=base16-atelier-cave-light] .hljs-strong{font-weight:700;color:#a06e3b}[theme=base16-atelier-cave-light] .hljs-addition,[theme=base16-atelier-cave-light] .hljs-code,[theme=base16-atelier-cave-light] .hljs-string,[theme=base16-atelier-cave-light] .hljs-title.class_.inherited__{color:#2a9292}[theme=base16-atelier-cave-light] .hljs-built_in,[theme=base16-atelier-cave-light] .hljs-doctag,[theme=base16-atelier-cave-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-cave-light] .hljs-quote,[theme=base16-atelier-cave-light] .hljs-regexp{color:#398bc6}[theme=base16-atelier-cave-light] .hljs-attribute,[theme=base16-atelier-cave-light] .hljs-function .hljs-title,[theme=base16-atelier-cave-light] .hljs-section,[theme=base16-atelier-cave-light] .hljs-title.function_,[theme=base16-atelier-cave-light] .ruby .hljs-property{color:#576ddb}[theme=base16-atelier-cave-light] .diff .hljs-meta,[theme=base16-atelier-cave-light] .hljs-keyword,[theme=base16-atelier-cave-light] .hljs-template-tag,[theme=base16-atelier-cave-light] .hljs-type{color:#955ae7}[theme=base16-atelier-cave-light] .hljs-emphasis{color:#955ae7;font-style:italic}[theme=base16-atelier-cave-light] .hljs-meta,[theme=base16-atelier-cave-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-cave-light] .hljs-meta .hljs-string{color:#bf40bf}[theme=base16-atelier-cave-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-cave-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-cave]{ + /*! + Theme: Atelier Cave + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-cave] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-cave] code.hljs{padding:3px 5px}[theme=base16-atelier-cave] .hljs{color:#8b8792;background:#19171c}[theme=base16-atelier-cave] .hljs ::-moz-selection,[theme=base16-atelier-cave] .hljs::-moz-selection{background-color:#585260;color:#8b8792}[theme=base16-atelier-cave] .hljs ::selection,[theme=base16-atelier-cave] .hljs::selection{background-color:#585260;color:#8b8792}[theme=base16-atelier-cave] .hljs-comment{color:#655f6d}[theme=base16-atelier-cave] .hljs-tag{color:#7e7887}[theme=base16-atelier-cave] .hljs-operator,[theme=base16-atelier-cave] .hljs-punctuation,[theme=base16-atelier-cave] .hljs-subst{color:#8b8792}[theme=base16-atelier-cave] .hljs-operator{opacity:.7}[theme=base16-atelier-cave] .hljs-bullet,[theme=base16-atelier-cave] .hljs-deletion,[theme=base16-atelier-cave] .hljs-name,[theme=base16-atelier-cave] .hljs-selector-tag,[theme=base16-atelier-cave] .hljs-template-variable,[theme=base16-atelier-cave] .hljs-variable{color:#be4678}[theme=base16-atelier-cave] .hljs-attr,[theme=base16-atelier-cave] .hljs-link,[theme=base16-atelier-cave] .hljs-literal,[theme=base16-atelier-cave] .hljs-number,[theme=base16-atelier-cave] .hljs-symbol,[theme=base16-atelier-cave] .hljs-variable.constant_{color:#aa573c}[theme=base16-atelier-cave] .hljs-class .hljs-title,[theme=base16-atelier-cave] .hljs-title,[theme=base16-atelier-cave] .hljs-title.class_{color:#a06e3b}[theme=base16-atelier-cave] .hljs-strong{font-weight:700;color:#a06e3b}[theme=base16-atelier-cave] .hljs-addition,[theme=base16-atelier-cave] .hljs-code,[theme=base16-atelier-cave] .hljs-string,[theme=base16-atelier-cave] .hljs-title.class_.inherited__{color:#2a9292}[theme=base16-atelier-cave] .hljs-built_in,[theme=base16-atelier-cave] .hljs-doctag,[theme=base16-atelier-cave] .hljs-keyword.hljs-atrule,[theme=base16-atelier-cave] .hljs-quote,[theme=base16-atelier-cave] .hljs-regexp{color:#398bc6}[theme=base16-atelier-cave] .hljs-attribute,[theme=base16-atelier-cave] .hljs-function .hljs-title,[theme=base16-atelier-cave] .hljs-section,[theme=base16-atelier-cave] .hljs-title.function_,[theme=base16-atelier-cave] .ruby .hljs-property{color:#576ddb}[theme=base16-atelier-cave] .diff .hljs-meta,[theme=base16-atelier-cave] .hljs-keyword,[theme=base16-atelier-cave] .hljs-template-tag,[theme=base16-atelier-cave] .hljs-type{color:#955ae7}[theme=base16-atelier-cave] .hljs-emphasis{color:#955ae7;font-style:italic}[theme=base16-atelier-cave] .hljs-meta,[theme=base16-atelier-cave] .hljs-meta .hljs-keyword,[theme=base16-atelier-cave] .hljs-meta .hljs-string{color:#bf40bf}[theme=base16-atelier-cave] .hljs-meta .hljs-keyword,[theme=base16-atelier-cave] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-dune-light]{ + /*! + Theme: Atelier Dune Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-dune-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-dune-light] code.hljs{padding:3px 5px}[theme=base16-atelier-dune-light] .hljs{color:#6e6b5e;background:#fefbec}[theme=base16-atelier-dune-light] .hljs ::-moz-selection,[theme=base16-atelier-dune-light] .hljs::-moz-selection{background-color:#a6a28c;color:#6e6b5e}[theme=base16-atelier-dune-light] .hljs ::selection,[theme=base16-atelier-dune-light] .hljs::selection{background-color:#a6a28c;color:#6e6b5e}[theme=base16-atelier-dune-light] .hljs-comment{color:#999580}[theme=base16-atelier-dune-light] .hljs-tag{color:#7d7a68}[theme=base16-atelier-dune-light] .hljs-operator,[theme=base16-atelier-dune-light] .hljs-punctuation,[theme=base16-atelier-dune-light] .hljs-subst{color:#6e6b5e}[theme=base16-atelier-dune-light] .hljs-operator{opacity:.7}[theme=base16-atelier-dune-light] .hljs-bullet,[theme=base16-atelier-dune-light] .hljs-deletion,[theme=base16-atelier-dune-light] .hljs-name,[theme=base16-atelier-dune-light] .hljs-selector-tag,[theme=base16-atelier-dune-light] .hljs-template-variable,[theme=base16-atelier-dune-light] .hljs-variable{color:#d73737}[theme=base16-atelier-dune-light] .hljs-attr,[theme=base16-atelier-dune-light] .hljs-link,[theme=base16-atelier-dune-light] .hljs-literal,[theme=base16-atelier-dune-light] .hljs-number,[theme=base16-atelier-dune-light] .hljs-symbol,[theme=base16-atelier-dune-light] .hljs-variable.constant_{color:#b65611}[theme=base16-atelier-dune-light] .hljs-class .hljs-title,[theme=base16-atelier-dune-light] .hljs-title,[theme=base16-atelier-dune-light] .hljs-title.class_{color:#ae9513}[theme=base16-atelier-dune-light] .hljs-strong{font-weight:700;color:#ae9513}[theme=base16-atelier-dune-light] .hljs-addition,[theme=base16-atelier-dune-light] .hljs-code,[theme=base16-atelier-dune-light] .hljs-string,[theme=base16-atelier-dune-light] .hljs-title.class_.inherited__{color:#60ac39}[theme=base16-atelier-dune-light] .hljs-built_in,[theme=base16-atelier-dune-light] .hljs-doctag,[theme=base16-atelier-dune-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-dune-light] .hljs-quote,[theme=base16-atelier-dune-light] .hljs-regexp{color:#1fad83}[theme=base16-atelier-dune-light] .hljs-attribute,[theme=base16-atelier-dune-light] .hljs-function .hljs-title,[theme=base16-atelier-dune-light] .hljs-section,[theme=base16-atelier-dune-light] .hljs-title.function_,[theme=base16-atelier-dune-light] .ruby .hljs-property{color:#6684e1}[theme=base16-atelier-dune-light] .diff .hljs-meta,[theme=base16-atelier-dune-light] .hljs-keyword,[theme=base16-atelier-dune-light] .hljs-template-tag,[theme=base16-atelier-dune-light] .hljs-type{color:#b854d4}[theme=base16-atelier-dune-light] .hljs-emphasis{color:#b854d4;font-style:italic}[theme=base16-atelier-dune-light] .hljs-meta,[theme=base16-atelier-dune-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-dune-light] .hljs-meta .hljs-string{color:#d43552}[theme=base16-atelier-dune-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-dune-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-dune]{ + /*! + Theme: Atelier Dune + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-dune] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-dune] code.hljs{padding:3px 5px}[theme=base16-atelier-dune] .hljs{color:#a6a28c;background:#20201d}[theme=base16-atelier-dune] .hljs ::-moz-selection,[theme=base16-atelier-dune] .hljs::-moz-selection{background-color:#6e6b5e;color:#a6a28c}[theme=base16-atelier-dune] .hljs ::selection,[theme=base16-atelier-dune] .hljs::selection{background-color:#6e6b5e;color:#a6a28c}[theme=base16-atelier-dune] .hljs-comment{color:#7d7a68}[theme=base16-atelier-dune] .hljs-tag{color:#999580}[theme=base16-atelier-dune] .hljs-operator,[theme=base16-atelier-dune] .hljs-punctuation,[theme=base16-atelier-dune] .hljs-subst{color:#a6a28c}[theme=base16-atelier-dune] .hljs-operator{opacity:.7}[theme=base16-atelier-dune] .hljs-bullet,[theme=base16-atelier-dune] .hljs-deletion,[theme=base16-atelier-dune] .hljs-name,[theme=base16-atelier-dune] .hljs-selector-tag,[theme=base16-atelier-dune] .hljs-template-variable,[theme=base16-atelier-dune] .hljs-variable{color:#d73737}[theme=base16-atelier-dune] .hljs-attr,[theme=base16-atelier-dune] .hljs-link,[theme=base16-atelier-dune] .hljs-literal,[theme=base16-atelier-dune] .hljs-number,[theme=base16-atelier-dune] .hljs-symbol,[theme=base16-atelier-dune] .hljs-variable.constant_{color:#b65611}[theme=base16-atelier-dune] .hljs-class .hljs-title,[theme=base16-atelier-dune] .hljs-title,[theme=base16-atelier-dune] .hljs-title.class_{color:#ae9513}[theme=base16-atelier-dune] .hljs-strong{font-weight:700;color:#ae9513}[theme=base16-atelier-dune] .hljs-addition,[theme=base16-atelier-dune] .hljs-code,[theme=base16-atelier-dune] .hljs-string,[theme=base16-atelier-dune] .hljs-title.class_.inherited__{color:#60ac39}[theme=base16-atelier-dune] .hljs-built_in,[theme=base16-atelier-dune] .hljs-doctag,[theme=base16-atelier-dune] .hljs-keyword.hljs-atrule,[theme=base16-atelier-dune] .hljs-quote,[theme=base16-atelier-dune] .hljs-regexp{color:#1fad83}[theme=base16-atelier-dune] .hljs-attribute,[theme=base16-atelier-dune] .hljs-function .hljs-title,[theme=base16-atelier-dune] .hljs-section,[theme=base16-atelier-dune] .hljs-title.function_,[theme=base16-atelier-dune] .ruby .hljs-property{color:#6684e1}[theme=base16-atelier-dune] .diff .hljs-meta,[theme=base16-atelier-dune] .hljs-keyword,[theme=base16-atelier-dune] .hljs-template-tag,[theme=base16-atelier-dune] .hljs-type{color:#b854d4}[theme=base16-atelier-dune] .hljs-emphasis{color:#b854d4;font-style:italic}[theme=base16-atelier-dune] .hljs-meta,[theme=base16-atelier-dune] .hljs-meta .hljs-keyword,[theme=base16-atelier-dune] .hljs-meta .hljs-string{color:#d43552}[theme=base16-atelier-dune] .hljs-meta .hljs-keyword,[theme=base16-atelier-dune] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-estuary-light]{ + /*! + Theme: Atelier Estuary Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-estuary-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-estuary-light] code.hljs{padding:3px 5px}[theme=base16-atelier-estuary-light] .hljs{color:#5f5e4e;background:#f4f3ec}[theme=base16-atelier-estuary-light] .hljs ::-moz-selection,[theme=base16-atelier-estuary-light] .hljs::-moz-selection{background-color:#929181;color:#5f5e4e}[theme=base16-atelier-estuary-light] .hljs ::selection,[theme=base16-atelier-estuary-light] .hljs::selection{background-color:#929181;color:#5f5e4e}[theme=base16-atelier-estuary-light] .hljs-comment{color:#878573}[theme=base16-atelier-estuary-light] .hljs-tag{color:#6c6b5a}[theme=base16-atelier-estuary-light] .hljs-operator,[theme=base16-atelier-estuary-light] .hljs-punctuation,[theme=base16-atelier-estuary-light] .hljs-subst{color:#5f5e4e}[theme=base16-atelier-estuary-light] .hljs-operator{opacity:.7}[theme=base16-atelier-estuary-light] .hljs-bullet,[theme=base16-atelier-estuary-light] .hljs-deletion,[theme=base16-atelier-estuary-light] .hljs-name,[theme=base16-atelier-estuary-light] .hljs-selector-tag,[theme=base16-atelier-estuary-light] .hljs-template-variable,[theme=base16-atelier-estuary-light] .hljs-variable{color:#ba6236}[theme=base16-atelier-estuary-light] .hljs-attr,[theme=base16-atelier-estuary-light] .hljs-link,[theme=base16-atelier-estuary-light] .hljs-literal,[theme=base16-atelier-estuary-light] .hljs-number,[theme=base16-atelier-estuary-light] .hljs-symbol,[theme=base16-atelier-estuary-light] .hljs-variable.constant_{color:#ae7313}[theme=base16-atelier-estuary-light] .hljs-class .hljs-title,[theme=base16-atelier-estuary-light] .hljs-title,[theme=base16-atelier-estuary-light] .hljs-title.class_{color:#a5980d}[theme=base16-atelier-estuary-light] .hljs-strong{font-weight:700;color:#a5980d}[theme=base16-atelier-estuary-light] .hljs-addition,[theme=base16-atelier-estuary-light] .hljs-code,[theme=base16-atelier-estuary-light] .hljs-string,[theme=base16-atelier-estuary-light] .hljs-title.class_.inherited__{color:#7d9726}[theme=base16-atelier-estuary-light] .hljs-built_in,[theme=base16-atelier-estuary-light] .hljs-doctag,[theme=base16-atelier-estuary-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-estuary-light] .hljs-quote,[theme=base16-atelier-estuary-light] .hljs-regexp{color:#5b9d48}[theme=base16-atelier-estuary-light] .hljs-attribute,[theme=base16-atelier-estuary-light] .hljs-function .hljs-title,[theme=base16-atelier-estuary-light] .hljs-section,[theme=base16-atelier-estuary-light] .hljs-title.function_,[theme=base16-atelier-estuary-light] .ruby .hljs-property{color:#36a166}[theme=base16-atelier-estuary-light] .diff .hljs-meta,[theme=base16-atelier-estuary-light] .hljs-keyword,[theme=base16-atelier-estuary-light] .hljs-template-tag,[theme=base16-atelier-estuary-light] .hljs-type{color:#5f9182}[theme=base16-atelier-estuary-light] .hljs-emphasis{color:#5f9182;font-style:italic}[theme=base16-atelier-estuary-light] .hljs-meta,[theme=base16-atelier-estuary-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-estuary-light] .hljs-meta .hljs-string{color:#9d6c7c}[theme=base16-atelier-estuary-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-estuary-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-estuary]{ + /*! + Theme: Atelier Estuary + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-estuary] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-estuary] code.hljs{padding:3px 5px}[theme=base16-atelier-estuary] .hljs{color:#929181;background:#22221b}[theme=base16-atelier-estuary] .hljs ::-moz-selection,[theme=base16-atelier-estuary] .hljs::-moz-selection{background-color:#5f5e4e;color:#929181}[theme=base16-atelier-estuary] .hljs ::selection,[theme=base16-atelier-estuary] .hljs::selection{background-color:#5f5e4e;color:#929181}[theme=base16-atelier-estuary] .hljs-comment{color:#6c6b5a}[theme=base16-atelier-estuary] .hljs-tag{color:#878573}[theme=base16-atelier-estuary] .hljs-operator,[theme=base16-atelier-estuary] .hljs-punctuation,[theme=base16-atelier-estuary] .hljs-subst{color:#929181}[theme=base16-atelier-estuary] .hljs-operator{opacity:.7}[theme=base16-atelier-estuary] .hljs-bullet,[theme=base16-atelier-estuary] .hljs-deletion,[theme=base16-atelier-estuary] .hljs-name,[theme=base16-atelier-estuary] .hljs-selector-tag,[theme=base16-atelier-estuary] .hljs-template-variable,[theme=base16-atelier-estuary] .hljs-variable{color:#ba6236}[theme=base16-atelier-estuary] .hljs-attr,[theme=base16-atelier-estuary] .hljs-link,[theme=base16-atelier-estuary] .hljs-literal,[theme=base16-atelier-estuary] .hljs-number,[theme=base16-atelier-estuary] .hljs-symbol,[theme=base16-atelier-estuary] .hljs-variable.constant_{color:#ae7313}[theme=base16-atelier-estuary] .hljs-class .hljs-title,[theme=base16-atelier-estuary] .hljs-title,[theme=base16-atelier-estuary] .hljs-title.class_{color:#a5980d}[theme=base16-atelier-estuary] .hljs-strong{font-weight:700;color:#a5980d}[theme=base16-atelier-estuary] .hljs-addition,[theme=base16-atelier-estuary] .hljs-code,[theme=base16-atelier-estuary] .hljs-string,[theme=base16-atelier-estuary] .hljs-title.class_.inherited__{color:#7d9726}[theme=base16-atelier-estuary] .hljs-built_in,[theme=base16-atelier-estuary] .hljs-doctag,[theme=base16-atelier-estuary] .hljs-keyword.hljs-atrule,[theme=base16-atelier-estuary] .hljs-quote,[theme=base16-atelier-estuary] .hljs-regexp{color:#5b9d48}[theme=base16-atelier-estuary] .hljs-attribute,[theme=base16-atelier-estuary] .hljs-function .hljs-title,[theme=base16-atelier-estuary] .hljs-section,[theme=base16-atelier-estuary] .hljs-title.function_,[theme=base16-atelier-estuary] .ruby .hljs-property{color:#36a166}[theme=base16-atelier-estuary] .diff .hljs-meta,[theme=base16-atelier-estuary] .hljs-keyword,[theme=base16-atelier-estuary] .hljs-template-tag,[theme=base16-atelier-estuary] .hljs-type{color:#5f9182}[theme=base16-atelier-estuary] .hljs-emphasis{color:#5f9182;font-style:italic}[theme=base16-atelier-estuary] .hljs-meta,[theme=base16-atelier-estuary] .hljs-meta .hljs-keyword,[theme=base16-atelier-estuary] .hljs-meta .hljs-string{color:#9d6c7c}[theme=base16-atelier-estuary] .hljs-meta .hljs-keyword,[theme=base16-atelier-estuary] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-forest-light]{ + /*! + Theme: Atelier Forest Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-forest-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-forest-light] code.hljs{padding:3px 5px}[theme=base16-atelier-forest-light] .hljs{color:#68615e;background:#f1efee}[theme=base16-atelier-forest-light] .hljs ::-moz-selection,[theme=base16-atelier-forest-light] .hljs::-moz-selection{background-color:#a8a19f;color:#68615e}[theme=base16-atelier-forest-light] .hljs ::selection,[theme=base16-atelier-forest-light] .hljs::selection{background-color:#a8a19f;color:#68615e}[theme=base16-atelier-forest-light] .hljs-comment{color:#9c9491}[theme=base16-atelier-forest-light] .hljs-tag{color:#766e6b}[theme=base16-atelier-forest-light] .hljs-operator,[theme=base16-atelier-forest-light] .hljs-punctuation,[theme=base16-atelier-forest-light] .hljs-subst{color:#68615e}[theme=base16-atelier-forest-light] .hljs-operator{opacity:.7}[theme=base16-atelier-forest-light] .hljs-bullet,[theme=base16-atelier-forest-light] .hljs-deletion,[theme=base16-atelier-forest-light] .hljs-name,[theme=base16-atelier-forest-light] .hljs-selector-tag,[theme=base16-atelier-forest-light] .hljs-template-variable,[theme=base16-atelier-forest-light] .hljs-variable{color:#f22c40}[theme=base16-atelier-forest-light] .hljs-attr,[theme=base16-atelier-forest-light] .hljs-link,[theme=base16-atelier-forest-light] .hljs-literal,[theme=base16-atelier-forest-light] .hljs-number,[theme=base16-atelier-forest-light] .hljs-symbol,[theme=base16-atelier-forest-light] .hljs-variable.constant_{color:#df5320}[theme=base16-atelier-forest-light] .hljs-class .hljs-title,[theme=base16-atelier-forest-light] .hljs-title,[theme=base16-atelier-forest-light] .hljs-title.class_{color:#c38418}[theme=base16-atelier-forest-light] .hljs-strong{font-weight:700;color:#c38418}[theme=base16-atelier-forest-light] .hljs-addition,[theme=base16-atelier-forest-light] .hljs-code,[theme=base16-atelier-forest-light] .hljs-string,[theme=base16-atelier-forest-light] .hljs-title.class_.inherited__{color:#7b9726}[theme=base16-atelier-forest-light] .hljs-built_in,[theme=base16-atelier-forest-light] .hljs-doctag,[theme=base16-atelier-forest-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-forest-light] .hljs-quote,[theme=base16-atelier-forest-light] .hljs-regexp{color:#3d97b8}[theme=base16-atelier-forest-light] .hljs-attribute,[theme=base16-atelier-forest-light] .hljs-function .hljs-title,[theme=base16-atelier-forest-light] .hljs-section,[theme=base16-atelier-forest-light] .hljs-title.function_,[theme=base16-atelier-forest-light] .ruby .hljs-property{color:#407ee7}[theme=base16-atelier-forest-light] .diff .hljs-meta,[theme=base16-atelier-forest-light] .hljs-keyword,[theme=base16-atelier-forest-light] .hljs-template-tag,[theme=base16-atelier-forest-light] .hljs-type{color:#6666ea}[theme=base16-atelier-forest-light] .hljs-emphasis{color:#6666ea;font-style:italic}[theme=base16-atelier-forest-light] .hljs-meta,[theme=base16-atelier-forest-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-forest-light] .hljs-meta .hljs-string{color:#c33ff3}[theme=base16-atelier-forest-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-forest-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-forest]{ + /*! + Theme: Atelier Forest + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-forest] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-forest] code.hljs{padding:3px 5px}[theme=base16-atelier-forest] .hljs{color:#a8a19f;background:#1b1918}[theme=base16-atelier-forest] .hljs ::-moz-selection,[theme=base16-atelier-forest] .hljs::-moz-selection{background-color:#68615e;color:#a8a19f}[theme=base16-atelier-forest] .hljs ::selection,[theme=base16-atelier-forest] .hljs::selection{background-color:#68615e;color:#a8a19f}[theme=base16-atelier-forest] .hljs-comment{color:#766e6b}[theme=base16-atelier-forest] .hljs-tag{color:#9c9491}[theme=base16-atelier-forest] .hljs-operator,[theme=base16-atelier-forest] .hljs-punctuation,[theme=base16-atelier-forest] .hljs-subst{color:#a8a19f}[theme=base16-atelier-forest] .hljs-operator{opacity:.7}[theme=base16-atelier-forest] .hljs-bullet,[theme=base16-atelier-forest] .hljs-deletion,[theme=base16-atelier-forest] .hljs-name,[theme=base16-atelier-forest] .hljs-selector-tag,[theme=base16-atelier-forest] .hljs-template-variable,[theme=base16-atelier-forest] .hljs-variable{color:#f22c40}[theme=base16-atelier-forest] .hljs-attr,[theme=base16-atelier-forest] .hljs-link,[theme=base16-atelier-forest] .hljs-literal,[theme=base16-atelier-forest] .hljs-number,[theme=base16-atelier-forest] .hljs-symbol,[theme=base16-atelier-forest] .hljs-variable.constant_{color:#df5320}[theme=base16-atelier-forest] .hljs-class .hljs-title,[theme=base16-atelier-forest] .hljs-title,[theme=base16-atelier-forest] .hljs-title.class_{color:#c38418}[theme=base16-atelier-forest] .hljs-strong{font-weight:700;color:#c38418}[theme=base16-atelier-forest] .hljs-addition,[theme=base16-atelier-forest] .hljs-code,[theme=base16-atelier-forest] .hljs-string,[theme=base16-atelier-forest] .hljs-title.class_.inherited__{color:#7b9726}[theme=base16-atelier-forest] .hljs-built_in,[theme=base16-atelier-forest] .hljs-doctag,[theme=base16-atelier-forest] .hljs-keyword.hljs-atrule,[theme=base16-atelier-forest] .hljs-quote,[theme=base16-atelier-forest] .hljs-regexp{color:#3d97b8}[theme=base16-atelier-forest] .hljs-attribute,[theme=base16-atelier-forest] .hljs-function .hljs-title,[theme=base16-atelier-forest] .hljs-section,[theme=base16-atelier-forest] .hljs-title.function_,[theme=base16-atelier-forest] .ruby .hljs-property{color:#407ee7}[theme=base16-atelier-forest] .diff .hljs-meta,[theme=base16-atelier-forest] .hljs-keyword,[theme=base16-atelier-forest] .hljs-template-tag,[theme=base16-atelier-forest] .hljs-type{color:#6666ea}[theme=base16-atelier-forest] .hljs-emphasis{color:#6666ea;font-style:italic}[theme=base16-atelier-forest] .hljs-meta,[theme=base16-atelier-forest] .hljs-meta .hljs-keyword,[theme=base16-atelier-forest] .hljs-meta .hljs-string{color:#c33ff3}[theme=base16-atelier-forest] .hljs-meta .hljs-keyword,[theme=base16-atelier-forest] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-heath-light]{ + /*! + Theme: Atelier Heath Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-heath-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-heath-light] code.hljs{padding:3px 5px}[theme=base16-atelier-heath-light] .hljs{color:#695d69;background:#f7f3f7}[theme=base16-atelier-heath-light] .hljs ::-moz-selection,[theme=base16-atelier-heath-light] .hljs::-moz-selection{background-color:#ab9bab;color:#695d69}[theme=base16-atelier-heath-light] .hljs ::selection,[theme=base16-atelier-heath-light] .hljs::selection{background-color:#ab9bab;color:#695d69}[theme=base16-atelier-heath-light] .hljs-comment{color:#9e8f9e}[theme=base16-atelier-heath-light] .hljs-tag{color:#776977}[theme=base16-atelier-heath-light] .hljs-operator,[theme=base16-atelier-heath-light] .hljs-punctuation,[theme=base16-atelier-heath-light] .hljs-subst{color:#695d69}[theme=base16-atelier-heath-light] .hljs-operator{opacity:.7}[theme=base16-atelier-heath-light] .hljs-bullet,[theme=base16-atelier-heath-light] .hljs-deletion,[theme=base16-atelier-heath-light] .hljs-name,[theme=base16-atelier-heath-light] .hljs-selector-tag,[theme=base16-atelier-heath-light] .hljs-template-variable,[theme=base16-atelier-heath-light] .hljs-variable{color:#ca402b}[theme=base16-atelier-heath-light] .hljs-attr,[theme=base16-atelier-heath-light] .hljs-link,[theme=base16-atelier-heath-light] .hljs-literal,[theme=base16-atelier-heath-light] .hljs-number,[theme=base16-atelier-heath-light] .hljs-symbol,[theme=base16-atelier-heath-light] .hljs-variable.constant_{color:#a65926}[theme=base16-atelier-heath-light] .hljs-class .hljs-title,[theme=base16-atelier-heath-light] .hljs-title,[theme=base16-atelier-heath-light] .hljs-title.class_{color:#bb8a35}[theme=base16-atelier-heath-light] .hljs-strong{font-weight:700;color:#bb8a35}[theme=base16-atelier-heath-light] .hljs-addition,[theme=base16-atelier-heath-light] .hljs-code,[theme=base16-atelier-heath-light] .hljs-string,[theme=base16-atelier-heath-light] .hljs-title.class_.inherited__{color:#918b3b}[theme=base16-atelier-heath-light] .hljs-built_in,[theme=base16-atelier-heath-light] .hljs-doctag,[theme=base16-atelier-heath-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-heath-light] .hljs-quote,[theme=base16-atelier-heath-light] .hljs-regexp{color:#159393}[theme=base16-atelier-heath-light] .hljs-attribute,[theme=base16-atelier-heath-light] .hljs-function .hljs-title,[theme=base16-atelier-heath-light] .hljs-section,[theme=base16-atelier-heath-light] .hljs-title.function_,[theme=base16-atelier-heath-light] .ruby .hljs-property{color:#516aec}[theme=base16-atelier-heath-light] .diff .hljs-meta,[theme=base16-atelier-heath-light] .hljs-keyword,[theme=base16-atelier-heath-light] .hljs-template-tag,[theme=base16-atelier-heath-light] .hljs-type{color:#7b59c0}[theme=base16-atelier-heath-light] .hljs-emphasis{color:#7b59c0;font-style:italic}[theme=base16-atelier-heath-light] .hljs-meta,[theme=base16-atelier-heath-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-heath-light] .hljs-meta .hljs-string{color:#c3c}[theme=base16-atelier-heath-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-heath-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-heath]{ + /*! + Theme: Atelier Heath + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-heath] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-heath] code.hljs{padding:3px 5px}[theme=base16-atelier-heath] .hljs{color:#ab9bab;background:#1b181b}[theme=base16-atelier-heath] .hljs ::-moz-selection,[theme=base16-atelier-heath] .hljs::-moz-selection{background-color:#695d69;color:#ab9bab}[theme=base16-atelier-heath] .hljs ::selection,[theme=base16-atelier-heath] .hljs::selection{background-color:#695d69;color:#ab9bab}[theme=base16-atelier-heath] .hljs-comment{color:#776977}[theme=base16-atelier-heath] .hljs-tag{color:#9e8f9e}[theme=base16-atelier-heath] .hljs-operator,[theme=base16-atelier-heath] .hljs-punctuation,[theme=base16-atelier-heath] .hljs-subst{color:#ab9bab}[theme=base16-atelier-heath] .hljs-operator{opacity:.7}[theme=base16-atelier-heath] .hljs-bullet,[theme=base16-atelier-heath] .hljs-deletion,[theme=base16-atelier-heath] .hljs-name,[theme=base16-atelier-heath] .hljs-selector-tag,[theme=base16-atelier-heath] .hljs-template-variable,[theme=base16-atelier-heath] .hljs-variable{color:#ca402b}[theme=base16-atelier-heath] .hljs-attr,[theme=base16-atelier-heath] .hljs-link,[theme=base16-atelier-heath] .hljs-literal,[theme=base16-atelier-heath] .hljs-number,[theme=base16-atelier-heath] .hljs-symbol,[theme=base16-atelier-heath] .hljs-variable.constant_{color:#a65926}[theme=base16-atelier-heath] .hljs-class .hljs-title,[theme=base16-atelier-heath] .hljs-title,[theme=base16-atelier-heath] .hljs-title.class_{color:#bb8a35}[theme=base16-atelier-heath] .hljs-strong{font-weight:700;color:#bb8a35}[theme=base16-atelier-heath] .hljs-addition,[theme=base16-atelier-heath] .hljs-code,[theme=base16-atelier-heath] .hljs-string,[theme=base16-atelier-heath] .hljs-title.class_.inherited__{color:#918b3b}[theme=base16-atelier-heath] .hljs-built_in,[theme=base16-atelier-heath] .hljs-doctag,[theme=base16-atelier-heath] .hljs-keyword.hljs-atrule,[theme=base16-atelier-heath] .hljs-quote,[theme=base16-atelier-heath] .hljs-regexp{color:#159393}[theme=base16-atelier-heath] .hljs-attribute,[theme=base16-atelier-heath] .hljs-function .hljs-title,[theme=base16-atelier-heath] .hljs-section,[theme=base16-atelier-heath] .hljs-title.function_,[theme=base16-atelier-heath] .ruby .hljs-property{color:#516aec}[theme=base16-atelier-heath] .diff .hljs-meta,[theme=base16-atelier-heath] .hljs-keyword,[theme=base16-atelier-heath] .hljs-template-tag,[theme=base16-atelier-heath] .hljs-type{color:#7b59c0}[theme=base16-atelier-heath] .hljs-emphasis{color:#7b59c0;font-style:italic}[theme=base16-atelier-heath] .hljs-meta,[theme=base16-atelier-heath] .hljs-meta .hljs-keyword,[theme=base16-atelier-heath] .hljs-meta .hljs-string{color:#c3c}[theme=base16-atelier-heath] .hljs-meta .hljs-keyword,[theme=base16-atelier-heath] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-lakeside-light]{ + /*! + Theme: Atelier Lakeside Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-lakeside-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-lakeside-light] code.hljs{padding:3px 5px}[theme=base16-atelier-lakeside-light] .hljs{color:#516d7b;background:#ebf8ff}[theme=base16-atelier-lakeside-light] .hljs ::-moz-selection,[theme=base16-atelier-lakeside-light] .hljs::-moz-selection{background-color:#7ea2b4;color:#516d7b}[theme=base16-atelier-lakeside-light] .hljs ::selection,[theme=base16-atelier-lakeside-light] .hljs::selection{background-color:#7ea2b4;color:#516d7b}[theme=base16-atelier-lakeside-light] .hljs-comment{color:#7195a8}[theme=base16-atelier-lakeside-light] .hljs-tag{color:#5a7b8c}[theme=base16-atelier-lakeside-light] .hljs-operator,[theme=base16-atelier-lakeside-light] .hljs-punctuation,[theme=base16-atelier-lakeside-light] .hljs-subst{color:#516d7b}[theme=base16-atelier-lakeside-light] .hljs-operator{opacity:.7}[theme=base16-atelier-lakeside-light] .hljs-bullet,[theme=base16-atelier-lakeside-light] .hljs-deletion,[theme=base16-atelier-lakeside-light] .hljs-name,[theme=base16-atelier-lakeside-light] .hljs-selector-tag,[theme=base16-atelier-lakeside-light] .hljs-template-variable,[theme=base16-atelier-lakeside-light] .hljs-variable{color:#d22d72}[theme=base16-atelier-lakeside-light] .hljs-attr,[theme=base16-atelier-lakeside-light] .hljs-link,[theme=base16-atelier-lakeside-light] .hljs-literal,[theme=base16-atelier-lakeside-light] .hljs-number,[theme=base16-atelier-lakeside-light] .hljs-symbol,[theme=base16-atelier-lakeside-light] .hljs-variable.constant_{color:#935c25}[theme=base16-atelier-lakeside-light] .hljs-class .hljs-title,[theme=base16-atelier-lakeside-light] .hljs-title,[theme=base16-atelier-lakeside-light] .hljs-title.class_{color:#8a8a0f}[theme=base16-atelier-lakeside-light] .hljs-strong{font-weight:700;color:#8a8a0f}[theme=base16-atelier-lakeside-light] .hljs-addition,[theme=base16-atelier-lakeside-light] .hljs-code,[theme=base16-atelier-lakeside-light] .hljs-string,[theme=base16-atelier-lakeside-light] .hljs-title.class_.inherited__{color:#568c3b}[theme=base16-atelier-lakeside-light] .hljs-built_in,[theme=base16-atelier-lakeside-light] .hljs-doctag,[theme=base16-atelier-lakeside-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-lakeside-light] .hljs-quote,[theme=base16-atelier-lakeside-light] .hljs-regexp{color:#2d8f6f}[theme=base16-atelier-lakeside-light] .hljs-attribute,[theme=base16-atelier-lakeside-light] .hljs-function .hljs-title,[theme=base16-atelier-lakeside-light] .hljs-section,[theme=base16-atelier-lakeside-light] .hljs-title.function_,[theme=base16-atelier-lakeside-light] .ruby .hljs-property{color:#257fad}[theme=base16-atelier-lakeside-light] .diff .hljs-meta,[theme=base16-atelier-lakeside-light] .hljs-keyword,[theme=base16-atelier-lakeside-light] .hljs-template-tag,[theme=base16-atelier-lakeside-light] .hljs-type{color:#6b6bb8}[theme=base16-atelier-lakeside-light] .hljs-emphasis{color:#6b6bb8;font-style:italic}[theme=base16-atelier-lakeside-light] .hljs-meta,[theme=base16-atelier-lakeside-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-lakeside-light] .hljs-meta .hljs-string{color:#b72dd2}[theme=base16-atelier-lakeside-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-lakeside-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-lakeside]{ + /*! + Theme: Atelier Lakeside + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-lakeside] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-lakeside] code.hljs{padding:3px 5px}[theme=base16-atelier-lakeside] .hljs{color:#7ea2b4;background:#161b1d}[theme=base16-atelier-lakeside] .hljs ::-moz-selection,[theme=base16-atelier-lakeside] .hljs::-moz-selection{background-color:#516d7b;color:#7ea2b4}[theme=base16-atelier-lakeside] .hljs ::selection,[theme=base16-atelier-lakeside] .hljs::selection{background-color:#516d7b;color:#7ea2b4}[theme=base16-atelier-lakeside] .hljs-comment{color:#5a7b8c}[theme=base16-atelier-lakeside] .hljs-tag{color:#7195a8}[theme=base16-atelier-lakeside] .hljs-operator,[theme=base16-atelier-lakeside] .hljs-punctuation,[theme=base16-atelier-lakeside] .hljs-subst{color:#7ea2b4}[theme=base16-atelier-lakeside] .hljs-operator{opacity:.7}[theme=base16-atelier-lakeside] .hljs-bullet,[theme=base16-atelier-lakeside] .hljs-deletion,[theme=base16-atelier-lakeside] .hljs-name,[theme=base16-atelier-lakeside] .hljs-selector-tag,[theme=base16-atelier-lakeside] .hljs-template-variable,[theme=base16-atelier-lakeside] .hljs-variable{color:#d22d72}[theme=base16-atelier-lakeside] .hljs-attr,[theme=base16-atelier-lakeside] .hljs-link,[theme=base16-atelier-lakeside] .hljs-literal,[theme=base16-atelier-lakeside] .hljs-number,[theme=base16-atelier-lakeside] .hljs-symbol,[theme=base16-atelier-lakeside] .hljs-variable.constant_{color:#935c25}[theme=base16-atelier-lakeside] .hljs-class .hljs-title,[theme=base16-atelier-lakeside] .hljs-title,[theme=base16-atelier-lakeside] .hljs-title.class_{color:#8a8a0f}[theme=base16-atelier-lakeside] .hljs-strong{font-weight:700;color:#8a8a0f}[theme=base16-atelier-lakeside] .hljs-addition,[theme=base16-atelier-lakeside] .hljs-code,[theme=base16-atelier-lakeside] .hljs-string,[theme=base16-atelier-lakeside] .hljs-title.class_.inherited__{color:#568c3b}[theme=base16-atelier-lakeside] .hljs-built_in,[theme=base16-atelier-lakeside] .hljs-doctag,[theme=base16-atelier-lakeside] .hljs-keyword.hljs-atrule,[theme=base16-atelier-lakeside] .hljs-quote,[theme=base16-atelier-lakeside] .hljs-regexp{color:#2d8f6f}[theme=base16-atelier-lakeside] .hljs-attribute,[theme=base16-atelier-lakeside] .hljs-function .hljs-title,[theme=base16-atelier-lakeside] .hljs-section,[theme=base16-atelier-lakeside] .hljs-title.function_,[theme=base16-atelier-lakeside] .ruby .hljs-property{color:#257fad}[theme=base16-atelier-lakeside] .diff .hljs-meta,[theme=base16-atelier-lakeside] .hljs-keyword,[theme=base16-atelier-lakeside] .hljs-template-tag,[theme=base16-atelier-lakeside] .hljs-type{color:#6b6bb8}[theme=base16-atelier-lakeside] .hljs-emphasis{color:#6b6bb8;font-style:italic}[theme=base16-atelier-lakeside] .hljs-meta,[theme=base16-atelier-lakeside] .hljs-meta .hljs-keyword,[theme=base16-atelier-lakeside] .hljs-meta .hljs-string{color:#b72dd2}[theme=base16-atelier-lakeside] .hljs-meta .hljs-keyword,[theme=base16-atelier-lakeside] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-plateau-light]{ + /*! + Theme: Atelier Plateau Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-plateau-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-plateau-light] code.hljs{padding:3px 5px}[theme=base16-atelier-plateau-light] .hljs{color:#585050;background:#f4ecec}[theme=base16-atelier-plateau-light] .hljs ::-moz-selection,[theme=base16-atelier-plateau-light] .hljs::-moz-selection{background-color:#8a8585;color:#585050}[theme=base16-atelier-plateau-light] .hljs ::selection,[theme=base16-atelier-plateau-light] .hljs::selection{background-color:#8a8585;color:#585050}[theme=base16-atelier-plateau-light] .hljs-comment{color:#7e7777}[theme=base16-atelier-plateau-light] .hljs-tag{color:#655d5d}[theme=base16-atelier-plateau-light] .hljs-operator,[theme=base16-atelier-plateau-light] .hljs-punctuation,[theme=base16-atelier-plateau-light] .hljs-subst{color:#585050}[theme=base16-atelier-plateau-light] .hljs-operator{opacity:.7}[theme=base16-atelier-plateau-light] .hljs-bullet,[theme=base16-atelier-plateau-light] .hljs-deletion,[theme=base16-atelier-plateau-light] .hljs-name,[theme=base16-atelier-plateau-light] .hljs-selector-tag,[theme=base16-atelier-plateau-light] .hljs-template-variable,[theme=base16-atelier-plateau-light] .hljs-variable{color:#ca4949}[theme=base16-atelier-plateau-light] .hljs-attr,[theme=base16-atelier-plateau-light] .hljs-link,[theme=base16-atelier-plateau-light] .hljs-literal,[theme=base16-atelier-plateau-light] .hljs-number,[theme=base16-atelier-plateau-light] .hljs-symbol,[theme=base16-atelier-plateau-light] .hljs-variable.constant_{color:#b45a3c}[theme=base16-atelier-plateau-light] .hljs-class .hljs-title,[theme=base16-atelier-plateau-light] .hljs-title,[theme=base16-atelier-plateau-light] .hljs-title.class_{color:#a06e3b}[theme=base16-atelier-plateau-light] .hljs-strong{font-weight:700;color:#a06e3b}[theme=base16-atelier-plateau-light] .hljs-addition,[theme=base16-atelier-plateau-light] .hljs-code,[theme=base16-atelier-plateau-light] .hljs-string,[theme=base16-atelier-plateau-light] .hljs-title.class_.inherited__{color:#4b8b8b}[theme=base16-atelier-plateau-light] .hljs-built_in,[theme=base16-atelier-plateau-light] .hljs-doctag,[theme=base16-atelier-plateau-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-plateau-light] .hljs-quote,[theme=base16-atelier-plateau-light] .hljs-regexp{color:#5485b6}[theme=base16-atelier-plateau-light] .hljs-attribute,[theme=base16-atelier-plateau-light] .hljs-function .hljs-title,[theme=base16-atelier-plateau-light] .hljs-section,[theme=base16-atelier-plateau-light] .hljs-title.function_,[theme=base16-atelier-plateau-light] .ruby .hljs-property{color:#7272ca}[theme=base16-atelier-plateau-light] .diff .hljs-meta,[theme=base16-atelier-plateau-light] .hljs-keyword,[theme=base16-atelier-plateau-light] .hljs-template-tag,[theme=base16-atelier-plateau-light] .hljs-type{color:#8464c4}[theme=base16-atelier-plateau-light] .hljs-emphasis{color:#8464c4;font-style:italic}[theme=base16-atelier-plateau-light] .hljs-meta,[theme=base16-atelier-plateau-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-plateau-light] .hljs-meta .hljs-string{color:#bd5187}[theme=base16-atelier-plateau-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-plateau-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-plateau]{ + /*! + Theme: Atelier Plateau + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-plateau] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-plateau] code.hljs{padding:3px 5px}[theme=base16-atelier-plateau] .hljs{color:#8a8585;background:#1b1818}[theme=base16-atelier-plateau] .hljs ::-moz-selection,[theme=base16-atelier-plateau] .hljs::-moz-selection{background-color:#585050;color:#8a8585}[theme=base16-atelier-plateau] .hljs ::selection,[theme=base16-atelier-plateau] .hljs::selection{background-color:#585050;color:#8a8585}[theme=base16-atelier-plateau] .hljs-comment{color:#655d5d}[theme=base16-atelier-plateau] .hljs-tag{color:#7e7777}[theme=base16-atelier-plateau] .hljs-operator,[theme=base16-atelier-plateau] .hljs-punctuation,[theme=base16-atelier-plateau] .hljs-subst{color:#8a8585}[theme=base16-atelier-plateau] .hljs-operator{opacity:.7}[theme=base16-atelier-plateau] .hljs-bullet,[theme=base16-atelier-plateau] .hljs-deletion,[theme=base16-atelier-plateau] .hljs-name,[theme=base16-atelier-plateau] .hljs-selector-tag,[theme=base16-atelier-plateau] .hljs-template-variable,[theme=base16-atelier-plateau] .hljs-variable{color:#ca4949}[theme=base16-atelier-plateau] .hljs-attr,[theme=base16-atelier-plateau] .hljs-link,[theme=base16-atelier-plateau] .hljs-literal,[theme=base16-atelier-plateau] .hljs-number,[theme=base16-atelier-plateau] .hljs-symbol,[theme=base16-atelier-plateau] .hljs-variable.constant_{color:#b45a3c}[theme=base16-atelier-plateau] .hljs-class .hljs-title,[theme=base16-atelier-plateau] .hljs-title,[theme=base16-atelier-plateau] .hljs-title.class_{color:#a06e3b}[theme=base16-atelier-plateau] .hljs-strong{font-weight:700;color:#a06e3b}[theme=base16-atelier-plateau] .hljs-addition,[theme=base16-atelier-plateau] .hljs-code,[theme=base16-atelier-plateau] .hljs-string,[theme=base16-atelier-plateau] .hljs-title.class_.inherited__{color:#4b8b8b}[theme=base16-atelier-plateau] .hljs-built_in,[theme=base16-atelier-plateau] .hljs-doctag,[theme=base16-atelier-plateau] .hljs-keyword.hljs-atrule,[theme=base16-atelier-plateau] .hljs-quote,[theme=base16-atelier-plateau] .hljs-regexp{color:#5485b6}[theme=base16-atelier-plateau] .hljs-attribute,[theme=base16-atelier-plateau] .hljs-function .hljs-title,[theme=base16-atelier-plateau] .hljs-section,[theme=base16-atelier-plateau] .hljs-title.function_,[theme=base16-atelier-plateau] .ruby .hljs-property{color:#7272ca}[theme=base16-atelier-plateau] .diff .hljs-meta,[theme=base16-atelier-plateau] .hljs-keyword,[theme=base16-atelier-plateau] .hljs-template-tag,[theme=base16-atelier-plateau] .hljs-type{color:#8464c4}[theme=base16-atelier-plateau] .hljs-emphasis{color:#8464c4;font-style:italic}[theme=base16-atelier-plateau] .hljs-meta,[theme=base16-atelier-plateau] .hljs-meta .hljs-keyword,[theme=base16-atelier-plateau] .hljs-meta .hljs-string{color:#bd5187}[theme=base16-atelier-plateau] .hljs-meta .hljs-keyword,[theme=base16-atelier-plateau] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-savanna-light]{ + /*! + Theme: Atelier Savanna Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-savanna-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-savanna-light] code.hljs{padding:3px 5px}[theme=base16-atelier-savanna-light] .hljs{color:#526057;background:#ecf4ee}[theme=base16-atelier-savanna-light] .hljs ::-moz-selection,[theme=base16-atelier-savanna-light] .hljs::-moz-selection{background-color:#87928a;color:#526057}[theme=base16-atelier-savanna-light] .hljs ::selection,[theme=base16-atelier-savanna-light] .hljs::selection{background-color:#87928a;color:#526057}[theme=base16-atelier-savanna-light] .hljs-comment{color:#78877d}[theme=base16-atelier-savanna-light] .hljs-tag{color:#5f6d64}[theme=base16-atelier-savanna-light] .hljs-operator,[theme=base16-atelier-savanna-light] .hljs-punctuation,[theme=base16-atelier-savanna-light] .hljs-subst{color:#526057}[theme=base16-atelier-savanna-light] .hljs-operator{opacity:.7}[theme=base16-atelier-savanna-light] .hljs-bullet,[theme=base16-atelier-savanna-light] .hljs-deletion,[theme=base16-atelier-savanna-light] .hljs-name,[theme=base16-atelier-savanna-light] .hljs-selector-tag,[theme=base16-atelier-savanna-light] .hljs-template-variable,[theme=base16-atelier-savanna-light] .hljs-variable{color:#b16139}[theme=base16-atelier-savanna-light] .hljs-attr,[theme=base16-atelier-savanna-light] .hljs-link,[theme=base16-atelier-savanna-light] .hljs-literal,[theme=base16-atelier-savanna-light] .hljs-number,[theme=base16-atelier-savanna-light] .hljs-symbol,[theme=base16-atelier-savanna-light] .hljs-variable.constant_{color:#9f713c}[theme=base16-atelier-savanna-light] .hljs-class .hljs-title,[theme=base16-atelier-savanna-light] .hljs-title,[theme=base16-atelier-savanna-light] .hljs-title.class_{color:#a07e3b}[theme=base16-atelier-savanna-light] .hljs-strong{font-weight:700;color:#a07e3b}[theme=base16-atelier-savanna-light] .hljs-addition,[theme=base16-atelier-savanna-light] .hljs-code,[theme=base16-atelier-savanna-light] .hljs-string,[theme=base16-atelier-savanna-light] .hljs-title.class_.inherited__{color:#489963}[theme=base16-atelier-savanna-light] .hljs-built_in,[theme=base16-atelier-savanna-light] .hljs-doctag,[theme=base16-atelier-savanna-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-savanna-light] .hljs-quote,[theme=base16-atelier-savanna-light] .hljs-regexp{color:#1c9aa0}[theme=base16-atelier-savanna-light] .hljs-attribute,[theme=base16-atelier-savanna-light] .hljs-function .hljs-title,[theme=base16-atelier-savanna-light] .hljs-section,[theme=base16-atelier-savanna-light] .hljs-title.function_,[theme=base16-atelier-savanna-light] .ruby .hljs-property{color:#478c90}[theme=base16-atelier-savanna-light] .diff .hljs-meta,[theme=base16-atelier-savanna-light] .hljs-keyword,[theme=base16-atelier-savanna-light] .hljs-template-tag,[theme=base16-atelier-savanna-light] .hljs-type{color:#55859b}[theme=base16-atelier-savanna-light] .hljs-emphasis{color:#55859b;font-style:italic}[theme=base16-atelier-savanna-light] .hljs-meta,[theme=base16-atelier-savanna-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-savanna-light] .hljs-meta .hljs-string{color:#867469}[theme=base16-atelier-savanna-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-savanna-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-savanna]{ + /*! + Theme: Atelier Savanna + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-savanna] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-savanna] code.hljs{padding:3px 5px}[theme=base16-atelier-savanna] .hljs{color:#87928a;background:#171c19}[theme=base16-atelier-savanna] .hljs ::-moz-selection,[theme=base16-atelier-savanna] .hljs::-moz-selection{background-color:#526057;color:#87928a}[theme=base16-atelier-savanna] .hljs ::selection,[theme=base16-atelier-savanna] .hljs::selection{background-color:#526057;color:#87928a}[theme=base16-atelier-savanna] .hljs-comment{color:#5f6d64}[theme=base16-atelier-savanna] .hljs-tag{color:#78877d}[theme=base16-atelier-savanna] .hljs-operator,[theme=base16-atelier-savanna] .hljs-punctuation,[theme=base16-atelier-savanna] .hljs-subst{color:#87928a}[theme=base16-atelier-savanna] .hljs-operator{opacity:.7}[theme=base16-atelier-savanna] .hljs-bullet,[theme=base16-atelier-savanna] .hljs-deletion,[theme=base16-atelier-savanna] .hljs-name,[theme=base16-atelier-savanna] .hljs-selector-tag,[theme=base16-atelier-savanna] .hljs-template-variable,[theme=base16-atelier-savanna] .hljs-variable{color:#b16139}[theme=base16-atelier-savanna] .hljs-attr,[theme=base16-atelier-savanna] .hljs-link,[theme=base16-atelier-savanna] .hljs-literal,[theme=base16-atelier-savanna] .hljs-number,[theme=base16-atelier-savanna] .hljs-symbol,[theme=base16-atelier-savanna] .hljs-variable.constant_{color:#9f713c}[theme=base16-atelier-savanna] .hljs-class .hljs-title,[theme=base16-atelier-savanna] .hljs-title,[theme=base16-atelier-savanna] .hljs-title.class_{color:#a07e3b}[theme=base16-atelier-savanna] .hljs-strong{font-weight:700;color:#a07e3b}[theme=base16-atelier-savanna] .hljs-addition,[theme=base16-atelier-savanna] .hljs-code,[theme=base16-atelier-savanna] .hljs-string,[theme=base16-atelier-savanna] .hljs-title.class_.inherited__{color:#489963}[theme=base16-atelier-savanna] .hljs-built_in,[theme=base16-atelier-savanna] .hljs-doctag,[theme=base16-atelier-savanna] .hljs-keyword.hljs-atrule,[theme=base16-atelier-savanna] .hljs-quote,[theme=base16-atelier-savanna] .hljs-regexp{color:#1c9aa0}[theme=base16-atelier-savanna] .hljs-attribute,[theme=base16-atelier-savanna] .hljs-function .hljs-title,[theme=base16-atelier-savanna] .hljs-section,[theme=base16-atelier-savanna] .hljs-title.function_,[theme=base16-atelier-savanna] .ruby .hljs-property{color:#478c90}[theme=base16-atelier-savanna] .diff .hljs-meta,[theme=base16-atelier-savanna] .hljs-keyword,[theme=base16-atelier-savanna] .hljs-template-tag,[theme=base16-atelier-savanna] .hljs-type{color:#55859b}[theme=base16-atelier-savanna] .hljs-emphasis{color:#55859b;font-style:italic}[theme=base16-atelier-savanna] .hljs-meta,[theme=base16-atelier-savanna] .hljs-meta .hljs-keyword,[theme=base16-atelier-savanna] .hljs-meta .hljs-string{color:#867469}[theme=base16-atelier-savanna] .hljs-meta .hljs-keyword,[theme=base16-atelier-savanna] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-seaside-light]{ + /*! + Theme: Atelier Seaside Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-seaside-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-seaside-light] code.hljs{padding:3px 5px}[theme=base16-atelier-seaside-light] .hljs{color:#5e6e5e;background:#f4fbf4}[theme=base16-atelier-seaside-light] .hljs ::-moz-selection,[theme=base16-atelier-seaside-light] .hljs::-moz-selection{background-color:#8ca68c;color:#5e6e5e}[theme=base16-atelier-seaside-light] .hljs ::selection,[theme=base16-atelier-seaside-light] .hljs::selection{background-color:#8ca68c;color:#5e6e5e}[theme=base16-atelier-seaside-light] .hljs-comment{color:#809980}[theme=base16-atelier-seaside-light] .hljs-tag{color:#687d68}[theme=base16-atelier-seaside-light] .hljs-operator,[theme=base16-atelier-seaside-light] .hljs-punctuation,[theme=base16-atelier-seaside-light] .hljs-subst{color:#5e6e5e}[theme=base16-atelier-seaside-light] .hljs-operator{opacity:.7}[theme=base16-atelier-seaside-light] .hljs-bullet,[theme=base16-atelier-seaside-light] .hljs-deletion,[theme=base16-atelier-seaside-light] .hljs-name,[theme=base16-atelier-seaside-light] .hljs-selector-tag,[theme=base16-atelier-seaside-light] .hljs-template-variable,[theme=base16-atelier-seaside-light] .hljs-variable{color:#e6193c}[theme=base16-atelier-seaside-light] .hljs-attr,[theme=base16-atelier-seaside-light] .hljs-link,[theme=base16-atelier-seaside-light] .hljs-literal,[theme=base16-atelier-seaside-light] .hljs-number,[theme=base16-atelier-seaside-light] .hljs-symbol,[theme=base16-atelier-seaside-light] .hljs-variable.constant_{color:#87711d}[theme=base16-atelier-seaside-light] .hljs-class .hljs-title,[theme=base16-atelier-seaside-light] .hljs-title,[theme=base16-atelier-seaside-light] .hljs-title.class_{color:#98981b}[theme=base16-atelier-seaside-light] .hljs-strong{font-weight:700;color:#98981b}[theme=base16-atelier-seaside-light] .hljs-addition,[theme=base16-atelier-seaside-light] .hljs-code,[theme=base16-atelier-seaside-light] .hljs-string,[theme=base16-atelier-seaside-light] .hljs-title.class_.inherited__{color:#29a329}[theme=base16-atelier-seaside-light] .hljs-built_in,[theme=base16-atelier-seaside-light] .hljs-doctag,[theme=base16-atelier-seaside-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-seaside-light] .hljs-quote,[theme=base16-atelier-seaside-light] .hljs-regexp{color:#1999b3}[theme=base16-atelier-seaside-light] .hljs-attribute,[theme=base16-atelier-seaside-light] .hljs-function .hljs-title,[theme=base16-atelier-seaside-light] .hljs-section,[theme=base16-atelier-seaside-light] .hljs-title.function_,[theme=base16-atelier-seaside-light] .ruby .hljs-property{color:#3d62f5}[theme=base16-atelier-seaside-light] .diff .hljs-meta,[theme=base16-atelier-seaside-light] .hljs-keyword,[theme=base16-atelier-seaside-light] .hljs-template-tag,[theme=base16-atelier-seaside-light] .hljs-type{color:#ad2bee}[theme=base16-atelier-seaside-light] .hljs-emphasis{color:#ad2bee;font-style:italic}[theme=base16-atelier-seaside-light] .hljs-meta,[theme=base16-atelier-seaside-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-seaside-light] .hljs-meta .hljs-string{color:#e619c3}[theme=base16-atelier-seaside-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-seaside-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-seaside]{ + /*! + Theme: Atelier Seaside + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-seaside] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-seaside] code.hljs{padding:3px 5px}[theme=base16-atelier-seaside] .hljs{color:#8ca68c;background:#131513}[theme=base16-atelier-seaside] .hljs ::-moz-selection,[theme=base16-atelier-seaside] .hljs::-moz-selection{background-color:#5e6e5e;color:#8ca68c}[theme=base16-atelier-seaside] .hljs ::selection,[theme=base16-atelier-seaside] .hljs::selection{background-color:#5e6e5e;color:#8ca68c}[theme=base16-atelier-seaside] .hljs-comment{color:#687d68}[theme=base16-atelier-seaside] .hljs-tag{color:#809980}[theme=base16-atelier-seaside] .hljs-operator,[theme=base16-atelier-seaside] .hljs-punctuation,[theme=base16-atelier-seaside] .hljs-subst{color:#8ca68c}[theme=base16-atelier-seaside] .hljs-operator{opacity:.7}[theme=base16-atelier-seaside] .hljs-bullet,[theme=base16-atelier-seaside] .hljs-deletion,[theme=base16-atelier-seaside] .hljs-name,[theme=base16-atelier-seaside] .hljs-selector-tag,[theme=base16-atelier-seaside] .hljs-template-variable,[theme=base16-atelier-seaside] .hljs-variable{color:#e6193c}[theme=base16-atelier-seaside] .hljs-attr,[theme=base16-atelier-seaside] .hljs-link,[theme=base16-atelier-seaside] .hljs-literal,[theme=base16-atelier-seaside] .hljs-number,[theme=base16-atelier-seaside] .hljs-symbol,[theme=base16-atelier-seaside] .hljs-variable.constant_{color:#87711d}[theme=base16-atelier-seaside] .hljs-class .hljs-title,[theme=base16-atelier-seaside] .hljs-title,[theme=base16-atelier-seaside] .hljs-title.class_{color:#98981b}[theme=base16-atelier-seaside] .hljs-strong{font-weight:700;color:#98981b}[theme=base16-atelier-seaside] .hljs-addition,[theme=base16-atelier-seaside] .hljs-code,[theme=base16-atelier-seaside] .hljs-string,[theme=base16-atelier-seaside] .hljs-title.class_.inherited__{color:#29a329}[theme=base16-atelier-seaside] .hljs-built_in,[theme=base16-atelier-seaside] .hljs-doctag,[theme=base16-atelier-seaside] .hljs-keyword.hljs-atrule,[theme=base16-atelier-seaside] .hljs-quote,[theme=base16-atelier-seaside] .hljs-regexp{color:#1999b3}[theme=base16-atelier-seaside] .hljs-attribute,[theme=base16-atelier-seaside] .hljs-function .hljs-title,[theme=base16-atelier-seaside] .hljs-section,[theme=base16-atelier-seaside] .hljs-title.function_,[theme=base16-atelier-seaside] .ruby .hljs-property{color:#3d62f5}[theme=base16-atelier-seaside] .diff .hljs-meta,[theme=base16-atelier-seaside] .hljs-keyword,[theme=base16-atelier-seaside] .hljs-template-tag,[theme=base16-atelier-seaside] .hljs-type{color:#ad2bee}[theme=base16-atelier-seaside] .hljs-emphasis{color:#ad2bee;font-style:italic}[theme=base16-atelier-seaside] .hljs-meta,[theme=base16-atelier-seaside] .hljs-meta .hljs-keyword,[theme=base16-atelier-seaside] .hljs-meta .hljs-string{color:#e619c3}[theme=base16-atelier-seaside] .hljs-meta .hljs-keyword,[theme=base16-atelier-seaside] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-sulphurpool-light]{ + /*! + Theme: Atelier Sulphurpool Light + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-sulphurpool-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-sulphurpool-light] code.hljs{padding:3px 5px}[theme=base16-atelier-sulphurpool-light] .hljs{color:#5e6687;background:#f5f7ff}[theme=base16-atelier-sulphurpool-light] .hljs ::-moz-selection,[theme=base16-atelier-sulphurpool-light] .hljs::-moz-selection{background-color:#979db4;color:#5e6687}[theme=base16-atelier-sulphurpool-light] .hljs ::selection,[theme=base16-atelier-sulphurpool-light] .hljs::selection{background-color:#979db4;color:#5e6687}[theme=base16-atelier-sulphurpool-light] .hljs-comment{color:#898ea4}[theme=base16-atelier-sulphurpool-light] .hljs-tag{color:#6b7394}[theme=base16-atelier-sulphurpool-light] .hljs-operator,[theme=base16-atelier-sulphurpool-light] .hljs-punctuation,[theme=base16-atelier-sulphurpool-light] .hljs-subst{color:#5e6687}[theme=base16-atelier-sulphurpool-light] .hljs-operator{opacity:.7}[theme=base16-atelier-sulphurpool-light] .hljs-bullet,[theme=base16-atelier-sulphurpool-light] .hljs-deletion,[theme=base16-atelier-sulphurpool-light] .hljs-name,[theme=base16-atelier-sulphurpool-light] .hljs-selector-tag,[theme=base16-atelier-sulphurpool-light] .hljs-template-variable,[theme=base16-atelier-sulphurpool-light] .hljs-variable{color:#c94922}[theme=base16-atelier-sulphurpool-light] .hljs-attr,[theme=base16-atelier-sulphurpool-light] .hljs-link,[theme=base16-atelier-sulphurpool-light] .hljs-literal,[theme=base16-atelier-sulphurpool-light] .hljs-number,[theme=base16-atelier-sulphurpool-light] .hljs-symbol,[theme=base16-atelier-sulphurpool-light] .hljs-variable.constant_{color:#c76b29}[theme=base16-atelier-sulphurpool-light] .hljs-class .hljs-title,[theme=base16-atelier-sulphurpool-light] .hljs-title,[theme=base16-atelier-sulphurpool-light] .hljs-title.class_{color:#c08b30}[theme=base16-atelier-sulphurpool-light] .hljs-strong{font-weight:700;color:#c08b30}[theme=base16-atelier-sulphurpool-light] .hljs-addition,[theme=base16-atelier-sulphurpool-light] .hljs-code,[theme=base16-atelier-sulphurpool-light] .hljs-string,[theme=base16-atelier-sulphurpool-light] .hljs-title.class_.inherited__{color:#ac9739}[theme=base16-atelier-sulphurpool-light] .hljs-built_in,[theme=base16-atelier-sulphurpool-light] .hljs-doctag,[theme=base16-atelier-sulphurpool-light] .hljs-keyword.hljs-atrule,[theme=base16-atelier-sulphurpool-light] .hljs-quote,[theme=base16-atelier-sulphurpool-light] .hljs-regexp{color:#22a2c9}[theme=base16-atelier-sulphurpool-light] .hljs-attribute,[theme=base16-atelier-sulphurpool-light] .hljs-function .hljs-title,[theme=base16-atelier-sulphurpool-light] .hljs-section,[theme=base16-atelier-sulphurpool-light] .hljs-title.function_,[theme=base16-atelier-sulphurpool-light] .ruby .hljs-property{color:#3d8fd1}[theme=base16-atelier-sulphurpool-light] .diff .hljs-meta,[theme=base16-atelier-sulphurpool-light] .hljs-keyword,[theme=base16-atelier-sulphurpool-light] .hljs-template-tag,[theme=base16-atelier-sulphurpool-light] .hljs-type{color:#6679cc}[theme=base16-atelier-sulphurpool-light] .hljs-emphasis{color:#6679cc;font-style:italic}[theme=base16-atelier-sulphurpool-light] .hljs-meta,[theme=base16-atelier-sulphurpool-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-sulphurpool-light] .hljs-meta .hljs-string{color:#9c637a}[theme=base16-atelier-sulphurpool-light] .hljs-meta .hljs-keyword,[theme=base16-atelier-sulphurpool-light] .hljs-meta-keyword{font-weight:700}[theme=base16-atelier-sulphurpool]{ + /*! + Theme: Atelier Sulphurpool + Author: Bram de Haan (http://atelierbramdehaan.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atelier-sulphurpool] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atelier-sulphurpool] code.hljs{padding:3px 5px}[theme=base16-atelier-sulphurpool] .hljs{color:#979db4;background:#202746}[theme=base16-atelier-sulphurpool] .hljs ::-moz-selection,[theme=base16-atelier-sulphurpool] .hljs::-moz-selection{background-color:#5e6687;color:#979db4}[theme=base16-atelier-sulphurpool] .hljs ::selection,[theme=base16-atelier-sulphurpool] .hljs::selection{background-color:#5e6687;color:#979db4}[theme=base16-atelier-sulphurpool] .hljs-comment{color:#6b7394}[theme=base16-atelier-sulphurpool] .hljs-tag{color:#898ea4}[theme=base16-atelier-sulphurpool] .hljs-operator,[theme=base16-atelier-sulphurpool] .hljs-punctuation,[theme=base16-atelier-sulphurpool] .hljs-subst{color:#979db4}[theme=base16-atelier-sulphurpool] .hljs-operator{opacity:.7}[theme=base16-atelier-sulphurpool] .hljs-bullet,[theme=base16-atelier-sulphurpool] .hljs-deletion,[theme=base16-atelier-sulphurpool] .hljs-name,[theme=base16-atelier-sulphurpool] .hljs-selector-tag,[theme=base16-atelier-sulphurpool] .hljs-template-variable,[theme=base16-atelier-sulphurpool] .hljs-variable{color:#c94922}[theme=base16-atelier-sulphurpool] .hljs-attr,[theme=base16-atelier-sulphurpool] .hljs-link,[theme=base16-atelier-sulphurpool] .hljs-literal,[theme=base16-atelier-sulphurpool] .hljs-number,[theme=base16-atelier-sulphurpool] .hljs-symbol,[theme=base16-atelier-sulphurpool] .hljs-variable.constant_{color:#c76b29}[theme=base16-atelier-sulphurpool] .hljs-class .hljs-title,[theme=base16-atelier-sulphurpool] .hljs-title,[theme=base16-atelier-sulphurpool] .hljs-title.class_{color:#c08b30}[theme=base16-atelier-sulphurpool] .hljs-strong{font-weight:700;color:#c08b30}[theme=base16-atelier-sulphurpool] .hljs-addition,[theme=base16-atelier-sulphurpool] .hljs-code,[theme=base16-atelier-sulphurpool] .hljs-string,[theme=base16-atelier-sulphurpool] .hljs-title.class_.inherited__{color:#ac9739}[theme=base16-atelier-sulphurpool] .hljs-built_in,[theme=base16-atelier-sulphurpool] .hljs-doctag,[theme=base16-atelier-sulphurpool] .hljs-keyword.hljs-atrule,[theme=base16-atelier-sulphurpool] .hljs-quote,[theme=base16-atelier-sulphurpool] .hljs-regexp{color:#22a2c9}[theme=base16-atelier-sulphurpool] .hljs-attribute,[theme=base16-atelier-sulphurpool] .hljs-function .hljs-title,[theme=base16-atelier-sulphurpool] .hljs-section,[theme=base16-atelier-sulphurpool] .hljs-title.function_,[theme=base16-atelier-sulphurpool] .ruby .hljs-property{color:#3d8fd1}[theme=base16-atelier-sulphurpool] .diff .hljs-meta,[theme=base16-atelier-sulphurpool] .hljs-keyword,[theme=base16-atelier-sulphurpool] .hljs-template-tag,[theme=base16-atelier-sulphurpool] .hljs-type{color:#6679cc}[theme=base16-atelier-sulphurpool] .hljs-emphasis{color:#6679cc;font-style:italic}[theme=base16-atelier-sulphurpool] .hljs-meta,[theme=base16-atelier-sulphurpool] .hljs-meta .hljs-keyword,[theme=base16-atelier-sulphurpool] .hljs-meta .hljs-string{color:#9c637a}[theme=base16-atelier-sulphurpool] .hljs-meta .hljs-keyword,[theme=base16-atelier-sulphurpool] .hljs-meta-keyword{font-weight:700}[theme=base16-atlas]{ + /*! + Theme: Atlas + Author: Alex Lende (https://ajlende.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-atlas] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-atlas] code.hljs{padding:3px 5px}[theme=base16-atlas] .hljs{color:#a1a19a;background:#002635}[theme=base16-atlas] .hljs ::-moz-selection,[theme=base16-atlas] .hljs::-moz-selection{background-color:#517f8d;color:#a1a19a}[theme=base16-atlas] .hljs ::selection,[theme=base16-atlas] .hljs::selection{background-color:#517f8d;color:#a1a19a}[theme=base16-atlas] .hljs-comment{color:#6c8b91}[theme=base16-atlas] .hljs-tag{color:#869696}[theme=base16-atlas] .hljs-operator,[theme=base16-atlas] .hljs-punctuation,[theme=base16-atlas] .hljs-subst{color:#a1a19a}[theme=base16-atlas] .hljs-operator{opacity:.7}[theme=base16-atlas] .hljs-bullet,[theme=base16-atlas] .hljs-deletion,[theme=base16-atlas] .hljs-name,[theme=base16-atlas] .hljs-selector-tag,[theme=base16-atlas] .hljs-template-variable,[theme=base16-atlas] .hljs-variable{color:#ff5a67}[theme=base16-atlas] .hljs-attr,[theme=base16-atlas] .hljs-link,[theme=base16-atlas] .hljs-literal,[theme=base16-atlas] .hljs-number,[theme=base16-atlas] .hljs-symbol,[theme=base16-atlas] .hljs-variable.constant_{color:#f08e48}[theme=base16-atlas] .hljs-class .hljs-title,[theme=base16-atlas] .hljs-title,[theme=base16-atlas] .hljs-title.class_{color:#ffcc1b}[theme=base16-atlas] .hljs-strong{font-weight:700;color:#ffcc1b}[theme=base16-atlas] .hljs-addition,[theme=base16-atlas] .hljs-code,[theme=base16-atlas] .hljs-string,[theme=base16-atlas] .hljs-title.class_.inherited__{color:#7fc06e}[theme=base16-atlas] .hljs-built_in,[theme=base16-atlas] .hljs-doctag,[theme=base16-atlas] .hljs-keyword.hljs-atrule,[theme=base16-atlas] .hljs-quote,[theme=base16-atlas] .hljs-regexp{color:#14747e}[theme=base16-atlas] .hljs-attribute,[theme=base16-atlas] .hljs-function .hljs-title,[theme=base16-atlas] .hljs-section,[theme=base16-atlas] .hljs-title.function_,[theme=base16-atlas] .ruby .hljs-property{color:#5dd7b9}[theme=base16-atlas] .diff .hljs-meta,[theme=base16-atlas] .hljs-keyword,[theme=base16-atlas] .hljs-template-tag,[theme=base16-atlas] .hljs-type{color:#9a70a4}[theme=base16-atlas] .hljs-emphasis{color:#9a70a4;font-style:italic}[theme=base16-atlas] .hljs-meta,[theme=base16-atlas] .hljs-meta .hljs-keyword,[theme=base16-atlas] .hljs-meta .hljs-string{color:#c43060}[theme=base16-atlas] .hljs-meta .hljs-keyword,[theme=base16-atlas] .hljs-meta-keyword{font-weight:700}[theme=base16-bespin]{ + /*! + Theme: Bespin + Author: Jan T. Sott + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-bespin] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-bespin] code.hljs{padding:3px 5px}[theme=base16-bespin] .hljs{color:#8a8986;background:#28211c}[theme=base16-bespin] .hljs ::-moz-selection,[theme=base16-bespin] .hljs::-moz-selection{background-color:#5e5d5c;color:#8a8986}[theme=base16-bespin] .hljs ::selection,[theme=base16-bespin] .hljs::selection{background-color:#5e5d5c;color:#8a8986}[theme=base16-bespin] .hljs-comment{color:#666}[theme=base16-bespin] .hljs-tag{color:#797977}[theme=base16-bespin] .hljs-operator,[theme=base16-bespin] .hljs-punctuation,[theme=base16-bespin] .hljs-subst{color:#8a8986}[theme=base16-bespin] .hljs-operator{opacity:.7}[theme=base16-bespin] .hljs-bullet,[theme=base16-bespin] .hljs-deletion,[theme=base16-bespin] .hljs-name,[theme=base16-bespin] .hljs-selector-tag,[theme=base16-bespin] .hljs-template-variable,[theme=base16-bespin] .hljs-variable{color:#cf6a4c}[theme=base16-bespin] .hljs-attr,[theme=base16-bespin] .hljs-link,[theme=base16-bespin] .hljs-literal,[theme=base16-bespin] .hljs-number,[theme=base16-bespin] .hljs-symbol,[theme=base16-bespin] .hljs-variable.constant_{color:#cf7d34}[theme=base16-bespin] .hljs-class .hljs-title,[theme=base16-bespin] .hljs-title,[theme=base16-bespin] .hljs-title.class_{color:#f9ee98}[theme=base16-bespin] .hljs-strong{font-weight:700;color:#f9ee98}[theme=base16-bespin] .hljs-addition,[theme=base16-bespin] .hljs-code,[theme=base16-bespin] .hljs-string,[theme=base16-bespin] .hljs-title.class_.inherited__{color:#54be0d}[theme=base16-bespin] .hljs-built_in,[theme=base16-bespin] .hljs-doctag,[theme=base16-bespin] .hljs-keyword.hljs-atrule,[theme=base16-bespin] .hljs-quote,[theme=base16-bespin] .hljs-regexp{color:#afc4db}[theme=base16-bespin] .hljs-attribute,[theme=base16-bespin] .hljs-function .hljs-title,[theme=base16-bespin] .hljs-section,[theme=base16-bespin] .hljs-title.function_,[theme=base16-bespin] .ruby .hljs-property{color:#5ea6ea}[theme=base16-bespin] .diff .hljs-meta,[theme=base16-bespin] .hljs-keyword,[theme=base16-bespin] .hljs-template-tag,[theme=base16-bespin] .hljs-type{color:#9b859d}[theme=base16-bespin] .hljs-emphasis{color:#9b859d;font-style:italic}[theme=base16-bespin] .hljs-meta,[theme=base16-bespin] .hljs-meta .hljs-keyword,[theme=base16-bespin] .hljs-meta .hljs-string{color:#937121}[theme=base16-bespin] .hljs-meta .hljs-keyword,[theme=base16-bespin] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-bathory]{ + /*! + Theme: Black Metal (Bathory) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-bathory] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-bathory] code.hljs{padding:3px 5px}[theme=base16-black-metal-bathory] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-bathory] .hljs ::-moz-selection,[theme=base16-black-metal-bathory] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-bathory] .hljs ::selection,[theme=base16-black-metal-bathory] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-bathory] .hljs-comment{color:#333}[theme=base16-black-metal-bathory] .hljs-tag{color:#999}[theme=base16-black-metal-bathory] .hljs-operator,[theme=base16-black-metal-bathory] .hljs-punctuation,[theme=base16-black-metal-bathory] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-bathory] .hljs-operator{opacity:.7}[theme=base16-black-metal-bathory] .hljs-bullet,[theme=base16-black-metal-bathory] .hljs-deletion,[theme=base16-black-metal-bathory] .hljs-name,[theme=base16-black-metal-bathory] .hljs-selector-tag,[theme=base16-black-metal-bathory] .hljs-template-variable,[theme=base16-black-metal-bathory] .hljs-variable{color:#5f8787}[theme=base16-black-metal-bathory] .hljs-attr,[theme=base16-black-metal-bathory] .hljs-link,[theme=base16-black-metal-bathory] .hljs-literal,[theme=base16-black-metal-bathory] .hljs-number,[theme=base16-black-metal-bathory] .hljs-symbol,[theme=base16-black-metal-bathory] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-bathory] .hljs-class .hljs-title,[theme=base16-black-metal-bathory] .hljs-title,[theme=base16-black-metal-bathory] .hljs-title.class_{color:#e78a53}[theme=base16-black-metal-bathory] .hljs-strong{font-weight:700;color:#e78a53}[theme=base16-black-metal-bathory] .hljs-addition,[theme=base16-black-metal-bathory] .hljs-code,[theme=base16-black-metal-bathory] .hljs-string,[theme=base16-black-metal-bathory] .hljs-title.class_.inherited__{color:#fbcb97}[theme=base16-black-metal-bathory] .hljs-built_in,[theme=base16-black-metal-bathory] .hljs-doctag,[theme=base16-black-metal-bathory] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-bathory] .hljs-quote,[theme=base16-black-metal-bathory] .hljs-regexp{color:#aaa}[theme=base16-black-metal-bathory] .hljs-attribute,[theme=base16-black-metal-bathory] .hljs-function .hljs-title,[theme=base16-black-metal-bathory] .hljs-section,[theme=base16-black-metal-bathory] .hljs-title.function_,[theme=base16-black-metal-bathory] .ruby .hljs-property{color:#888}[theme=base16-black-metal-bathory] .diff .hljs-meta,[theme=base16-black-metal-bathory] .hljs-keyword,[theme=base16-black-metal-bathory] .hljs-template-tag,[theme=base16-black-metal-bathory] .hljs-type{color:#999}[theme=base16-black-metal-bathory] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-bathory] .hljs-meta,[theme=base16-black-metal-bathory] .hljs-meta .hljs-keyword,[theme=base16-black-metal-bathory] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-bathory] .hljs-meta .hljs-keyword,[theme=base16-black-metal-bathory] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-burzum]{ + /*! + Theme: Black Metal (Burzum) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-burzum] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-burzum] code.hljs{padding:3px 5px}[theme=base16-black-metal-burzum] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-burzum] .hljs ::-moz-selection,[theme=base16-black-metal-burzum] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-burzum] .hljs ::selection,[theme=base16-black-metal-burzum] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-burzum] .hljs-comment{color:#333}[theme=base16-black-metal-burzum] .hljs-tag{color:#999}[theme=base16-black-metal-burzum] .hljs-operator,[theme=base16-black-metal-burzum] .hljs-punctuation,[theme=base16-black-metal-burzum] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-burzum] .hljs-operator{opacity:.7}[theme=base16-black-metal-burzum] .hljs-bullet,[theme=base16-black-metal-burzum] .hljs-deletion,[theme=base16-black-metal-burzum] .hljs-name,[theme=base16-black-metal-burzum] .hljs-selector-tag,[theme=base16-black-metal-burzum] .hljs-template-variable,[theme=base16-black-metal-burzum] .hljs-variable{color:#5f8787}[theme=base16-black-metal-burzum] .hljs-attr,[theme=base16-black-metal-burzum] .hljs-link,[theme=base16-black-metal-burzum] .hljs-literal,[theme=base16-black-metal-burzum] .hljs-number,[theme=base16-black-metal-burzum] .hljs-symbol,[theme=base16-black-metal-burzum] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-burzum] .hljs-class .hljs-title,[theme=base16-black-metal-burzum] .hljs-title,[theme=base16-black-metal-burzum] .hljs-title.class_{color:#9ba}[theme=base16-black-metal-burzum] .hljs-strong{font-weight:700;color:#9ba}[theme=base16-black-metal-burzum] .hljs-addition,[theme=base16-black-metal-burzum] .hljs-code,[theme=base16-black-metal-burzum] .hljs-string,[theme=base16-black-metal-burzum] .hljs-title.class_.inherited__{color:#dec}[theme=base16-black-metal-burzum] .hljs-built_in,[theme=base16-black-metal-burzum] .hljs-doctag,[theme=base16-black-metal-burzum] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-burzum] .hljs-quote,[theme=base16-black-metal-burzum] .hljs-regexp{color:#aaa}[theme=base16-black-metal-burzum] .hljs-attribute,[theme=base16-black-metal-burzum] .hljs-function .hljs-title,[theme=base16-black-metal-burzum] .hljs-section,[theme=base16-black-metal-burzum] .hljs-title.function_,[theme=base16-black-metal-burzum] .ruby .hljs-property{color:#888}[theme=base16-black-metal-burzum] .diff .hljs-meta,[theme=base16-black-metal-burzum] .hljs-keyword,[theme=base16-black-metal-burzum] .hljs-template-tag,[theme=base16-black-metal-burzum] .hljs-type{color:#999}[theme=base16-black-metal-burzum] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-burzum] .hljs-meta,[theme=base16-black-metal-burzum] .hljs-meta .hljs-keyword,[theme=base16-black-metal-burzum] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-burzum] .hljs-meta .hljs-keyword,[theme=base16-black-metal-burzum] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-dark-funeral]{ + /*! + Theme: Black Metal (Dark Funeral) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-dark-funeral] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-dark-funeral] code.hljs{padding:3px 5px}[theme=base16-black-metal-dark-funeral] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-dark-funeral] .hljs ::-moz-selection,[theme=base16-black-metal-dark-funeral] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-dark-funeral] .hljs ::selection,[theme=base16-black-metal-dark-funeral] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-dark-funeral] .hljs-comment{color:#333}[theme=base16-black-metal-dark-funeral] .hljs-tag{color:#999}[theme=base16-black-metal-dark-funeral] .hljs-operator,[theme=base16-black-metal-dark-funeral] .hljs-punctuation,[theme=base16-black-metal-dark-funeral] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-dark-funeral] .hljs-operator{opacity:.7}[theme=base16-black-metal-dark-funeral] .hljs-bullet,[theme=base16-black-metal-dark-funeral] .hljs-deletion,[theme=base16-black-metal-dark-funeral] .hljs-name,[theme=base16-black-metal-dark-funeral] .hljs-selector-tag,[theme=base16-black-metal-dark-funeral] .hljs-template-variable,[theme=base16-black-metal-dark-funeral] .hljs-variable{color:#5f8787}[theme=base16-black-metal-dark-funeral] .hljs-attr,[theme=base16-black-metal-dark-funeral] .hljs-link,[theme=base16-black-metal-dark-funeral] .hljs-literal,[theme=base16-black-metal-dark-funeral] .hljs-number,[theme=base16-black-metal-dark-funeral] .hljs-symbol,[theme=base16-black-metal-dark-funeral] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-dark-funeral] .hljs-class .hljs-title,[theme=base16-black-metal-dark-funeral] .hljs-title,[theme=base16-black-metal-dark-funeral] .hljs-title.class_{color:#5f81a5}[theme=base16-black-metal-dark-funeral] .hljs-strong{font-weight:700;color:#5f81a5}[theme=base16-black-metal-dark-funeral] .hljs-addition,[theme=base16-black-metal-dark-funeral] .hljs-code,[theme=base16-black-metal-dark-funeral] .hljs-string,[theme=base16-black-metal-dark-funeral] .hljs-title.class_.inherited__{color:#d0dfee}[theme=base16-black-metal-dark-funeral] .hljs-built_in,[theme=base16-black-metal-dark-funeral] .hljs-doctag,[theme=base16-black-metal-dark-funeral] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-dark-funeral] .hljs-quote,[theme=base16-black-metal-dark-funeral] .hljs-regexp{color:#aaa}[theme=base16-black-metal-dark-funeral] .hljs-attribute,[theme=base16-black-metal-dark-funeral] .hljs-function .hljs-title,[theme=base16-black-metal-dark-funeral] .hljs-section,[theme=base16-black-metal-dark-funeral] .hljs-title.function_,[theme=base16-black-metal-dark-funeral] .ruby .hljs-property{color:#888}[theme=base16-black-metal-dark-funeral] .diff .hljs-meta,[theme=base16-black-metal-dark-funeral] .hljs-keyword,[theme=base16-black-metal-dark-funeral] .hljs-template-tag,[theme=base16-black-metal-dark-funeral] .hljs-type{color:#999}[theme=base16-black-metal-dark-funeral] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-dark-funeral] .hljs-meta,[theme=base16-black-metal-dark-funeral] .hljs-meta .hljs-keyword,[theme=base16-black-metal-dark-funeral] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-dark-funeral] .hljs-meta .hljs-keyword,[theme=base16-black-metal-dark-funeral] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-gorgoroth]{ + /*! + Theme: Black Metal (Gorgoroth) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-gorgoroth] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-gorgoroth] code.hljs{padding:3px 5px}[theme=base16-black-metal-gorgoroth] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-gorgoroth] .hljs ::-moz-selection,[theme=base16-black-metal-gorgoroth] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-gorgoroth] .hljs ::selection,[theme=base16-black-metal-gorgoroth] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-gorgoroth] .hljs-comment{color:#333}[theme=base16-black-metal-gorgoroth] .hljs-tag{color:#999}[theme=base16-black-metal-gorgoroth] .hljs-operator,[theme=base16-black-metal-gorgoroth] .hljs-punctuation,[theme=base16-black-metal-gorgoroth] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-gorgoroth] .hljs-operator{opacity:.7}[theme=base16-black-metal-gorgoroth] .hljs-bullet,[theme=base16-black-metal-gorgoroth] .hljs-deletion,[theme=base16-black-metal-gorgoroth] .hljs-name,[theme=base16-black-metal-gorgoroth] .hljs-selector-tag,[theme=base16-black-metal-gorgoroth] .hljs-template-variable,[theme=base16-black-metal-gorgoroth] .hljs-variable{color:#5f8787}[theme=base16-black-metal-gorgoroth] .hljs-attr,[theme=base16-black-metal-gorgoroth] .hljs-link,[theme=base16-black-metal-gorgoroth] .hljs-literal,[theme=base16-black-metal-gorgoroth] .hljs-number,[theme=base16-black-metal-gorgoroth] .hljs-symbol,[theme=base16-black-metal-gorgoroth] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-gorgoroth] .hljs-class .hljs-title,[theme=base16-black-metal-gorgoroth] .hljs-title,[theme=base16-black-metal-gorgoroth] .hljs-title.class_{color:#8c7f70}[theme=base16-black-metal-gorgoroth] .hljs-strong{font-weight:700;color:#8c7f70}[theme=base16-black-metal-gorgoroth] .hljs-addition,[theme=base16-black-metal-gorgoroth] .hljs-code,[theme=base16-black-metal-gorgoroth] .hljs-string,[theme=base16-black-metal-gorgoroth] .hljs-title.class_.inherited__{color:#9b8d7f}[theme=base16-black-metal-gorgoroth] .hljs-built_in,[theme=base16-black-metal-gorgoroth] .hljs-doctag,[theme=base16-black-metal-gorgoroth] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-gorgoroth] .hljs-quote,[theme=base16-black-metal-gorgoroth] .hljs-regexp{color:#aaa}[theme=base16-black-metal-gorgoroth] .hljs-attribute,[theme=base16-black-metal-gorgoroth] .hljs-function .hljs-title,[theme=base16-black-metal-gorgoroth] .hljs-section,[theme=base16-black-metal-gorgoroth] .hljs-title.function_,[theme=base16-black-metal-gorgoroth] .ruby .hljs-property{color:#888}[theme=base16-black-metal-gorgoroth] .diff .hljs-meta,[theme=base16-black-metal-gorgoroth] .hljs-keyword,[theme=base16-black-metal-gorgoroth] .hljs-template-tag,[theme=base16-black-metal-gorgoroth] .hljs-type{color:#999}[theme=base16-black-metal-gorgoroth] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-gorgoroth] .hljs-meta,[theme=base16-black-metal-gorgoroth] .hljs-meta .hljs-keyword,[theme=base16-black-metal-gorgoroth] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-gorgoroth] .hljs-meta .hljs-keyword,[theme=base16-black-metal-gorgoroth] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-immortal]{ + /*! + Theme: Black Metal (Immortal) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-immortal] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-immortal] code.hljs{padding:3px 5px}[theme=base16-black-metal-immortal] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-immortal] .hljs ::-moz-selection,[theme=base16-black-metal-immortal] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-immortal] .hljs ::selection,[theme=base16-black-metal-immortal] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-immortal] .hljs-comment{color:#333}[theme=base16-black-metal-immortal] .hljs-tag{color:#999}[theme=base16-black-metal-immortal] .hljs-operator,[theme=base16-black-metal-immortal] .hljs-punctuation,[theme=base16-black-metal-immortal] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-immortal] .hljs-operator{opacity:.7}[theme=base16-black-metal-immortal] .hljs-bullet,[theme=base16-black-metal-immortal] .hljs-deletion,[theme=base16-black-metal-immortal] .hljs-name,[theme=base16-black-metal-immortal] .hljs-selector-tag,[theme=base16-black-metal-immortal] .hljs-template-variable,[theme=base16-black-metal-immortal] .hljs-variable{color:#5f8787}[theme=base16-black-metal-immortal] .hljs-attr,[theme=base16-black-metal-immortal] .hljs-link,[theme=base16-black-metal-immortal] .hljs-literal,[theme=base16-black-metal-immortal] .hljs-number,[theme=base16-black-metal-immortal] .hljs-symbol,[theme=base16-black-metal-immortal] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-immortal] .hljs-class .hljs-title,[theme=base16-black-metal-immortal] .hljs-title,[theme=base16-black-metal-immortal] .hljs-title.class_{color:#567}[theme=base16-black-metal-immortal] .hljs-strong{font-weight:700;color:#567}[theme=base16-black-metal-immortal] .hljs-addition,[theme=base16-black-metal-immortal] .hljs-code,[theme=base16-black-metal-immortal] .hljs-string,[theme=base16-black-metal-immortal] .hljs-title.class_.inherited__{color:#79b}[theme=base16-black-metal-immortal] .hljs-built_in,[theme=base16-black-metal-immortal] .hljs-doctag,[theme=base16-black-metal-immortal] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-immortal] .hljs-quote,[theme=base16-black-metal-immortal] .hljs-regexp{color:#aaa}[theme=base16-black-metal-immortal] .hljs-attribute,[theme=base16-black-metal-immortal] .hljs-function .hljs-title,[theme=base16-black-metal-immortal] .hljs-section,[theme=base16-black-metal-immortal] .hljs-title.function_,[theme=base16-black-metal-immortal] .ruby .hljs-property{color:#888}[theme=base16-black-metal-immortal] .diff .hljs-meta,[theme=base16-black-metal-immortal] .hljs-keyword,[theme=base16-black-metal-immortal] .hljs-template-tag,[theme=base16-black-metal-immortal] .hljs-type{color:#999}[theme=base16-black-metal-immortal] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-immortal] .hljs-meta,[theme=base16-black-metal-immortal] .hljs-meta .hljs-keyword,[theme=base16-black-metal-immortal] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-immortal] .hljs-meta .hljs-keyword,[theme=base16-black-metal-immortal] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-khold]{ + /*! + Theme: Black Metal (Khold) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-khold] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-khold] code.hljs{padding:3px 5px}[theme=base16-black-metal-khold] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-khold] .hljs ::-moz-selection,[theme=base16-black-metal-khold] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-khold] .hljs ::selection,[theme=base16-black-metal-khold] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-khold] .hljs-comment{color:#333}[theme=base16-black-metal-khold] .hljs-tag{color:#999}[theme=base16-black-metal-khold] .hljs-operator,[theme=base16-black-metal-khold] .hljs-punctuation,[theme=base16-black-metal-khold] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-khold] .hljs-operator{opacity:.7}[theme=base16-black-metal-khold] .hljs-bullet,[theme=base16-black-metal-khold] .hljs-deletion,[theme=base16-black-metal-khold] .hljs-name,[theme=base16-black-metal-khold] .hljs-selector-tag,[theme=base16-black-metal-khold] .hljs-template-variable,[theme=base16-black-metal-khold] .hljs-variable{color:#5f8787}[theme=base16-black-metal-khold] .hljs-attr,[theme=base16-black-metal-khold] .hljs-link,[theme=base16-black-metal-khold] .hljs-literal,[theme=base16-black-metal-khold] .hljs-number,[theme=base16-black-metal-khold] .hljs-symbol,[theme=base16-black-metal-khold] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-khold] .hljs-class .hljs-title,[theme=base16-black-metal-khold] .hljs-title,[theme=base16-black-metal-khold] .hljs-title.class_{color:#974b46}[theme=base16-black-metal-khold] .hljs-strong{font-weight:700;color:#974b46}[theme=base16-black-metal-khold] .hljs-addition,[theme=base16-black-metal-khold] .hljs-code,[theme=base16-black-metal-khold] .hljs-string,[theme=base16-black-metal-khold] .hljs-title.class_.inherited__{color:#eceee3}[theme=base16-black-metal-khold] .hljs-built_in,[theme=base16-black-metal-khold] .hljs-doctag,[theme=base16-black-metal-khold] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-khold] .hljs-quote,[theme=base16-black-metal-khold] .hljs-regexp{color:#aaa}[theme=base16-black-metal-khold] .hljs-attribute,[theme=base16-black-metal-khold] .hljs-function .hljs-title,[theme=base16-black-metal-khold] .hljs-section,[theme=base16-black-metal-khold] .hljs-title.function_,[theme=base16-black-metal-khold] .ruby .hljs-property{color:#888}[theme=base16-black-metal-khold] .diff .hljs-meta,[theme=base16-black-metal-khold] .hljs-keyword,[theme=base16-black-metal-khold] .hljs-template-tag,[theme=base16-black-metal-khold] .hljs-type{color:#999}[theme=base16-black-metal-khold] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-khold] .hljs-meta,[theme=base16-black-metal-khold] .hljs-meta .hljs-keyword,[theme=base16-black-metal-khold] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-khold] .hljs-meta .hljs-keyword,[theme=base16-black-metal-khold] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-marduk]{ + /*! + Theme: Black Metal (Marduk) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-marduk] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-marduk] code.hljs{padding:3px 5px}[theme=base16-black-metal-marduk] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-marduk] .hljs ::-moz-selection,[theme=base16-black-metal-marduk] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-marduk] .hljs ::selection,[theme=base16-black-metal-marduk] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-marduk] .hljs-comment{color:#333}[theme=base16-black-metal-marduk] .hljs-tag{color:#999}[theme=base16-black-metal-marduk] .hljs-operator,[theme=base16-black-metal-marduk] .hljs-punctuation,[theme=base16-black-metal-marduk] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-marduk] .hljs-operator{opacity:.7}[theme=base16-black-metal-marduk] .hljs-bullet,[theme=base16-black-metal-marduk] .hljs-deletion,[theme=base16-black-metal-marduk] .hljs-name,[theme=base16-black-metal-marduk] .hljs-selector-tag,[theme=base16-black-metal-marduk] .hljs-template-variable,[theme=base16-black-metal-marduk] .hljs-variable{color:#5f8787}[theme=base16-black-metal-marduk] .hljs-attr,[theme=base16-black-metal-marduk] .hljs-link,[theme=base16-black-metal-marduk] .hljs-literal,[theme=base16-black-metal-marduk] .hljs-number,[theme=base16-black-metal-marduk] .hljs-symbol,[theme=base16-black-metal-marduk] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-marduk] .hljs-class .hljs-title,[theme=base16-black-metal-marduk] .hljs-title,[theme=base16-black-metal-marduk] .hljs-title.class_{color:#626b67}[theme=base16-black-metal-marduk] .hljs-strong{font-weight:700;color:#626b67}[theme=base16-black-metal-marduk] .hljs-addition,[theme=base16-black-metal-marduk] .hljs-code,[theme=base16-black-metal-marduk] .hljs-string,[theme=base16-black-metal-marduk] .hljs-title.class_.inherited__{color:#a5aaa7}[theme=base16-black-metal-marduk] .hljs-built_in,[theme=base16-black-metal-marduk] .hljs-doctag,[theme=base16-black-metal-marduk] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-marduk] .hljs-quote,[theme=base16-black-metal-marduk] .hljs-regexp{color:#aaa}[theme=base16-black-metal-marduk] .hljs-attribute,[theme=base16-black-metal-marduk] .hljs-function .hljs-title,[theme=base16-black-metal-marduk] .hljs-section,[theme=base16-black-metal-marduk] .hljs-title.function_,[theme=base16-black-metal-marduk] .ruby .hljs-property{color:#888}[theme=base16-black-metal-marduk] .diff .hljs-meta,[theme=base16-black-metal-marduk] .hljs-keyword,[theme=base16-black-metal-marduk] .hljs-template-tag,[theme=base16-black-metal-marduk] .hljs-type{color:#999}[theme=base16-black-metal-marduk] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-marduk] .hljs-meta,[theme=base16-black-metal-marduk] .hljs-meta .hljs-keyword,[theme=base16-black-metal-marduk] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-marduk] .hljs-meta .hljs-keyword,[theme=base16-black-metal-marduk] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-mayhem]{ + /*! + Theme: Black Metal (Mayhem) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-mayhem] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-mayhem] code.hljs{padding:3px 5px}[theme=base16-black-metal-mayhem] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-mayhem] .hljs ::-moz-selection,[theme=base16-black-metal-mayhem] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-mayhem] .hljs ::selection,[theme=base16-black-metal-mayhem] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-mayhem] .hljs-comment{color:#333}[theme=base16-black-metal-mayhem] .hljs-tag{color:#999}[theme=base16-black-metal-mayhem] .hljs-operator,[theme=base16-black-metal-mayhem] .hljs-punctuation,[theme=base16-black-metal-mayhem] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-mayhem] .hljs-operator{opacity:.7}[theme=base16-black-metal-mayhem] .hljs-bullet,[theme=base16-black-metal-mayhem] .hljs-deletion,[theme=base16-black-metal-mayhem] .hljs-name,[theme=base16-black-metal-mayhem] .hljs-selector-tag,[theme=base16-black-metal-mayhem] .hljs-template-variable,[theme=base16-black-metal-mayhem] .hljs-variable{color:#5f8787}[theme=base16-black-metal-mayhem] .hljs-attr,[theme=base16-black-metal-mayhem] .hljs-link,[theme=base16-black-metal-mayhem] .hljs-literal,[theme=base16-black-metal-mayhem] .hljs-number,[theme=base16-black-metal-mayhem] .hljs-symbol,[theme=base16-black-metal-mayhem] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-mayhem] .hljs-class .hljs-title,[theme=base16-black-metal-mayhem] .hljs-title,[theme=base16-black-metal-mayhem] .hljs-title.class_{color:#eecc6c}[theme=base16-black-metal-mayhem] .hljs-strong{font-weight:700;color:#eecc6c}[theme=base16-black-metal-mayhem] .hljs-addition,[theme=base16-black-metal-mayhem] .hljs-code,[theme=base16-black-metal-mayhem] .hljs-string,[theme=base16-black-metal-mayhem] .hljs-title.class_.inherited__{color:#f3ecd4}[theme=base16-black-metal-mayhem] .hljs-built_in,[theme=base16-black-metal-mayhem] .hljs-doctag,[theme=base16-black-metal-mayhem] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-mayhem] .hljs-quote,[theme=base16-black-metal-mayhem] .hljs-regexp{color:#aaa}[theme=base16-black-metal-mayhem] .hljs-attribute,[theme=base16-black-metal-mayhem] .hljs-function .hljs-title,[theme=base16-black-metal-mayhem] .hljs-section,[theme=base16-black-metal-mayhem] .hljs-title.function_,[theme=base16-black-metal-mayhem] .ruby .hljs-property{color:#888}[theme=base16-black-metal-mayhem] .diff .hljs-meta,[theme=base16-black-metal-mayhem] .hljs-keyword,[theme=base16-black-metal-mayhem] .hljs-template-tag,[theme=base16-black-metal-mayhem] .hljs-type{color:#999}[theme=base16-black-metal-mayhem] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-mayhem] .hljs-meta,[theme=base16-black-metal-mayhem] .hljs-meta .hljs-keyword,[theme=base16-black-metal-mayhem] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-mayhem] .hljs-meta .hljs-keyword,[theme=base16-black-metal-mayhem] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-nile]{ + /*! + Theme: Black Metal (Nile) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-nile] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-nile] code.hljs{padding:3px 5px}[theme=base16-black-metal-nile] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-nile] .hljs ::-moz-selection,[theme=base16-black-metal-nile] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-nile] .hljs ::selection,[theme=base16-black-metal-nile] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-nile] .hljs-comment{color:#333}[theme=base16-black-metal-nile] .hljs-tag{color:#999}[theme=base16-black-metal-nile] .hljs-operator,[theme=base16-black-metal-nile] .hljs-punctuation,[theme=base16-black-metal-nile] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-nile] .hljs-operator{opacity:.7}[theme=base16-black-metal-nile] .hljs-bullet,[theme=base16-black-metal-nile] .hljs-deletion,[theme=base16-black-metal-nile] .hljs-name,[theme=base16-black-metal-nile] .hljs-selector-tag,[theme=base16-black-metal-nile] .hljs-template-variable,[theme=base16-black-metal-nile] .hljs-variable{color:#5f8787}[theme=base16-black-metal-nile] .hljs-attr,[theme=base16-black-metal-nile] .hljs-link,[theme=base16-black-metal-nile] .hljs-literal,[theme=base16-black-metal-nile] .hljs-number,[theme=base16-black-metal-nile] .hljs-symbol,[theme=base16-black-metal-nile] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-nile] .hljs-class .hljs-title,[theme=base16-black-metal-nile] .hljs-title,[theme=base16-black-metal-nile] .hljs-title.class_{color:#775}[theme=base16-black-metal-nile] .hljs-strong{font-weight:700;color:#775}[theme=base16-black-metal-nile] .hljs-addition,[theme=base16-black-metal-nile] .hljs-code,[theme=base16-black-metal-nile] .hljs-string,[theme=base16-black-metal-nile] .hljs-title.class_.inherited__{color:#a98}[theme=base16-black-metal-nile] .hljs-built_in,[theme=base16-black-metal-nile] .hljs-doctag,[theme=base16-black-metal-nile] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-nile] .hljs-quote,[theme=base16-black-metal-nile] .hljs-regexp{color:#aaa}[theme=base16-black-metal-nile] .hljs-attribute,[theme=base16-black-metal-nile] .hljs-function .hljs-title,[theme=base16-black-metal-nile] .hljs-section,[theme=base16-black-metal-nile] .hljs-title.function_,[theme=base16-black-metal-nile] .ruby .hljs-property{color:#888}[theme=base16-black-metal-nile] .diff .hljs-meta,[theme=base16-black-metal-nile] .hljs-keyword,[theme=base16-black-metal-nile] .hljs-template-tag,[theme=base16-black-metal-nile] .hljs-type{color:#999}[theme=base16-black-metal-nile] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-nile] .hljs-meta,[theme=base16-black-metal-nile] .hljs-meta .hljs-keyword,[theme=base16-black-metal-nile] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-nile] .hljs-meta .hljs-keyword,[theme=base16-black-metal-nile] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal-venom]{ + /*! + Theme: Black Metal (Venom) + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal-venom] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal-venom] code.hljs{padding:3px 5px}[theme=base16-black-metal-venom] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal-venom] .hljs ::-moz-selection,[theme=base16-black-metal-venom] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-venom] .hljs ::selection,[theme=base16-black-metal-venom] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal-venom] .hljs-comment{color:#333}[theme=base16-black-metal-venom] .hljs-tag{color:#999}[theme=base16-black-metal-venom] .hljs-operator,[theme=base16-black-metal-venom] .hljs-punctuation,[theme=base16-black-metal-venom] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal-venom] .hljs-operator{opacity:.7}[theme=base16-black-metal-venom] .hljs-bullet,[theme=base16-black-metal-venom] .hljs-deletion,[theme=base16-black-metal-venom] .hljs-name,[theme=base16-black-metal-venom] .hljs-selector-tag,[theme=base16-black-metal-venom] .hljs-template-variable,[theme=base16-black-metal-venom] .hljs-variable{color:#5f8787}[theme=base16-black-metal-venom] .hljs-attr,[theme=base16-black-metal-venom] .hljs-link,[theme=base16-black-metal-venom] .hljs-literal,[theme=base16-black-metal-venom] .hljs-number,[theme=base16-black-metal-venom] .hljs-symbol,[theme=base16-black-metal-venom] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal-venom] .hljs-class .hljs-title,[theme=base16-black-metal-venom] .hljs-title,[theme=base16-black-metal-venom] .hljs-title.class_{color:#79241f}[theme=base16-black-metal-venom] .hljs-strong{font-weight:700;color:#79241f}[theme=base16-black-metal-venom] .hljs-addition,[theme=base16-black-metal-venom] .hljs-code,[theme=base16-black-metal-venom] .hljs-string,[theme=base16-black-metal-venom] .hljs-title.class_.inherited__{color:#f8f7f2}[theme=base16-black-metal-venom] .hljs-built_in,[theme=base16-black-metal-venom] .hljs-doctag,[theme=base16-black-metal-venom] .hljs-keyword.hljs-atrule,[theme=base16-black-metal-venom] .hljs-quote,[theme=base16-black-metal-venom] .hljs-regexp{color:#aaa}[theme=base16-black-metal-venom] .hljs-attribute,[theme=base16-black-metal-venom] .hljs-function .hljs-title,[theme=base16-black-metal-venom] .hljs-section,[theme=base16-black-metal-venom] .hljs-title.function_,[theme=base16-black-metal-venom] .ruby .hljs-property{color:#888}[theme=base16-black-metal-venom] .diff .hljs-meta,[theme=base16-black-metal-venom] .hljs-keyword,[theme=base16-black-metal-venom] .hljs-template-tag,[theme=base16-black-metal-venom] .hljs-type{color:#999}[theme=base16-black-metal-venom] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal-venom] .hljs-meta,[theme=base16-black-metal-venom] .hljs-meta .hljs-keyword,[theme=base16-black-metal-venom] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal-venom] .hljs-meta .hljs-keyword,[theme=base16-black-metal-venom] .hljs-meta-keyword{font-weight:700}[theme=base16-black-metal]{ + /*! + Theme: Black Metal + Author: metalelf0 (https://github.com/metalelf0) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-black-metal] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-black-metal] code.hljs{padding:3px 5px}[theme=base16-black-metal] .hljs{color:#c1c1c1;background:#000}[theme=base16-black-metal] .hljs ::-moz-selection,[theme=base16-black-metal] .hljs::-moz-selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal] .hljs ::selection,[theme=base16-black-metal] .hljs::selection{background-color:#222;color:#c1c1c1}[theme=base16-black-metal] .hljs-comment{color:#333}[theme=base16-black-metal] .hljs-tag{color:#999}[theme=base16-black-metal] .hljs-operator,[theme=base16-black-metal] .hljs-punctuation,[theme=base16-black-metal] .hljs-subst{color:#c1c1c1}[theme=base16-black-metal] .hljs-operator{opacity:.7}[theme=base16-black-metal] .hljs-bullet,[theme=base16-black-metal] .hljs-deletion,[theme=base16-black-metal] .hljs-name,[theme=base16-black-metal] .hljs-selector-tag,[theme=base16-black-metal] .hljs-template-variable,[theme=base16-black-metal] .hljs-variable{color:#5f8787}[theme=base16-black-metal] .hljs-attr,[theme=base16-black-metal] .hljs-link,[theme=base16-black-metal] .hljs-literal,[theme=base16-black-metal] .hljs-number,[theme=base16-black-metal] .hljs-symbol,[theme=base16-black-metal] .hljs-variable.constant_{color:#aaa}[theme=base16-black-metal] .hljs-class .hljs-title,[theme=base16-black-metal] .hljs-title,[theme=base16-black-metal] .hljs-title.class_{color:#a06666}[theme=base16-black-metal] .hljs-strong{font-weight:700;color:#a06666}[theme=base16-black-metal] .hljs-addition,[theme=base16-black-metal] .hljs-code,[theme=base16-black-metal] .hljs-string,[theme=base16-black-metal] .hljs-title.class_.inherited__{color:#d99}[theme=base16-black-metal] .hljs-built_in,[theme=base16-black-metal] .hljs-doctag,[theme=base16-black-metal] .hljs-keyword.hljs-atrule,[theme=base16-black-metal] .hljs-quote,[theme=base16-black-metal] .hljs-regexp{color:#aaa}[theme=base16-black-metal] .hljs-attribute,[theme=base16-black-metal] .hljs-function .hljs-title,[theme=base16-black-metal] .hljs-section,[theme=base16-black-metal] .hljs-title.function_,[theme=base16-black-metal] .ruby .hljs-property{color:#888}[theme=base16-black-metal] .diff .hljs-meta,[theme=base16-black-metal] .hljs-keyword,[theme=base16-black-metal] .hljs-template-tag,[theme=base16-black-metal] .hljs-type{color:#999}[theme=base16-black-metal] .hljs-emphasis{color:#999;font-style:italic}[theme=base16-black-metal] .hljs-meta,[theme=base16-black-metal] .hljs-meta .hljs-keyword,[theme=base16-black-metal] .hljs-meta .hljs-string{color:#444}[theme=base16-black-metal] .hljs-meta .hljs-keyword,[theme=base16-black-metal] .hljs-meta-keyword{font-weight:700}[theme=base16-brewer]{ + /*! + Theme: Brewer + Author: Timothée Poisot (http://github.com/tpoisot) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-brewer] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-brewer] code.hljs{padding:3px 5px}[theme=base16-brewer] .hljs{color:#b7b8b9;background:#0c0d0e}[theme=base16-brewer] .hljs ::-moz-selection,[theme=base16-brewer] .hljs::-moz-selection{background-color:#515253;color:#b7b8b9}[theme=base16-brewer] .hljs ::selection,[theme=base16-brewer] .hljs::selection{background-color:#515253;color:#b7b8b9}[theme=base16-brewer] .hljs-comment{color:#737475}[theme=base16-brewer] .hljs-tag{color:#959697}[theme=base16-brewer] .hljs-operator,[theme=base16-brewer] .hljs-punctuation,[theme=base16-brewer] .hljs-subst{color:#b7b8b9}[theme=base16-brewer] .hljs-operator{opacity:.7}[theme=base16-brewer] .hljs-bullet,[theme=base16-brewer] .hljs-deletion,[theme=base16-brewer] .hljs-name,[theme=base16-brewer] .hljs-selector-tag,[theme=base16-brewer] .hljs-template-variable,[theme=base16-brewer] .hljs-variable{color:#e31a1c}[theme=base16-brewer] .hljs-attr,[theme=base16-brewer] .hljs-link,[theme=base16-brewer] .hljs-literal,[theme=base16-brewer] .hljs-number,[theme=base16-brewer] .hljs-symbol,[theme=base16-brewer] .hljs-variable.constant_{color:#e6550d}[theme=base16-brewer] .hljs-class .hljs-title,[theme=base16-brewer] .hljs-title,[theme=base16-brewer] .hljs-title.class_{color:#dca060}[theme=base16-brewer] .hljs-strong{font-weight:700;color:#dca060}[theme=base16-brewer] .hljs-addition,[theme=base16-brewer] .hljs-code,[theme=base16-brewer] .hljs-string,[theme=base16-brewer] .hljs-title.class_.inherited__{color:#31a354}[theme=base16-brewer] .hljs-built_in,[theme=base16-brewer] .hljs-doctag,[theme=base16-brewer] .hljs-keyword.hljs-atrule,[theme=base16-brewer] .hljs-quote,[theme=base16-brewer] .hljs-regexp{color:#80b1d3}[theme=base16-brewer] .hljs-attribute,[theme=base16-brewer] .hljs-function .hljs-title,[theme=base16-brewer] .hljs-section,[theme=base16-brewer] .hljs-title.function_,[theme=base16-brewer] .ruby .hljs-property{color:#3182bd}[theme=base16-brewer] .diff .hljs-meta,[theme=base16-brewer] .hljs-keyword,[theme=base16-brewer] .hljs-template-tag,[theme=base16-brewer] .hljs-type{color:#756bb1}[theme=base16-brewer] .hljs-emphasis{color:#756bb1;font-style:italic}[theme=base16-brewer] .hljs-meta,[theme=base16-brewer] .hljs-meta .hljs-keyword,[theme=base16-brewer] .hljs-meta .hljs-string{color:#b15928}[theme=base16-brewer] .hljs-meta .hljs-keyword,[theme=base16-brewer] .hljs-meta-keyword{font-weight:700}[theme=base16-bright]{ + /*! + Theme: Bright + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-bright] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-bright] code.hljs{padding:3px 5px}[theme=base16-bright] .hljs{color:#e0e0e0;background:#000}[theme=base16-bright] .hljs ::-moz-selection,[theme=base16-bright] .hljs::-moz-selection{background-color:#505050;color:#e0e0e0}[theme=base16-bright] .hljs ::selection,[theme=base16-bright] .hljs::selection{background-color:#505050;color:#e0e0e0}[theme=base16-bright] .hljs-comment{color:#b0b0b0}[theme=base16-bright] .hljs-tag{color:#d0d0d0}[theme=base16-bright] .hljs-operator,[theme=base16-bright] .hljs-punctuation,[theme=base16-bright] .hljs-subst{color:#e0e0e0}[theme=base16-bright] .hljs-operator{opacity:.7}[theme=base16-bright] .hljs-bullet,[theme=base16-bright] .hljs-deletion,[theme=base16-bright] .hljs-name,[theme=base16-bright] .hljs-selector-tag,[theme=base16-bright] .hljs-template-variable,[theme=base16-bright] .hljs-variable{color:#fb0120}[theme=base16-bright] .hljs-attr,[theme=base16-bright] .hljs-link,[theme=base16-bright] .hljs-literal,[theme=base16-bright] .hljs-number,[theme=base16-bright] .hljs-symbol,[theme=base16-bright] .hljs-variable.constant_{color:#fc6d24}[theme=base16-bright] .hljs-class .hljs-title,[theme=base16-bright] .hljs-title,[theme=base16-bright] .hljs-title.class_{color:#fda331}[theme=base16-bright] .hljs-strong{font-weight:700;color:#fda331}[theme=base16-bright] .hljs-addition,[theme=base16-bright] .hljs-code,[theme=base16-bright] .hljs-string,[theme=base16-bright] .hljs-title.class_.inherited__{color:#a1c659}[theme=base16-bright] .hljs-built_in,[theme=base16-bright] .hljs-doctag,[theme=base16-bright] .hljs-keyword.hljs-atrule,[theme=base16-bright] .hljs-quote,[theme=base16-bright] .hljs-regexp{color:#76c7b7}[theme=base16-bright] .hljs-attribute,[theme=base16-bright] .hljs-function .hljs-title,[theme=base16-bright] .hljs-section,[theme=base16-bright] .hljs-title.function_,[theme=base16-bright] .ruby .hljs-property{color:#6fb3d2}[theme=base16-bright] .diff .hljs-meta,[theme=base16-bright] .hljs-keyword,[theme=base16-bright] .hljs-template-tag,[theme=base16-bright] .hljs-type{color:#d381c3}[theme=base16-bright] .hljs-emphasis{color:#d381c3;font-style:italic}[theme=base16-bright] .hljs-meta,[theme=base16-bright] .hljs-meta .hljs-keyword,[theme=base16-bright] .hljs-meta .hljs-string{color:#be643c}[theme=base16-bright] .hljs-meta .hljs-keyword,[theme=base16-bright] .hljs-meta-keyword{font-weight:700}[theme=base16-brogrammer]{ + /*! + Theme: Brogrammer + Author: Vik Ramanujam (http://github.com/piggyslasher) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-brogrammer] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-brogrammer] code.hljs{padding:3px 5px}[theme=base16-brogrammer] .hljs{color:#4e5ab7;background:#1f1f1f}[theme=base16-brogrammer] .hljs ::-moz-selection,[theme=base16-brogrammer] .hljs::-moz-selection{background-color:#2dc55e;color:#4e5ab7}[theme=base16-brogrammer] .hljs ::selection,[theme=base16-brogrammer] .hljs::selection{background-color:#2dc55e;color:#4e5ab7}[theme=base16-brogrammer] .hljs-comment{color:#ecba0f}[theme=base16-brogrammer] .hljs-tag{color:#2a84d2}[theme=base16-brogrammer] .hljs-operator,[theme=base16-brogrammer] .hljs-punctuation,[theme=base16-brogrammer] .hljs-subst{color:#4e5ab7}[theme=base16-brogrammer] .hljs-operator{opacity:.7}[theme=base16-brogrammer] .hljs-bullet,[theme=base16-brogrammer] .hljs-deletion,[theme=base16-brogrammer] .hljs-name,[theme=base16-brogrammer] .hljs-selector-tag,[theme=base16-brogrammer] .hljs-template-variable,[theme=base16-brogrammer] .hljs-variable{color:#d6dbe5}[theme=base16-brogrammer] .hljs-attr,[theme=base16-brogrammer] .hljs-link,[theme=base16-brogrammer] .hljs-literal,[theme=base16-brogrammer] .hljs-number,[theme=base16-brogrammer] .hljs-symbol,[theme=base16-brogrammer] .hljs-variable.constant_{color:#de352e}[theme=base16-brogrammer] .hljs-class .hljs-title,[theme=base16-brogrammer] .hljs-title,[theme=base16-brogrammer] .hljs-title.class_{color:#1dd361}[theme=base16-brogrammer] .hljs-strong{font-weight:700;color:#1dd361}[theme=base16-brogrammer] .hljs-addition,[theme=base16-brogrammer] .hljs-code,[theme=base16-brogrammer] .hljs-string,[theme=base16-brogrammer] .hljs-title.class_.inherited__{color:#f3bd09}[theme=base16-brogrammer] .hljs-built_in,[theme=base16-brogrammer] .hljs-doctag,[theme=base16-brogrammer] .hljs-keyword.hljs-atrule,[theme=base16-brogrammer] .hljs-quote,[theme=base16-brogrammer] .hljs-regexp{color:#1081d6}[theme=base16-brogrammer] .hljs-attribute,[theme=base16-brogrammer] .hljs-function .hljs-title,[theme=base16-brogrammer] .hljs-section,[theme=base16-brogrammer] .hljs-title.function_,[theme=base16-brogrammer] .ruby .hljs-property{color:#5350b9}[theme=base16-brogrammer] .diff .hljs-meta,[theme=base16-brogrammer] .hljs-keyword,[theme=base16-brogrammer] .hljs-template-tag,[theme=base16-brogrammer] .hljs-type{color:#0f7ddb}[theme=base16-brogrammer] .hljs-emphasis{color:#0f7ddb;font-style:italic}[theme=base16-brogrammer] .hljs-meta,[theme=base16-brogrammer] .hljs-meta .hljs-keyword,[theme=base16-brogrammer] .hljs-meta .hljs-string{color:#fff}[theme=base16-brogrammer] .hljs-meta .hljs-keyword,[theme=base16-brogrammer] .hljs-meta-keyword{font-weight:700}[theme=base16-brush-trees-dark]{ + /*! + Theme: Brush Trees Dark + Author: Abraham White + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-brush-trees-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-brush-trees-dark] code.hljs{padding:3px 5px}[theme=base16-brush-trees-dark] .hljs{color:#b0c5c8;background:#485867}[theme=base16-brush-trees-dark] .hljs ::-moz-selection,[theme=base16-brush-trees-dark] .hljs::-moz-selection{background-color:#6d828e;color:#b0c5c8}[theme=base16-brush-trees-dark] .hljs ::selection,[theme=base16-brush-trees-dark] .hljs::selection{background-color:#6d828e;color:#b0c5c8}[theme=base16-brush-trees-dark] .hljs-comment{color:#8299a1}[theme=base16-brush-trees-dark] .hljs-tag{color:#98afb5}[theme=base16-brush-trees-dark] .hljs-operator,[theme=base16-brush-trees-dark] .hljs-punctuation,[theme=base16-brush-trees-dark] .hljs-subst{color:#b0c5c8}[theme=base16-brush-trees-dark] .hljs-operator{opacity:.7}[theme=base16-brush-trees-dark] .hljs-bullet,[theme=base16-brush-trees-dark] .hljs-deletion,[theme=base16-brush-trees-dark] .hljs-name,[theme=base16-brush-trees-dark] .hljs-selector-tag,[theme=base16-brush-trees-dark] .hljs-template-variable,[theme=base16-brush-trees-dark] .hljs-variable{color:#b38686}[theme=base16-brush-trees-dark] .hljs-attr,[theme=base16-brush-trees-dark] .hljs-link,[theme=base16-brush-trees-dark] .hljs-literal,[theme=base16-brush-trees-dark] .hljs-number,[theme=base16-brush-trees-dark] .hljs-symbol,[theme=base16-brush-trees-dark] .hljs-variable.constant_{color:#d8bba2}[theme=base16-brush-trees-dark] .hljs-class .hljs-title,[theme=base16-brush-trees-dark] .hljs-title,[theme=base16-brush-trees-dark] .hljs-title.class_{color:#aab386}[theme=base16-brush-trees-dark] .hljs-strong{font-weight:700;color:#aab386}[theme=base16-brush-trees-dark] .hljs-addition,[theme=base16-brush-trees-dark] .hljs-code,[theme=base16-brush-trees-dark] .hljs-string,[theme=base16-brush-trees-dark] .hljs-title.class_.inherited__{color:#87b386}[theme=base16-brush-trees-dark] .hljs-built_in,[theme=base16-brush-trees-dark] .hljs-doctag,[theme=base16-brush-trees-dark] .hljs-keyword.hljs-atrule,[theme=base16-brush-trees-dark] .hljs-quote,[theme=base16-brush-trees-dark] .hljs-regexp{color:#86b3b3}[theme=base16-brush-trees-dark] .hljs-attribute,[theme=base16-brush-trees-dark] .hljs-function .hljs-title,[theme=base16-brush-trees-dark] .hljs-section,[theme=base16-brush-trees-dark] .hljs-title.function_,[theme=base16-brush-trees-dark] .ruby .hljs-property{color:#868cb3}[theme=base16-brush-trees-dark] .diff .hljs-meta,[theme=base16-brush-trees-dark] .hljs-keyword,[theme=base16-brush-trees-dark] .hljs-template-tag,[theme=base16-brush-trees-dark] .hljs-type{color:#b386b2}[theme=base16-brush-trees-dark] .hljs-emphasis{color:#b386b2;font-style:italic}[theme=base16-brush-trees-dark] .hljs-meta,[theme=base16-brush-trees-dark] .hljs-meta .hljs-keyword,[theme=base16-brush-trees-dark] .hljs-meta .hljs-string{color:#b39f9f}[theme=base16-brush-trees-dark] .hljs-meta .hljs-keyword,[theme=base16-brush-trees-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-brush-trees]{ + /*! + Theme: Brush Trees + Author: Abraham White + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-brush-trees] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-brush-trees] code.hljs{padding:3px 5px}[theme=base16-brush-trees] .hljs{color:#6d828e;background:#e3efef}[theme=base16-brush-trees] .hljs ::-moz-selection,[theme=base16-brush-trees] .hljs::-moz-selection{background-color:#b0c5c8;color:#6d828e}[theme=base16-brush-trees] .hljs ::selection,[theme=base16-brush-trees] .hljs::selection{background-color:#b0c5c8;color:#6d828e}[theme=base16-brush-trees] .hljs-comment{color:#98afb5}[theme=base16-brush-trees] .hljs-tag{color:#8299a1}[theme=base16-brush-trees] .hljs-operator,[theme=base16-brush-trees] .hljs-punctuation,[theme=base16-brush-trees] .hljs-subst{color:#6d828e}[theme=base16-brush-trees] .hljs-operator{opacity:.7}[theme=base16-brush-trees] .hljs-bullet,[theme=base16-brush-trees] .hljs-deletion,[theme=base16-brush-trees] .hljs-name,[theme=base16-brush-trees] .hljs-selector-tag,[theme=base16-brush-trees] .hljs-template-variable,[theme=base16-brush-trees] .hljs-variable{color:#b38686}[theme=base16-brush-trees] .hljs-attr,[theme=base16-brush-trees] .hljs-link,[theme=base16-brush-trees] .hljs-literal,[theme=base16-brush-trees] .hljs-number,[theme=base16-brush-trees] .hljs-symbol,[theme=base16-brush-trees] .hljs-variable.constant_{color:#d8bba2}[theme=base16-brush-trees] .hljs-class .hljs-title,[theme=base16-brush-trees] .hljs-title,[theme=base16-brush-trees] .hljs-title.class_{color:#aab386}[theme=base16-brush-trees] .hljs-strong{font-weight:700;color:#aab386}[theme=base16-brush-trees] .hljs-addition,[theme=base16-brush-trees] .hljs-code,[theme=base16-brush-trees] .hljs-string,[theme=base16-brush-trees] .hljs-title.class_.inherited__{color:#87b386}[theme=base16-brush-trees] .hljs-built_in,[theme=base16-brush-trees] .hljs-doctag,[theme=base16-brush-trees] .hljs-keyword.hljs-atrule,[theme=base16-brush-trees] .hljs-quote,[theme=base16-brush-trees] .hljs-regexp{color:#86b3b3}[theme=base16-brush-trees] .hljs-attribute,[theme=base16-brush-trees] .hljs-function .hljs-title,[theme=base16-brush-trees] .hljs-section,[theme=base16-brush-trees] .hljs-title.function_,[theme=base16-brush-trees] .ruby .hljs-property{color:#868cb3}[theme=base16-brush-trees] .diff .hljs-meta,[theme=base16-brush-trees] .hljs-keyword,[theme=base16-brush-trees] .hljs-template-tag,[theme=base16-brush-trees] .hljs-type{color:#b386b2}[theme=base16-brush-trees] .hljs-emphasis{color:#b386b2;font-style:italic}[theme=base16-brush-trees] .hljs-meta,[theme=base16-brush-trees] .hljs-meta .hljs-keyword,[theme=base16-brush-trees] .hljs-meta .hljs-string{color:#b39f9f}[theme=base16-brush-trees] .hljs-meta .hljs-keyword,[theme=base16-brush-trees] .hljs-meta-keyword{font-weight:700}[theme=base16-chalk]{ + /*! + Theme: Chalk + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-chalk] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-chalk] code.hljs{padding:3px 5px}[theme=base16-chalk] .hljs{color:#d0d0d0;background:#151515}[theme=base16-chalk] .hljs ::-moz-selection,[theme=base16-chalk] .hljs::-moz-selection{background-color:#303030;color:#d0d0d0}[theme=base16-chalk] .hljs ::selection,[theme=base16-chalk] .hljs::selection{background-color:#303030;color:#d0d0d0}[theme=base16-chalk] .hljs-comment{color:#505050}[theme=base16-chalk] .hljs-tag{color:#b0b0b0}[theme=base16-chalk] .hljs-operator,[theme=base16-chalk] .hljs-punctuation,[theme=base16-chalk] .hljs-subst{color:#d0d0d0}[theme=base16-chalk] .hljs-operator{opacity:.7}[theme=base16-chalk] .hljs-bullet,[theme=base16-chalk] .hljs-deletion,[theme=base16-chalk] .hljs-name,[theme=base16-chalk] .hljs-selector-tag,[theme=base16-chalk] .hljs-template-variable,[theme=base16-chalk] .hljs-variable{color:#fb9fb1}[theme=base16-chalk] .hljs-attr,[theme=base16-chalk] .hljs-link,[theme=base16-chalk] .hljs-literal,[theme=base16-chalk] .hljs-number,[theme=base16-chalk] .hljs-symbol,[theme=base16-chalk] .hljs-variable.constant_{color:#eda987}[theme=base16-chalk] .hljs-class .hljs-title,[theme=base16-chalk] .hljs-title,[theme=base16-chalk] .hljs-title.class_{color:#ddb26f}[theme=base16-chalk] .hljs-strong{font-weight:700;color:#ddb26f}[theme=base16-chalk] .hljs-addition,[theme=base16-chalk] .hljs-code,[theme=base16-chalk] .hljs-string,[theme=base16-chalk] .hljs-title.class_.inherited__{color:#acc267}[theme=base16-chalk] .hljs-built_in,[theme=base16-chalk] .hljs-doctag,[theme=base16-chalk] .hljs-keyword.hljs-atrule,[theme=base16-chalk] .hljs-quote,[theme=base16-chalk] .hljs-regexp{color:#12cfc0}[theme=base16-chalk] .hljs-attribute,[theme=base16-chalk] .hljs-function .hljs-title,[theme=base16-chalk] .hljs-section,[theme=base16-chalk] .hljs-title.function_,[theme=base16-chalk] .ruby .hljs-property{color:#6fc2ef}[theme=base16-chalk] .diff .hljs-meta,[theme=base16-chalk] .hljs-keyword,[theme=base16-chalk] .hljs-template-tag,[theme=base16-chalk] .hljs-type{color:#e1a3ee}[theme=base16-chalk] .hljs-emphasis{color:#e1a3ee;font-style:italic}[theme=base16-chalk] .hljs-meta,[theme=base16-chalk] .hljs-meta .hljs-keyword,[theme=base16-chalk] .hljs-meta .hljs-string{color:#deaf8f}[theme=base16-chalk] .hljs-meta .hljs-keyword,[theme=base16-chalk] .hljs-meta-keyword{font-weight:700}[theme=base16-circus]{ + /*! + Theme: Circus + Author: Stephan Boyer (https://github.com/stepchowfun) and Esther Wang (https://github.com/ewang12) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-circus] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-circus] code.hljs{padding:3px 5px}[theme=base16-circus] .hljs{color:#a7a7a7;background:#191919}[theme=base16-circus] .hljs ::-moz-selection,[theme=base16-circus] .hljs::-moz-selection{background-color:#303030;color:#a7a7a7}[theme=base16-circus] .hljs ::selection,[theme=base16-circus] .hljs::selection{background-color:#303030;color:#a7a7a7}[theme=base16-circus] .hljs-comment{color:#5f5a60}[theme=base16-circus] .hljs-tag{color:#505050}[theme=base16-circus] .hljs-operator,[theme=base16-circus] .hljs-punctuation,[theme=base16-circus] .hljs-subst{color:#a7a7a7}[theme=base16-circus] .hljs-operator{opacity:.7}[theme=base16-circus] .hljs-bullet,[theme=base16-circus] .hljs-deletion,[theme=base16-circus] .hljs-name,[theme=base16-circus] .hljs-selector-tag,[theme=base16-circus] .hljs-template-variable,[theme=base16-circus] .hljs-variable{color:#dc657d}[theme=base16-circus] .hljs-attr,[theme=base16-circus] .hljs-link,[theme=base16-circus] .hljs-literal,[theme=base16-circus] .hljs-number,[theme=base16-circus] .hljs-symbol,[theme=base16-circus] .hljs-variable.constant_{color:#4bb1a7}[theme=base16-circus] .hljs-class .hljs-title,[theme=base16-circus] .hljs-title,[theme=base16-circus] .hljs-title.class_{color:#c3ba63}[theme=base16-circus] .hljs-strong{font-weight:700;color:#c3ba63}[theme=base16-circus] .hljs-addition,[theme=base16-circus] .hljs-code,[theme=base16-circus] .hljs-string,[theme=base16-circus] .hljs-title.class_.inherited__{color:#84b97c}[theme=base16-circus] .hljs-built_in,[theme=base16-circus] .hljs-doctag,[theme=base16-circus] .hljs-keyword.hljs-atrule,[theme=base16-circus] .hljs-quote,[theme=base16-circus] .hljs-regexp{color:#4bb1a7}[theme=base16-circus] .hljs-attribute,[theme=base16-circus] .hljs-function .hljs-title,[theme=base16-circus] .hljs-section,[theme=base16-circus] .hljs-title.function_,[theme=base16-circus] .ruby .hljs-property{color:#639ee4}[theme=base16-circus] .diff .hljs-meta,[theme=base16-circus] .hljs-keyword,[theme=base16-circus] .hljs-template-tag,[theme=base16-circus] .hljs-type{color:#b888e2}[theme=base16-circus] .hljs-emphasis{color:#b888e2;font-style:italic}[theme=base16-circus] .hljs-meta,[theme=base16-circus] .hljs-meta .hljs-keyword,[theme=base16-circus] .hljs-meta .hljs-string{color:#b888e2}[theme=base16-circus] .hljs-meta .hljs-keyword,[theme=base16-circus] .hljs-meta-keyword{font-weight:700}[theme=base16-classic-dark]{ + /*! + Theme: Classic Dark + Author: Jason Heeris (http://heeris.id.au) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-classic-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-classic-dark] code.hljs{padding:3px 5px}[theme=base16-classic-dark] .hljs{color:#d0d0d0;background:#151515}[theme=base16-classic-dark] .hljs ::-moz-selection,[theme=base16-classic-dark] .hljs::-moz-selection{background-color:#303030;color:#d0d0d0}[theme=base16-classic-dark] .hljs ::selection,[theme=base16-classic-dark] .hljs::selection{background-color:#303030;color:#d0d0d0}[theme=base16-classic-dark] .hljs-comment{color:#505050}[theme=base16-classic-dark] .hljs-tag{color:#b0b0b0}[theme=base16-classic-dark] .hljs-operator,[theme=base16-classic-dark] .hljs-punctuation,[theme=base16-classic-dark] .hljs-subst{color:#d0d0d0}[theme=base16-classic-dark] .hljs-operator{opacity:.7}[theme=base16-classic-dark] .hljs-bullet,[theme=base16-classic-dark] .hljs-deletion,[theme=base16-classic-dark] .hljs-name,[theme=base16-classic-dark] .hljs-selector-tag,[theme=base16-classic-dark] .hljs-template-variable,[theme=base16-classic-dark] .hljs-variable{color:#ac4142}[theme=base16-classic-dark] .hljs-attr,[theme=base16-classic-dark] .hljs-link,[theme=base16-classic-dark] .hljs-literal,[theme=base16-classic-dark] .hljs-number,[theme=base16-classic-dark] .hljs-symbol,[theme=base16-classic-dark] .hljs-variable.constant_{color:#d28445}[theme=base16-classic-dark] .hljs-class .hljs-title,[theme=base16-classic-dark] .hljs-title,[theme=base16-classic-dark] .hljs-title.class_{color:#f4bf75}[theme=base16-classic-dark] .hljs-strong{font-weight:700;color:#f4bf75}[theme=base16-classic-dark] .hljs-addition,[theme=base16-classic-dark] .hljs-code,[theme=base16-classic-dark] .hljs-string,[theme=base16-classic-dark] .hljs-title.class_.inherited__{color:#90a959}[theme=base16-classic-dark] .hljs-built_in,[theme=base16-classic-dark] .hljs-doctag,[theme=base16-classic-dark] .hljs-keyword.hljs-atrule,[theme=base16-classic-dark] .hljs-quote,[theme=base16-classic-dark] .hljs-regexp{color:#75b5aa}[theme=base16-classic-dark] .hljs-attribute,[theme=base16-classic-dark] .hljs-function .hljs-title,[theme=base16-classic-dark] .hljs-section,[theme=base16-classic-dark] .hljs-title.function_,[theme=base16-classic-dark] .ruby .hljs-property{color:#6a9fb5}[theme=base16-classic-dark] .diff .hljs-meta,[theme=base16-classic-dark] .hljs-keyword,[theme=base16-classic-dark] .hljs-template-tag,[theme=base16-classic-dark] .hljs-type{color:#aa759f}[theme=base16-classic-dark] .hljs-emphasis{color:#aa759f;font-style:italic}[theme=base16-classic-dark] .hljs-meta,[theme=base16-classic-dark] .hljs-meta .hljs-keyword,[theme=base16-classic-dark] .hljs-meta .hljs-string{color:#8f5536}[theme=base16-classic-dark] .hljs-meta .hljs-keyword,[theme=base16-classic-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-classic-light]{ + /*! + Theme: Classic Light + Author: Jason Heeris (http://heeris.id.au) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-classic-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-classic-light] code.hljs{padding:3px 5px}[theme=base16-classic-light] .hljs{color:#303030;background:#f5f5f5}[theme=base16-classic-light] .hljs ::-moz-selection,[theme=base16-classic-light] .hljs::-moz-selection{background-color:#d0d0d0;color:#303030}[theme=base16-classic-light] .hljs ::selection,[theme=base16-classic-light] .hljs::selection{background-color:#d0d0d0;color:#303030}[theme=base16-classic-light] .hljs-comment{color:#b0b0b0}[theme=base16-classic-light] .hljs-tag{color:#505050}[theme=base16-classic-light] .hljs-operator,[theme=base16-classic-light] .hljs-punctuation,[theme=base16-classic-light] .hljs-subst{color:#303030}[theme=base16-classic-light] .hljs-operator{opacity:.7}[theme=base16-classic-light] .hljs-bullet,[theme=base16-classic-light] .hljs-deletion,[theme=base16-classic-light] .hljs-name,[theme=base16-classic-light] .hljs-selector-tag,[theme=base16-classic-light] .hljs-template-variable,[theme=base16-classic-light] .hljs-variable{color:#ac4142}[theme=base16-classic-light] .hljs-attr,[theme=base16-classic-light] .hljs-link,[theme=base16-classic-light] .hljs-literal,[theme=base16-classic-light] .hljs-number,[theme=base16-classic-light] .hljs-symbol,[theme=base16-classic-light] .hljs-variable.constant_{color:#d28445}[theme=base16-classic-light] .hljs-class .hljs-title,[theme=base16-classic-light] .hljs-title,[theme=base16-classic-light] .hljs-title.class_{color:#f4bf75}[theme=base16-classic-light] .hljs-strong{font-weight:700;color:#f4bf75}[theme=base16-classic-light] .hljs-addition,[theme=base16-classic-light] .hljs-code,[theme=base16-classic-light] .hljs-string,[theme=base16-classic-light] .hljs-title.class_.inherited__{color:#90a959}[theme=base16-classic-light] .hljs-built_in,[theme=base16-classic-light] .hljs-doctag,[theme=base16-classic-light] .hljs-keyword.hljs-atrule,[theme=base16-classic-light] .hljs-quote,[theme=base16-classic-light] .hljs-regexp{color:#75b5aa}[theme=base16-classic-light] .hljs-attribute,[theme=base16-classic-light] .hljs-function .hljs-title,[theme=base16-classic-light] .hljs-section,[theme=base16-classic-light] .hljs-title.function_,[theme=base16-classic-light] .ruby .hljs-property{color:#6a9fb5}[theme=base16-classic-light] .diff .hljs-meta,[theme=base16-classic-light] .hljs-keyword,[theme=base16-classic-light] .hljs-template-tag,[theme=base16-classic-light] .hljs-type{color:#aa759f}[theme=base16-classic-light] .hljs-emphasis{color:#aa759f;font-style:italic}[theme=base16-classic-light] .hljs-meta,[theme=base16-classic-light] .hljs-meta .hljs-keyword,[theme=base16-classic-light] .hljs-meta .hljs-string{color:#8f5536}[theme=base16-classic-light] .hljs-meta .hljs-keyword,[theme=base16-classic-light] .hljs-meta-keyword{font-weight:700}[theme=base16-codeschool]{ + /*! + Theme: Codeschool + Author: blockloop + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-codeschool] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-codeschool] code.hljs{padding:3px 5px}[theme=base16-codeschool] .hljs{color:#9ea7a6;background:#232c31}[theme=base16-codeschool] .hljs ::-moz-selection,[theme=base16-codeschool] .hljs::-moz-selection{background-color:#2a343a;color:#9ea7a6}[theme=base16-codeschool] .hljs ::selection,[theme=base16-codeschool] .hljs::selection{background-color:#2a343a;color:#9ea7a6}[theme=base16-codeschool] .hljs-comment{color:#3f4944}[theme=base16-codeschool] .hljs-tag{color:#84898c}[theme=base16-codeschool] .hljs-operator,[theme=base16-codeschool] .hljs-punctuation,[theme=base16-codeschool] .hljs-subst{color:#9ea7a6}[theme=base16-codeschool] .hljs-operator{opacity:.7}[theme=base16-codeschool] .hljs-bullet,[theme=base16-codeschool] .hljs-deletion,[theme=base16-codeschool] .hljs-name,[theme=base16-codeschool] .hljs-selector-tag,[theme=base16-codeschool] .hljs-template-variable,[theme=base16-codeschool] .hljs-variable{color:#2a5491}[theme=base16-codeschool] .hljs-attr,[theme=base16-codeschool] .hljs-link,[theme=base16-codeschool] .hljs-literal,[theme=base16-codeschool] .hljs-number,[theme=base16-codeschool] .hljs-symbol,[theme=base16-codeschool] .hljs-variable.constant_{color:#43820d}[theme=base16-codeschool] .hljs-class .hljs-title,[theme=base16-codeschool] .hljs-title,[theme=base16-codeschool] .hljs-title.class_{color:#a03b1e}[theme=base16-codeschool] .hljs-strong{font-weight:700;color:#a03b1e}[theme=base16-codeschool] .hljs-addition,[theme=base16-codeschool] .hljs-code,[theme=base16-codeschool] .hljs-string,[theme=base16-codeschool] .hljs-title.class_.inherited__{color:#237986}[theme=base16-codeschool] .hljs-built_in,[theme=base16-codeschool] .hljs-doctag,[theme=base16-codeschool] .hljs-keyword.hljs-atrule,[theme=base16-codeschool] .hljs-quote,[theme=base16-codeschool] .hljs-regexp{color:#b02f30}[theme=base16-codeschool] .hljs-attribute,[theme=base16-codeschool] .hljs-function .hljs-title,[theme=base16-codeschool] .hljs-section,[theme=base16-codeschool] .hljs-title.function_,[theme=base16-codeschool] .ruby .hljs-property{color:#484d79}[theme=base16-codeschool] .diff .hljs-meta,[theme=base16-codeschool] .hljs-keyword,[theme=base16-codeschool] .hljs-template-tag,[theme=base16-codeschool] .hljs-type{color:#c59820}[theme=base16-codeschool] .hljs-emphasis{color:#c59820;font-style:italic}[theme=base16-codeschool] .hljs-meta,[theme=base16-codeschool] .hljs-meta .hljs-keyword,[theme=base16-codeschool] .hljs-meta .hljs-string{color:#c98344}[theme=base16-codeschool] .hljs-meta .hljs-keyword,[theme=base16-codeschool] .hljs-meta-keyword{font-weight:700}[theme=base16-colors]{ + /*! + Theme: Colors + Author: mrmrs (http://clrs.cc) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-colors] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-colors] code.hljs{padding:3px 5px}[theme=base16-colors] .hljs{color:#bbb;background:#111}[theme=base16-colors] .hljs ::-moz-selection,[theme=base16-colors] .hljs::-moz-selection{background-color:#555;color:#bbb}[theme=base16-colors] .hljs ::selection,[theme=base16-colors] .hljs::selection{background-color:#555;color:#bbb}[theme=base16-colors] .hljs-comment{color:#777}[theme=base16-colors] .hljs-tag{color:#999}[theme=base16-colors] .hljs-operator,[theme=base16-colors] .hljs-punctuation,[theme=base16-colors] .hljs-subst{color:#bbb}[theme=base16-colors] .hljs-operator{opacity:.7}[theme=base16-colors] .hljs-bullet,[theme=base16-colors] .hljs-deletion,[theme=base16-colors] .hljs-name,[theme=base16-colors] .hljs-selector-tag,[theme=base16-colors] .hljs-template-variable,[theme=base16-colors] .hljs-variable{color:#ff4136}[theme=base16-colors] .hljs-attr,[theme=base16-colors] .hljs-link,[theme=base16-colors] .hljs-literal,[theme=base16-colors] .hljs-number,[theme=base16-colors] .hljs-symbol,[theme=base16-colors] .hljs-variable.constant_{color:#ff851b}[theme=base16-colors] .hljs-class .hljs-title,[theme=base16-colors] .hljs-title,[theme=base16-colors] .hljs-title.class_{color:#ffdc00}[theme=base16-colors] .hljs-strong{font-weight:700;color:#ffdc00}[theme=base16-colors] .hljs-addition,[theme=base16-colors] .hljs-code,[theme=base16-colors] .hljs-string,[theme=base16-colors] .hljs-title.class_.inherited__{color:#2ecc40}[theme=base16-colors] .hljs-built_in,[theme=base16-colors] .hljs-doctag,[theme=base16-colors] .hljs-keyword.hljs-atrule,[theme=base16-colors] .hljs-quote,[theme=base16-colors] .hljs-regexp{color:#7fdbff}[theme=base16-colors] .hljs-attribute,[theme=base16-colors] .hljs-function .hljs-title,[theme=base16-colors] .hljs-section,[theme=base16-colors] .hljs-title.function_,[theme=base16-colors] .ruby .hljs-property{color:#0074d9}[theme=base16-colors] .diff .hljs-meta,[theme=base16-colors] .hljs-keyword,[theme=base16-colors] .hljs-template-tag,[theme=base16-colors] .hljs-type{color:#b10dc9}[theme=base16-colors] .hljs-emphasis{color:#b10dc9;font-style:italic}[theme=base16-colors] .hljs-meta,[theme=base16-colors] .hljs-meta .hljs-keyword,[theme=base16-colors] .hljs-meta .hljs-string{color:#85144b}[theme=base16-colors] .hljs-meta .hljs-keyword,[theme=base16-colors] .hljs-meta-keyword{font-weight:700}[theme=base16-cupcake]{ + /*! + Theme: Cupcake + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-cupcake] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-cupcake] code.hljs{padding:3px 5px}[theme=base16-cupcake] .hljs{color:#8b8198;background:#fbf1f2}[theme=base16-cupcake] .hljs ::-moz-selection,[theme=base16-cupcake] .hljs::-moz-selection{background-color:#d8d5dd;color:#8b8198}[theme=base16-cupcake] .hljs ::selection,[theme=base16-cupcake] .hljs::selection{background-color:#d8d5dd;color:#8b8198}[theme=base16-cupcake] .hljs-comment{color:#bfb9c6}[theme=base16-cupcake] .hljs-tag{color:#a59daf}[theme=base16-cupcake] .hljs-operator,[theme=base16-cupcake] .hljs-punctuation,[theme=base16-cupcake] .hljs-subst{color:#8b8198}[theme=base16-cupcake] .hljs-operator{opacity:.7}[theme=base16-cupcake] .hljs-bullet,[theme=base16-cupcake] .hljs-deletion,[theme=base16-cupcake] .hljs-name,[theme=base16-cupcake] .hljs-selector-tag,[theme=base16-cupcake] .hljs-template-variable,[theme=base16-cupcake] .hljs-variable{color:#d57e85}[theme=base16-cupcake] .hljs-attr,[theme=base16-cupcake] .hljs-link,[theme=base16-cupcake] .hljs-literal,[theme=base16-cupcake] .hljs-number,[theme=base16-cupcake] .hljs-symbol,[theme=base16-cupcake] .hljs-variable.constant_{color:#ebb790}[theme=base16-cupcake] .hljs-class .hljs-title,[theme=base16-cupcake] .hljs-title,[theme=base16-cupcake] .hljs-title.class_{color:#dcb16c}[theme=base16-cupcake] .hljs-strong{font-weight:700;color:#dcb16c}[theme=base16-cupcake] .hljs-addition,[theme=base16-cupcake] .hljs-code,[theme=base16-cupcake] .hljs-string,[theme=base16-cupcake] .hljs-title.class_.inherited__{color:#a3b367}[theme=base16-cupcake] .hljs-built_in,[theme=base16-cupcake] .hljs-doctag,[theme=base16-cupcake] .hljs-keyword.hljs-atrule,[theme=base16-cupcake] .hljs-quote,[theme=base16-cupcake] .hljs-regexp{color:#69a9a7}[theme=base16-cupcake] .hljs-attribute,[theme=base16-cupcake] .hljs-function .hljs-title,[theme=base16-cupcake] .hljs-section,[theme=base16-cupcake] .hljs-title.function_,[theme=base16-cupcake] .ruby .hljs-property{color:#7297b9}[theme=base16-cupcake] .diff .hljs-meta,[theme=base16-cupcake] .hljs-keyword,[theme=base16-cupcake] .hljs-template-tag,[theme=base16-cupcake] .hljs-type{color:#bb99b4}[theme=base16-cupcake] .hljs-emphasis{color:#bb99b4;font-style:italic}[theme=base16-cupcake] .hljs-meta,[theme=base16-cupcake] .hljs-meta .hljs-keyword,[theme=base16-cupcake] .hljs-meta .hljs-string{color:#baa58c}[theme=base16-cupcake] .hljs-meta .hljs-keyword,[theme=base16-cupcake] .hljs-meta-keyword{font-weight:700}[theme=base16-cupertino]{ + /*! + Theme: Cupertino + Author: Defman21 + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-cupertino] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-cupertino] code.hljs{padding:3px 5px}[theme=base16-cupertino] .hljs{color:#404040;background:#fff}[theme=base16-cupertino] .hljs ::-moz-selection,[theme=base16-cupertino] .hljs::-moz-selection{background-color:silver;color:#404040}[theme=base16-cupertino] .hljs ::selection,[theme=base16-cupertino] .hljs::selection{background-color:silver;color:#404040}[theme=base16-cupertino] .hljs-comment,[theme=base16-cupertino] .hljs-tag{color:grey}[theme=base16-cupertino] .hljs-operator,[theme=base16-cupertino] .hljs-punctuation,[theme=base16-cupertino] .hljs-subst{color:#404040}[theme=base16-cupertino] .hljs-operator{opacity:.7}[theme=base16-cupertino] .hljs-bullet,[theme=base16-cupertino] .hljs-deletion,[theme=base16-cupertino] .hljs-name,[theme=base16-cupertino] .hljs-selector-tag,[theme=base16-cupertino] .hljs-template-variable,[theme=base16-cupertino] .hljs-variable{color:#c41a15}[theme=base16-cupertino] .hljs-attr,[theme=base16-cupertino] .hljs-link,[theme=base16-cupertino] .hljs-literal,[theme=base16-cupertino] .hljs-number,[theme=base16-cupertino] .hljs-symbol,[theme=base16-cupertino] .hljs-variable.constant_{color:#eb8500}[theme=base16-cupertino] .hljs-class .hljs-title,[theme=base16-cupertino] .hljs-title,[theme=base16-cupertino] .hljs-title.class_{color:#826b28}[theme=base16-cupertino] .hljs-strong{font-weight:700;color:#826b28}[theme=base16-cupertino] .hljs-addition,[theme=base16-cupertino] .hljs-code,[theme=base16-cupertino] .hljs-string,[theme=base16-cupertino] .hljs-title.class_.inherited__{color:#007400}[theme=base16-cupertino] .hljs-built_in,[theme=base16-cupertino] .hljs-doctag,[theme=base16-cupertino] .hljs-keyword.hljs-atrule,[theme=base16-cupertino] .hljs-quote,[theme=base16-cupertino] .hljs-regexp{color:#318495}[theme=base16-cupertino] .hljs-attribute,[theme=base16-cupertino] .hljs-function .hljs-title,[theme=base16-cupertino] .hljs-section,[theme=base16-cupertino] .hljs-title.function_,[theme=base16-cupertino] .ruby .hljs-property{color:#00f}[theme=base16-cupertino] .diff .hljs-meta,[theme=base16-cupertino] .hljs-keyword,[theme=base16-cupertino] .hljs-template-tag,[theme=base16-cupertino] .hljs-type{color:#a90d91}[theme=base16-cupertino] .hljs-emphasis{color:#a90d91;font-style:italic}[theme=base16-cupertino] .hljs-meta,[theme=base16-cupertino] .hljs-meta .hljs-keyword,[theme=base16-cupertino] .hljs-meta .hljs-string{color:#826b28}[theme=base16-cupertino] .hljs-meta .hljs-keyword,[theme=base16-cupertino] .hljs-meta-keyword{font-weight:700}[theme=base16-danqing]{ + /*! + Theme: DanQing + Author: Wenhan Zhu (Cosmos) (zhuwenhan950913@gmail.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-danqing] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-danqing] code.hljs{padding:3px 5px}[theme=base16-danqing] .hljs{color:#e0f0ef;background:#2d302f}[theme=base16-danqing] .hljs ::-moz-selection,[theme=base16-danqing] .hljs::-moz-selection{background-color:#5a605d;color:#e0f0ef}[theme=base16-danqing] .hljs ::selection,[theme=base16-danqing] .hljs::selection{background-color:#5a605d;color:#e0f0ef}[theme=base16-danqing] .hljs-comment{color:#9da8a3}[theme=base16-danqing] .hljs-tag{color:#cad8d2}[theme=base16-danqing] .hljs-operator,[theme=base16-danqing] .hljs-punctuation,[theme=base16-danqing] .hljs-subst{color:#e0f0ef}[theme=base16-danqing] .hljs-operator{opacity:.7}[theme=base16-danqing] .hljs-bullet,[theme=base16-danqing] .hljs-deletion,[theme=base16-danqing] .hljs-name,[theme=base16-danqing] .hljs-selector-tag,[theme=base16-danqing] .hljs-template-variable,[theme=base16-danqing] .hljs-variable{color:#f9906f}[theme=base16-danqing] .hljs-attr,[theme=base16-danqing] .hljs-link,[theme=base16-danqing] .hljs-literal,[theme=base16-danqing] .hljs-number,[theme=base16-danqing] .hljs-symbol,[theme=base16-danqing] .hljs-variable.constant_{color:#b38a61}[theme=base16-danqing] .hljs-class .hljs-title,[theme=base16-danqing] .hljs-title,[theme=base16-danqing] .hljs-title.class_{color:#f0c239}[theme=base16-danqing] .hljs-strong{font-weight:700;color:#f0c239}[theme=base16-danqing] .hljs-addition,[theme=base16-danqing] .hljs-code,[theme=base16-danqing] .hljs-string,[theme=base16-danqing] .hljs-title.class_.inherited__{color:#8ab361}[theme=base16-danqing] .hljs-built_in,[theme=base16-danqing] .hljs-doctag,[theme=base16-danqing] .hljs-keyword.hljs-atrule,[theme=base16-danqing] .hljs-quote,[theme=base16-danqing] .hljs-regexp{color:#30dff3}[theme=base16-danqing] .hljs-attribute,[theme=base16-danqing] .hljs-function .hljs-title,[theme=base16-danqing] .hljs-section,[theme=base16-danqing] .hljs-title.function_,[theme=base16-danqing] .ruby .hljs-property{color:#b0a4e3}[theme=base16-danqing] .diff .hljs-meta,[theme=base16-danqing] .hljs-keyword,[theme=base16-danqing] .hljs-template-tag,[theme=base16-danqing] .hljs-type{color:#cca4e3}[theme=base16-danqing] .hljs-emphasis{color:#cca4e3;font-style:italic}[theme=base16-danqing] .hljs-meta,[theme=base16-danqing] .hljs-meta .hljs-keyword,[theme=base16-danqing] .hljs-meta .hljs-string{color:#ca6924}[theme=base16-danqing] .hljs-meta .hljs-keyword,[theme=base16-danqing] .hljs-meta-keyword{font-weight:700}[theme=base16-darcula]{ + /*! + Theme: Darcula + Author: jetbrains + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-darcula] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-darcula] code.hljs{padding:3px 5px}[theme=base16-darcula] .hljs{color:#a9b7c6;background:#2b2b2b}[theme=base16-darcula] .hljs ::-moz-selection,[theme=base16-darcula] .hljs::-moz-selection{background-color:#323232;color:#a9b7c6}[theme=base16-darcula] .hljs ::selection,[theme=base16-darcula] .hljs::selection{background-color:#323232;color:#a9b7c6}[theme=base16-darcula] .hljs-comment{color:#606366}[theme=base16-darcula] .hljs-tag{color:#a4a3a3}[theme=base16-darcula] .hljs-operator,[theme=base16-darcula] .hljs-punctuation,[theme=base16-darcula] .hljs-subst{color:#a9b7c6}[theme=base16-darcula] .hljs-operator{opacity:.7}[theme=base16-darcula] .hljs-bullet,[theme=base16-darcula] .hljs-deletion,[theme=base16-darcula] .hljs-name,[theme=base16-darcula] .hljs-selector-tag,[theme=base16-darcula] .hljs-template-variable,[theme=base16-darcula] .hljs-variable{color:#4eade5}[theme=base16-darcula] .hljs-attr,[theme=base16-darcula] .hljs-link,[theme=base16-darcula] .hljs-literal,[theme=base16-darcula] .hljs-number,[theme=base16-darcula] .hljs-symbol,[theme=base16-darcula] .hljs-variable.constant_{color:#689757}[theme=base16-darcula] .hljs-class .hljs-title,[theme=base16-darcula] .hljs-title,[theme=base16-darcula] .hljs-title.class_{color:#bbb529}[theme=base16-darcula] .hljs-strong{font-weight:700;color:#bbb529}[theme=base16-darcula] .hljs-addition,[theme=base16-darcula] .hljs-code,[theme=base16-darcula] .hljs-string,[theme=base16-darcula] .hljs-title.class_.inherited__{color:#6a8759}[theme=base16-darcula] .hljs-built_in,[theme=base16-darcula] .hljs-doctag,[theme=base16-darcula] .hljs-keyword.hljs-atrule,[theme=base16-darcula] .hljs-quote,[theme=base16-darcula] .hljs-regexp{color:#629755}[theme=base16-darcula] .hljs-attribute,[theme=base16-darcula] .hljs-function .hljs-title,[theme=base16-darcula] .hljs-section,[theme=base16-darcula] .hljs-title.function_,[theme=base16-darcula] .ruby .hljs-property{color:#9876aa}[theme=base16-darcula] .diff .hljs-meta,[theme=base16-darcula] .hljs-keyword,[theme=base16-darcula] .hljs-template-tag,[theme=base16-darcula] .hljs-type{color:#cc7832}[theme=base16-darcula] .hljs-emphasis{color:#cc7832;font-style:italic}[theme=base16-darcula] .hljs-meta,[theme=base16-darcula] .hljs-meta .hljs-keyword,[theme=base16-darcula] .hljs-meta .hljs-string{color:grey}[theme=base16-darcula] .hljs-meta .hljs-keyword,[theme=base16-darcula] .hljs-meta-keyword{font-weight:700}[theme=base16-dark-violet]{ + /*! + Theme: Dark Violet + Author: ruler501 (https://github.com/ruler501/base16-darkviolet) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-dark-violet] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-dark-violet] code.hljs{padding:3px 5px}[theme=base16-dark-violet] .hljs{color:#b08ae6;background:#000}[theme=base16-dark-violet] .hljs ::-moz-selection,[theme=base16-dark-violet] .hljs::-moz-selection{background-color:#432d59;color:#b08ae6}[theme=base16-dark-violet] .hljs ::selection,[theme=base16-dark-violet] .hljs::selection{background-color:#432d59;color:#b08ae6}[theme=base16-dark-violet] .hljs-comment{color:#593380}[theme=base16-dark-violet] .hljs-tag{color:#0f0}[theme=base16-dark-violet] .hljs-operator,[theme=base16-dark-violet] .hljs-punctuation,[theme=base16-dark-violet] .hljs-subst{color:#b08ae6}[theme=base16-dark-violet] .hljs-operator{opacity:.7}[theme=base16-dark-violet] .hljs-bullet,[theme=base16-dark-violet] .hljs-deletion,[theme=base16-dark-violet] .hljs-name,[theme=base16-dark-violet] .hljs-selector-tag,[theme=base16-dark-violet] .hljs-template-variable,[theme=base16-dark-violet] .hljs-variable{color:#a82ee6}[theme=base16-dark-violet] .hljs-attr,[theme=base16-dark-violet] .hljs-link,[theme=base16-dark-violet] .hljs-literal,[theme=base16-dark-violet] .hljs-number,[theme=base16-dark-violet] .hljs-symbol,[theme=base16-dark-violet] .hljs-variable.constant_{color:#b6c}[theme=base16-dark-violet] .hljs-class .hljs-title,[theme=base16-dark-violet] .hljs-title,[theme=base16-dark-violet] .hljs-title.class_{color:#f29df2}[theme=base16-dark-violet] .hljs-strong{font-weight:700;color:#f29df2}[theme=base16-dark-violet] .hljs-addition,[theme=base16-dark-violet] .hljs-code,[theme=base16-dark-violet] .hljs-string,[theme=base16-dark-violet] .hljs-title.class_.inherited__{color:#4595e6}[theme=base16-dark-violet] .hljs-built_in,[theme=base16-dark-violet] .hljs-doctag,[theme=base16-dark-violet] .hljs-keyword.hljs-atrule,[theme=base16-dark-violet] .hljs-quote,[theme=base16-dark-violet] .hljs-regexp{color:#40dfff}[theme=base16-dark-violet] .hljs-attribute,[theme=base16-dark-violet] .hljs-function .hljs-title,[theme=base16-dark-violet] .hljs-section,[theme=base16-dark-violet] .hljs-title.function_,[theme=base16-dark-violet] .ruby .hljs-property{color:#4136d9}[theme=base16-dark-violet] .diff .hljs-meta,[theme=base16-dark-violet] .hljs-keyword,[theme=base16-dark-violet] .hljs-template-tag,[theme=base16-dark-violet] .hljs-type{color:#7e5ce6}[theme=base16-dark-violet] .hljs-emphasis{color:#7e5ce6;font-style:italic}[theme=base16-dark-violet] .hljs-meta,[theme=base16-dark-violet] .hljs-meta .hljs-keyword,[theme=base16-dark-violet] .hljs-meta .hljs-string{color:#a886bf}[theme=base16-dark-violet] .hljs-meta .hljs-keyword,[theme=base16-dark-violet] .hljs-meta-keyword{font-weight:700}[theme=base16-darkmoss]{ + /*! + Theme: darkmoss + Author: Gabriel Avanzi (https://github.com/avanzzzi) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-darkmoss] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-darkmoss] code.hljs{padding:3px 5px}[theme=base16-darkmoss] .hljs{color:#c7c7a5;background:#171e1f}[theme=base16-darkmoss] .hljs ::-moz-selection,[theme=base16-darkmoss] .hljs::-moz-selection{background-color:#373c3d;color:#c7c7a5}[theme=base16-darkmoss] .hljs ::selection,[theme=base16-darkmoss] .hljs::selection{background-color:#373c3d;color:#c7c7a5}[theme=base16-darkmoss] .hljs-comment{color:#555e5f}[theme=base16-darkmoss] .hljs-tag{color:#818f80}[theme=base16-darkmoss] .hljs-operator,[theme=base16-darkmoss] .hljs-punctuation,[theme=base16-darkmoss] .hljs-subst{color:#c7c7a5}[theme=base16-darkmoss] .hljs-operator{opacity:.7}[theme=base16-darkmoss] .hljs-bullet,[theme=base16-darkmoss] .hljs-deletion,[theme=base16-darkmoss] .hljs-name,[theme=base16-darkmoss] .hljs-selector-tag,[theme=base16-darkmoss] .hljs-template-variable,[theme=base16-darkmoss] .hljs-variable{color:#ff4658}[theme=base16-darkmoss] .hljs-attr,[theme=base16-darkmoss] .hljs-link,[theme=base16-darkmoss] .hljs-literal,[theme=base16-darkmoss] .hljs-number,[theme=base16-darkmoss] .hljs-symbol,[theme=base16-darkmoss] .hljs-variable.constant_{color:#e6db74}[theme=base16-darkmoss] .hljs-class .hljs-title,[theme=base16-darkmoss] .hljs-title,[theme=base16-darkmoss] .hljs-title.class_{color:#fdb11f}[theme=base16-darkmoss] .hljs-strong{font-weight:700;color:#fdb11f}[theme=base16-darkmoss] .hljs-addition,[theme=base16-darkmoss] .hljs-code,[theme=base16-darkmoss] .hljs-string,[theme=base16-darkmoss] .hljs-title.class_.inherited__{color:#499180}[theme=base16-darkmoss] .hljs-built_in,[theme=base16-darkmoss] .hljs-doctag,[theme=base16-darkmoss] .hljs-keyword.hljs-atrule,[theme=base16-darkmoss] .hljs-quote,[theme=base16-darkmoss] .hljs-regexp{color:#66d9ef}[theme=base16-darkmoss] .hljs-attribute,[theme=base16-darkmoss] .hljs-function .hljs-title,[theme=base16-darkmoss] .hljs-section,[theme=base16-darkmoss] .hljs-title.function_,[theme=base16-darkmoss] .ruby .hljs-property{color:#498091}[theme=base16-darkmoss] .diff .hljs-meta,[theme=base16-darkmoss] .hljs-keyword,[theme=base16-darkmoss] .hljs-template-tag,[theme=base16-darkmoss] .hljs-type{color:#9bc0c8}[theme=base16-darkmoss] .hljs-emphasis{color:#9bc0c8;font-style:italic}[theme=base16-darkmoss] .hljs-meta,[theme=base16-darkmoss] .hljs-meta .hljs-keyword,[theme=base16-darkmoss] .hljs-meta .hljs-string{color:#d27b53}[theme=base16-darkmoss] .hljs-meta .hljs-keyword,[theme=base16-darkmoss] .hljs-meta-keyword{font-weight:700}[theme=base16-darktooth]{ + /*! + Theme: Darktooth + Author: Jason Milkins (https://github.com/jasonm23) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-darktooth] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-darktooth] code.hljs{padding:3px 5px}[theme=base16-darktooth] .hljs{color:#a89984;background:#1d2021}[theme=base16-darktooth] .hljs ::-moz-selection,[theme=base16-darktooth] .hljs::-moz-selection{background-color:#504945;color:#a89984}[theme=base16-darktooth] .hljs ::selection,[theme=base16-darktooth] .hljs::selection{background-color:#504945;color:#a89984}[theme=base16-darktooth] .hljs-comment{color:#665c54}[theme=base16-darktooth] .hljs-tag{color:#928374}[theme=base16-darktooth] .hljs-operator,[theme=base16-darktooth] .hljs-punctuation,[theme=base16-darktooth] .hljs-subst{color:#a89984}[theme=base16-darktooth] .hljs-operator{opacity:.7}[theme=base16-darktooth] .hljs-bullet,[theme=base16-darktooth] .hljs-deletion,[theme=base16-darktooth] .hljs-name,[theme=base16-darktooth] .hljs-selector-tag,[theme=base16-darktooth] .hljs-template-variable,[theme=base16-darktooth] .hljs-variable{color:#fb543f}[theme=base16-darktooth] .hljs-attr,[theme=base16-darktooth] .hljs-link,[theme=base16-darktooth] .hljs-literal,[theme=base16-darktooth] .hljs-number,[theme=base16-darktooth] .hljs-symbol,[theme=base16-darktooth] .hljs-variable.constant_{color:#fe8625}[theme=base16-darktooth] .hljs-class .hljs-title,[theme=base16-darktooth] .hljs-title,[theme=base16-darktooth] .hljs-title.class_{color:#fac03b}[theme=base16-darktooth] .hljs-strong{font-weight:700;color:#fac03b}[theme=base16-darktooth] .hljs-addition,[theme=base16-darktooth] .hljs-code,[theme=base16-darktooth] .hljs-string,[theme=base16-darktooth] .hljs-title.class_.inherited__{color:#95c085}[theme=base16-darktooth] .hljs-built_in,[theme=base16-darktooth] .hljs-doctag,[theme=base16-darktooth] .hljs-keyword.hljs-atrule,[theme=base16-darktooth] .hljs-quote,[theme=base16-darktooth] .hljs-regexp{color:#8ba59b}[theme=base16-darktooth] .hljs-attribute,[theme=base16-darktooth] .hljs-function .hljs-title,[theme=base16-darktooth] .hljs-section,[theme=base16-darktooth] .hljs-title.function_,[theme=base16-darktooth] .ruby .hljs-property{color:#0d6678}[theme=base16-darktooth] .diff .hljs-meta,[theme=base16-darktooth] .hljs-keyword,[theme=base16-darktooth] .hljs-template-tag,[theme=base16-darktooth] .hljs-type{color:#8f4673}[theme=base16-darktooth] .hljs-emphasis{color:#8f4673;font-style:italic}[theme=base16-darktooth] .hljs-meta,[theme=base16-darktooth] .hljs-meta .hljs-keyword,[theme=base16-darktooth] .hljs-meta .hljs-string{color:#a87322}[theme=base16-darktooth] .hljs-meta .hljs-keyword,[theme=base16-darktooth] .hljs-meta-keyword{font-weight:700}[theme=base16-decaf]{ + /*! + Theme: Decaf + Author: Alex Mirrington (https://github.com/alexmirrington) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-decaf] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-decaf] code.hljs{padding:3px 5px}[theme=base16-decaf] .hljs{color:#ccc;background:#2d2d2d}[theme=base16-decaf] .hljs ::-moz-selection,[theme=base16-decaf] .hljs::-moz-selection{background-color:#515151;color:#ccc}[theme=base16-decaf] .hljs ::selection,[theme=base16-decaf] .hljs::selection{background-color:#515151;color:#ccc}[theme=base16-decaf] .hljs-comment{color:#777}[theme=base16-decaf] .hljs-tag{color:#b4b7b4}[theme=base16-decaf] .hljs-operator,[theme=base16-decaf] .hljs-punctuation,[theme=base16-decaf] .hljs-subst{color:#ccc}[theme=base16-decaf] .hljs-operator{opacity:.7}[theme=base16-decaf] .hljs-bullet,[theme=base16-decaf] .hljs-deletion,[theme=base16-decaf] .hljs-name,[theme=base16-decaf] .hljs-selector-tag,[theme=base16-decaf] .hljs-template-variable,[theme=base16-decaf] .hljs-variable{color:#ff7f7b}[theme=base16-decaf] .hljs-attr,[theme=base16-decaf] .hljs-link,[theme=base16-decaf] .hljs-literal,[theme=base16-decaf] .hljs-number,[theme=base16-decaf] .hljs-symbol,[theme=base16-decaf] .hljs-variable.constant_{color:#ffbf70}[theme=base16-decaf] .hljs-class .hljs-title,[theme=base16-decaf] .hljs-title,[theme=base16-decaf] .hljs-title.class_{color:#ffd67c}[theme=base16-decaf] .hljs-strong{font-weight:700;color:#ffd67c}[theme=base16-decaf] .hljs-addition,[theme=base16-decaf] .hljs-code,[theme=base16-decaf] .hljs-string,[theme=base16-decaf] .hljs-title.class_.inherited__{color:#beda78}[theme=base16-decaf] .hljs-built_in,[theme=base16-decaf] .hljs-doctag,[theme=base16-decaf] .hljs-keyword.hljs-atrule,[theme=base16-decaf] .hljs-quote,[theme=base16-decaf] .hljs-regexp{color:#bed6ff}[theme=base16-decaf] .hljs-attribute,[theme=base16-decaf] .hljs-function .hljs-title,[theme=base16-decaf] .hljs-section,[theme=base16-decaf] .hljs-title.function_,[theme=base16-decaf] .ruby .hljs-property{color:#90bee1}[theme=base16-decaf] .diff .hljs-meta,[theme=base16-decaf] .hljs-keyword,[theme=base16-decaf] .hljs-template-tag,[theme=base16-decaf] .hljs-type{color:#efb3f7}[theme=base16-decaf] .hljs-emphasis{color:#efb3f7;font-style:italic}[theme=base16-decaf] .hljs-meta,[theme=base16-decaf] .hljs-meta .hljs-keyword,[theme=base16-decaf] .hljs-meta .hljs-string{color:#ff93b3}[theme=base16-decaf] .hljs-meta .hljs-keyword,[theme=base16-decaf] .hljs-meta-keyword{font-weight:700}[theme=base16-default-dark]{ + /*! + Theme: Default Dark + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-default-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-default-dark] code.hljs{padding:3px 5px}[theme=base16-default-dark] .hljs{color:#d8d8d8;background:#181818}[theme=base16-default-dark] .hljs ::-moz-selection,[theme=base16-default-dark] .hljs::-moz-selection{background-color:#383838;color:#d8d8d8}[theme=base16-default-dark] .hljs ::selection,[theme=base16-default-dark] .hljs::selection{background-color:#383838;color:#d8d8d8}[theme=base16-default-dark] .hljs-comment{color:#585858}[theme=base16-default-dark] .hljs-tag{color:#b8b8b8}[theme=base16-default-dark] .hljs-operator,[theme=base16-default-dark] .hljs-punctuation,[theme=base16-default-dark] .hljs-subst{color:#d8d8d8}[theme=base16-default-dark] .hljs-operator{opacity:.7}[theme=base16-default-dark] .hljs-bullet,[theme=base16-default-dark] .hljs-deletion,[theme=base16-default-dark] .hljs-name,[theme=base16-default-dark] .hljs-selector-tag,[theme=base16-default-dark] .hljs-template-variable,[theme=base16-default-dark] .hljs-variable{color:#ab4642}[theme=base16-default-dark] .hljs-attr,[theme=base16-default-dark] .hljs-link,[theme=base16-default-dark] .hljs-literal,[theme=base16-default-dark] .hljs-number,[theme=base16-default-dark] .hljs-symbol,[theme=base16-default-dark] .hljs-variable.constant_{color:#dc9656}[theme=base16-default-dark] .hljs-class .hljs-title,[theme=base16-default-dark] .hljs-title,[theme=base16-default-dark] .hljs-title.class_{color:#f7ca88}[theme=base16-default-dark] .hljs-strong{font-weight:700;color:#f7ca88}[theme=base16-default-dark] .hljs-addition,[theme=base16-default-dark] .hljs-code,[theme=base16-default-dark] .hljs-string,[theme=base16-default-dark] .hljs-title.class_.inherited__{color:#a1b56c}[theme=base16-default-dark] .hljs-built_in,[theme=base16-default-dark] .hljs-doctag,[theme=base16-default-dark] .hljs-keyword.hljs-atrule,[theme=base16-default-dark] .hljs-quote,[theme=base16-default-dark] .hljs-regexp{color:#86c1b9}[theme=base16-default-dark] .hljs-attribute,[theme=base16-default-dark] .hljs-function .hljs-title,[theme=base16-default-dark] .hljs-section,[theme=base16-default-dark] .hljs-title.function_,[theme=base16-default-dark] .ruby .hljs-property{color:#7cafc2}[theme=base16-default-dark] .diff .hljs-meta,[theme=base16-default-dark] .hljs-keyword,[theme=base16-default-dark] .hljs-template-tag,[theme=base16-default-dark] .hljs-type{color:#ba8baf}[theme=base16-default-dark] .hljs-emphasis{color:#ba8baf;font-style:italic}[theme=base16-default-dark] .hljs-meta,[theme=base16-default-dark] .hljs-meta .hljs-keyword,[theme=base16-default-dark] .hljs-meta .hljs-string{color:#a16946}[theme=base16-default-dark] .hljs-meta .hljs-keyword,[theme=base16-default-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-default-light]{ + /*! + Theme: Default Light + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-default-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-default-light] code.hljs{padding:3px 5px}[theme=base16-default-light] .hljs{color:#383838;background:#f8f8f8}[theme=base16-default-light] .hljs ::-moz-selection,[theme=base16-default-light] .hljs::-moz-selection{background-color:#d8d8d8;color:#383838}[theme=base16-default-light] .hljs ::selection,[theme=base16-default-light] .hljs::selection{background-color:#d8d8d8;color:#383838}[theme=base16-default-light] .hljs-comment{color:#b8b8b8}[theme=base16-default-light] .hljs-tag{color:#585858}[theme=base16-default-light] .hljs-operator,[theme=base16-default-light] .hljs-punctuation,[theme=base16-default-light] .hljs-subst{color:#383838}[theme=base16-default-light] .hljs-operator{opacity:.7}[theme=base16-default-light] .hljs-bullet,[theme=base16-default-light] .hljs-deletion,[theme=base16-default-light] .hljs-name,[theme=base16-default-light] .hljs-selector-tag,[theme=base16-default-light] .hljs-template-variable,[theme=base16-default-light] .hljs-variable{color:#ab4642}[theme=base16-default-light] .hljs-attr,[theme=base16-default-light] .hljs-link,[theme=base16-default-light] .hljs-literal,[theme=base16-default-light] .hljs-number,[theme=base16-default-light] .hljs-symbol,[theme=base16-default-light] .hljs-variable.constant_{color:#dc9656}[theme=base16-default-light] .hljs-class .hljs-title,[theme=base16-default-light] .hljs-title,[theme=base16-default-light] .hljs-title.class_{color:#f7ca88}[theme=base16-default-light] .hljs-strong{font-weight:700;color:#f7ca88}[theme=base16-default-light] .hljs-addition,[theme=base16-default-light] .hljs-code,[theme=base16-default-light] .hljs-string,[theme=base16-default-light] .hljs-title.class_.inherited__{color:#a1b56c}[theme=base16-default-light] .hljs-built_in,[theme=base16-default-light] .hljs-doctag,[theme=base16-default-light] .hljs-keyword.hljs-atrule,[theme=base16-default-light] .hljs-quote,[theme=base16-default-light] .hljs-regexp{color:#86c1b9}[theme=base16-default-light] .hljs-attribute,[theme=base16-default-light] .hljs-function .hljs-title,[theme=base16-default-light] .hljs-section,[theme=base16-default-light] .hljs-title.function_,[theme=base16-default-light] .ruby .hljs-property{color:#7cafc2}[theme=base16-default-light] .diff .hljs-meta,[theme=base16-default-light] .hljs-keyword,[theme=base16-default-light] .hljs-template-tag,[theme=base16-default-light] .hljs-type{color:#ba8baf}[theme=base16-default-light] .hljs-emphasis{color:#ba8baf;font-style:italic}[theme=base16-default-light] .hljs-meta,[theme=base16-default-light] .hljs-meta .hljs-keyword,[theme=base16-default-light] .hljs-meta .hljs-string{color:#a16946}[theme=base16-default-light] .hljs-meta .hljs-keyword,[theme=base16-default-light] .hljs-meta-keyword{font-weight:700}[theme=base16-dirtysea]{ + /*! + Theme: dirtysea + Author: Kahlil (Kal) Hodgson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-dirtysea] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-dirtysea] code.hljs{padding:3px 5px}[theme=base16-dirtysea] .hljs{color:#000;background:#e0e0e0}[theme=base16-dirtysea] .hljs ::-moz-selection,[theme=base16-dirtysea] .hljs::-moz-selection{background-color:#d0d0d0;color:#000}[theme=base16-dirtysea] .hljs ::selection,[theme=base16-dirtysea] .hljs::selection{background-color:#d0d0d0;color:#000}[theme=base16-dirtysea] .hljs-comment{color:#707070}[theme=base16-dirtysea] .hljs-tag{color:#202020}[theme=base16-dirtysea] .hljs-operator,[theme=base16-dirtysea] .hljs-punctuation,[theme=base16-dirtysea] .hljs-subst{color:#000}[theme=base16-dirtysea] .hljs-operator{opacity:.7}[theme=base16-dirtysea] .hljs-bullet,[theme=base16-dirtysea] .hljs-deletion,[theme=base16-dirtysea] .hljs-name,[theme=base16-dirtysea] .hljs-selector-tag,[theme=base16-dirtysea] .hljs-template-variable,[theme=base16-dirtysea] .hljs-variable{color:#840000}[theme=base16-dirtysea] .hljs-attr,[theme=base16-dirtysea] .hljs-link,[theme=base16-dirtysea] .hljs-literal,[theme=base16-dirtysea] .hljs-number,[theme=base16-dirtysea] .hljs-symbol,[theme=base16-dirtysea] .hljs-variable.constant_{color:#006565}[theme=base16-dirtysea] .hljs-class .hljs-title,[theme=base16-dirtysea] .hljs-title,[theme=base16-dirtysea] .hljs-title.class_{color:#755b00}[theme=base16-dirtysea] .hljs-strong{font-weight:700;color:#755b00}[theme=base16-dirtysea] .hljs-addition,[theme=base16-dirtysea] .hljs-code,[theme=base16-dirtysea] .hljs-string,[theme=base16-dirtysea] .hljs-title.class_.inherited__{color:#730073}[theme=base16-dirtysea] .hljs-built_in,[theme=base16-dirtysea] .hljs-doctag,[theme=base16-dirtysea] .hljs-keyword.hljs-atrule,[theme=base16-dirtysea] .hljs-quote,[theme=base16-dirtysea] .hljs-regexp{color:#755b00}[theme=base16-dirtysea] .hljs-attribute,[theme=base16-dirtysea] .hljs-function .hljs-title,[theme=base16-dirtysea] .hljs-section,[theme=base16-dirtysea] .hljs-title.function_,[theme=base16-dirtysea] .ruby .hljs-property{color:#007300}[theme=base16-dirtysea] .diff .hljs-meta,[theme=base16-dirtysea] .hljs-keyword,[theme=base16-dirtysea] .hljs-template-tag,[theme=base16-dirtysea] .hljs-type{color:#000090}[theme=base16-dirtysea] .hljs-emphasis{color:#000090;font-style:italic}[theme=base16-dirtysea] .hljs-meta,[theme=base16-dirtysea] .hljs-meta .hljs-keyword,[theme=base16-dirtysea] .hljs-meta .hljs-string{color:#755b00}[theme=base16-dirtysea] .hljs-meta .hljs-keyword,[theme=base16-dirtysea] .hljs-meta-keyword{font-weight:700}[theme=base16-dracula]{ + /*! + Theme: Dracula + Author: Mike Barkmin (http://github.com/mikebarkmin) based on Dracula Theme (http://github.com/dracula) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-dracula] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-dracula] code.hljs{padding:3px 5px}[theme=base16-dracula] .hljs{color:#e9e9f4;background:#282936}[theme=base16-dracula] .hljs ::-moz-selection,[theme=base16-dracula] .hljs::-moz-selection{background-color:#4d4f68;color:#e9e9f4}[theme=base16-dracula] .hljs ::selection,[theme=base16-dracula] .hljs::selection{background-color:#4d4f68;color:#e9e9f4}[theme=base16-dracula] .hljs-comment{color:#626483}[theme=base16-dracula] .hljs-tag{color:#62d6e8}[theme=base16-dracula] .hljs-operator,[theme=base16-dracula] .hljs-punctuation,[theme=base16-dracula] .hljs-subst{color:#e9e9f4}[theme=base16-dracula] .hljs-operator{opacity:.7}[theme=base16-dracula] .hljs-bullet,[theme=base16-dracula] .hljs-deletion,[theme=base16-dracula] .hljs-name,[theme=base16-dracula] .hljs-selector-tag,[theme=base16-dracula] .hljs-template-variable,[theme=base16-dracula] .hljs-variable{color:#ea51b2}[theme=base16-dracula] .hljs-attr,[theme=base16-dracula] .hljs-link,[theme=base16-dracula] .hljs-literal,[theme=base16-dracula] .hljs-number,[theme=base16-dracula] .hljs-symbol,[theme=base16-dracula] .hljs-variable.constant_{color:#b45bcf}[theme=base16-dracula] .hljs-class .hljs-title,[theme=base16-dracula] .hljs-title,[theme=base16-dracula] .hljs-title.class_{color:#00f769}[theme=base16-dracula] .hljs-strong{font-weight:700;color:#00f769}[theme=base16-dracula] .hljs-addition,[theme=base16-dracula] .hljs-code,[theme=base16-dracula] .hljs-string,[theme=base16-dracula] .hljs-title.class_.inherited__{color:#ebff87}[theme=base16-dracula] .hljs-built_in,[theme=base16-dracula] .hljs-doctag,[theme=base16-dracula] .hljs-keyword.hljs-atrule,[theme=base16-dracula] .hljs-quote,[theme=base16-dracula] .hljs-regexp{color:#a1efe4}[theme=base16-dracula] .hljs-attribute,[theme=base16-dracula] .hljs-function .hljs-title,[theme=base16-dracula] .hljs-section,[theme=base16-dracula] .hljs-title.function_,[theme=base16-dracula] .ruby .hljs-property{color:#62d6e8}[theme=base16-dracula] .diff .hljs-meta,[theme=base16-dracula] .hljs-keyword,[theme=base16-dracula] .hljs-template-tag,[theme=base16-dracula] .hljs-type{color:#b45bcf}[theme=base16-dracula] .hljs-emphasis{color:#b45bcf;font-style:italic}[theme=base16-dracula] .hljs-meta,[theme=base16-dracula] .hljs-meta .hljs-keyword,[theme=base16-dracula] .hljs-meta .hljs-string{color:#00f769}[theme=base16-dracula] .hljs-meta .hljs-keyword,[theme=base16-dracula] .hljs-meta-keyword{font-weight:700}[theme=base16-edge-dark]{ + /*! + Theme: Edge Dark + Author: cjayross (https://github.com/cjayross) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-edge-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-edge-dark] code.hljs{padding:3px 5px}[theme=base16-edge-dark] .hljs{color:#b7bec9;background:#262729}[theme=base16-edge-dark] .hljs ::-moz-selection,[theme=base16-edge-dark] .hljs::-moz-selection{background-color:#b7bec9;color:#b7bec9}[theme=base16-edge-dark] .hljs ::selection,[theme=base16-edge-dark] .hljs::selection{background-color:#b7bec9;color:#b7bec9}[theme=base16-edge-dark] .hljs-comment{color:#3e4249}[theme=base16-edge-dark] .hljs-tag{color:#73b3e7}[theme=base16-edge-dark] .hljs-operator,[theme=base16-edge-dark] .hljs-punctuation,[theme=base16-edge-dark] .hljs-subst{color:#b7bec9}[theme=base16-edge-dark] .hljs-operator{opacity:.7}[theme=base16-edge-dark] .hljs-attr,[theme=base16-edge-dark] .hljs-bullet,[theme=base16-edge-dark] .hljs-deletion,[theme=base16-edge-dark] .hljs-link,[theme=base16-edge-dark] .hljs-literal,[theme=base16-edge-dark] .hljs-name,[theme=base16-edge-dark] .hljs-number,[theme=base16-edge-dark] .hljs-selector-tag,[theme=base16-edge-dark] .hljs-symbol,[theme=base16-edge-dark] .hljs-template-variable,[theme=base16-edge-dark] .hljs-variable,[theme=base16-edge-dark] .hljs-variable.constant_{color:#e77171}[theme=base16-edge-dark] .hljs-class .hljs-title,[theme=base16-edge-dark] .hljs-title,[theme=base16-edge-dark] .hljs-title.class_{color:#dbb774}[theme=base16-edge-dark] .hljs-strong{font-weight:700;color:#dbb774}[theme=base16-edge-dark] .hljs-addition,[theme=base16-edge-dark] .hljs-code,[theme=base16-edge-dark] .hljs-string,[theme=base16-edge-dark] .hljs-title.class_.inherited__{color:#a1bf78}[theme=base16-edge-dark] .hljs-built_in,[theme=base16-edge-dark] .hljs-doctag,[theme=base16-edge-dark] .hljs-keyword.hljs-atrule,[theme=base16-edge-dark] .hljs-quote,[theme=base16-edge-dark] .hljs-regexp{color:#5ebaa5}[theme=base16-edge-dark] .hljs-attribute,[theme=base16-edge-dark] .hljs-function .hljs-title,[theme=base16-edge-dark] .hljs-section,[theme=base16-edge-dark] .hljs-title.function_,[theme=base16-edge-dark] .ruby .hljs-property{color:#73b3e7}[theme=base16-edge-dark] .diff .hljs-meta,[theme=base16-edge-dark] .hljs-keyword,[theme=base16-edge-dark] .hljs-template-tag,[theme=base16-edge-dark] .hljs-type{color:#d390e7}[theme=base16-edge-dark] .hljs-emphasis{color:#d390e7;font-style:italic}[theme=base16-edge-dark] .hljs-meta,[theme=base16-edge-dark] .hljs-meta .hljs-keyword,[theme=base16-edge-dark] .hljs-meta .hljs-string{color:#5ebaa5}[theme=base16-edge-dark] .hljs-meta .hljs-keyword,[theme=base16-edge-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-edge-light]{ + /*! + Theme: Edge Light + Author: cjayross (https://github.com/cjayross) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-edge-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-edge-light] code.hljs{padding:3px 5px}[theme=base16-edge-light] .hljs{color:#5e646f;background:#fafafa}[theme=base16-edge-light] .hljs ::-moz-selection,[theme=base16-edge-light] .hljs::-moz-selection{background-color:#d69822;color:#5e646f}[theme=base16-edge-light] .hljs ::selection,[theme=base16-edge-light] .hljs::selection{background-color:#d69822;color:#5e646f}[theme=base16-edge-light] .hljs-comment{color:#5e646f}[theme=base16-edge-light] .hljs-tag{color:#6587bf}[theme=base16-edge-light] .hljs-operator,[theme=base16-edge-light] .hljs-punctuation,[theme=base16-edge-light] .hljs-subst{color:#5e646f}[theme=base16-edge-light] .hljs-operator{opacity:.7}[theme=base16-edge-light] .hljs-attr,[theme=base16-edge-light] .hljs-bullet,[theme=base16-edge-light] .hljs-deletion,[theme=base16-edge-light] .hljs-link,[theme=base16-edge-light] .hljs-literal,[theme=base16-edge-light] .hljs-name,[theme=base16-edge-light] .hljs-number,[theme=base16-edge-light] .hljs-selector-tag,[theme=base16-edge-light] .hljs-symbol,[theme=base16-edge-light] .hljs-template-variable,[theme=base16-edge-light] .hljs-variable,[theme=base16-edge-light] .hljs-variable.constant_{color:#db7070}[theme=base16-edge-light] .hljs-class .hljs-title,[theme=base16-edge-light] .hljs-title,[theme=base16-edge-light] .hljs-title.class_{color:#d69822}[theme=base16-edge-light] .hljs-strong{font-weight:700;color:#d69822}[theme=base16-edge-light] .hljs-addition,[theme=base16-edge-light] .hljs-code,[theme=base16-edge-light] .hljs-string,[theme=base16-edge-light] .hljs-title.class_.inherited__{color:#7c9f4b}[theme=base16-edge-light] .hljs-built_in,[theme=base16-edge-light] .hljs-doctag,[theme=base16-edge-light] .hljs-keyword.hljs-atrule,[theme=base16-edge-light] .hljs-quote,[theme=base16-edge-light] .hljs-regexp{color:#509c93}[theme=base16-edge-light] .hljs-attribute,[theme=base16-edge-light] .hljs-function .hljs-title,[theme=base16-edge-light] .hljs-section,[theme=base16-edge-light] .hljs-title.function_,[theme=base16-edge-light] .ruby .hljs-property{color:#6587bf}[theme=base16-edge-light] .diff .hljs-meta,[theme=base16-edge-light] .hljs-keyword,[theme=base16-edge-light] .hljs-template-tag,[theme=base16-edge-light] .hljs-type{color:#b870ce}[theme=base16-edge-light] .hljs-emphasis{color:#b870ce;font-style:italic}[theme=base16-edge-light] .hljs-meta,[theme=base16-edge-light] .hljs-meta .hljs-keyword,[theme=base16-edge-light] .hljs-meta .hljs-string{color:#509c93}[theme=base16-edge-light] .hljs-meta .hljs-keyword,[theme=base16-edge-light] .hljs-meta-keyword{font-weight:700}[theme=base16-eighties]{ + /*! + Theme: Eighties + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-eighties] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-eighties] code.hljs{padding:3px 5px}[theme=base16-eighties] .hljs{color:#d3d0c8;background:#2d2d2d}[theme=base16-eighties] .hljs ::-moz-selection,[theme=base16-eighties] .hljs::-moz-selection{background-color:#515151;color:#d3d0c8}[theme=base16-eighties] .hljs ::selection,[theme=base16-eighties] .hljs::selection{background-color:#515151;color:#d3d0c8}[theme=base16-eighties] .hljs-comment{color:#747369}[theme=base16-eighties] .hljs-tag{color:#a09f93}[theme=base16-eighties] .hljs-operator,[theme=base16-eighties] .hljs-punctuation,[theme=base16-eighties] .hljs-subst{color:#d3d0c8}[theme=base16-eighties] .hljs-operator{opacity:.7}[theme=base16-eighties] .hljs-bullet,[theme=base16-eighties] .hljs-deletion,[theme=base16-eighties] .hljs-name,[theme=base16-eighties] .hljs-selector-tag,[theme=base16-eighties] .hljs-template-variable,[theme=base16-eighties] .hljs-variable{color:#f2777a}[theme=base16-eighties] .hljs-attr,[theme=base16-eighties] .hljs-link,[theme=base16-eighties] .hljs-literal,[theme=base16-eighties] .hljs-number,[theme=base16-eighties] .hljs-symbol,[theme=base16-eighties] .hljs-variable.constant_{color:#f99157}[theme=base16-eighties] .hljs-class .hljs-title,[theme=base16-eighties] .hljs-title,[theme=base16-eighties] .hljs-title.class_{color:#fc6}[theme=base16-eighties] .hljs-strong{font-weight:700;color:#fc6}[theme=base16-eighties] .hljs-addition,[theme=base16-eighties] .hljs-code,[theme=base16-eighties] .hljs-string,[theme=base16-eighties] .hljs-title.class_.inherited__{color:#9c9}[theme=base16-eighties] .hljs-built_in,[theme=base16-eighties] .hljs-doctag,[theme=base16-eighties] .hljs-keyword.hljs-atrule,[theme=base16-eighties] .hljs-quote,[theme=base16-eighties] .hljs-regexp{color:#6cc}[theme=base16-eighties] .hljs-attribute,[theme=base16-eighties] .hljs-function .hljs-title,[theme=base16-eighties] .hljs-section,[theme=base16-eighties] .hljs-title.function_,[theme=base16-eighties] .ruby .hljs-property{color:#69c}[theme=base16-eighties] .diff .hljs-meta,[theme=base16-eighties] .hljs-keyword,[theme=base16-eighties] .hljs-template-tag,[theme=base16-eighties] .hljs-type{color:#c9c}[theme=base16-eighties] .hljs-emphasis{color:#c9c;font-style:italic}[theme=base16-eighties] .hljs-meta,[theme=base16-eighties] .hljs-meta .hljs-keyword,[theme=base16-eighties] .hljs-meta .hljs-string{color:#d27b53}[theme=base16-eighties] .hljs-meta .hljs-keyword,[theme=base16-eighties] .hljs-meta-keyword{font-weight:700}[theme=base16-embers]{ + /*! + Theme: Embers + Author: Jannik Siebert (https://github.com/janniks) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-embers] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-embers] code.hljs{padding:3px 5px}[theme=base16-embers] .hljs{color:#a39a90;background:#16130f}[theme=base16-embers] .hljs ::-moz-selection,[theme=base16-embers] .hljs::-moz-selection{background-color:#433b32;color:#a39a90}[theme=base16-embers] .hljs ::selection,[theme=base16-embers] .hljs::selection{background-color:#433b32;color:#a39a90}[theme=base16-embers] .hljs-comment{color:#5a5047}[theme=base16-embers] .hljs-tag{color:#8a8075}[theme=base16-embers] .hljs-operator,[theme=base16-embers] .hljs-punctuation,[theme=base16-embers] .hljs-subst{color:#a39a90}[theme=base16-embers] .hljs-operator{opacity:.7}[theme=base16-embers] .hljs-bullet,[theme=base16-embers] .hljs-deletion,[theme=base16-embers] .hljs-name,[theme=base16-embers] .hljs-selector-tag,[theme=base16-embers] .hljs-template-variable,[theme=base16-embers] .hljs-variable{color:#826d57}[theme=base16-embers] .hljs-attr,[theme=base16-embers] .hljs-link,[theme=base16-embers] .hljs-literal,[theme=base16-embers] .hljs-number,[theme=base16-embers] .hljs-symbol,[theme=base16-embers] .hljs-variable.constant_{color:#828257}[theme=base16-embers] .hljs-class .hljs-title,[theme=base16-embers] .hljs-title,[theme=base16-embers] .hljs-title.class_{color:#6d8257}[theme=base16-embers] .hljs-strong{font-weight:700;color:#6d8257}[theme=base16-embers] .hljs-addition,[theme=base16-embers] .hljs-code,[theme=base16-embers] .hljs-string,[theme=base16-embers] .hljs-title.class_.inherited__{color:#57826d}[theme=base16-embers] .hljs-built_in,[theme=base16-embers] .hljs-doctag,[theme=base16-embers] .hljs-keyword.hljs-atrule,[theme=base16-embers] .hljs-quote,[theme=base16-embers] .hljs-regexp{color:#576d82}[theme=base16-embers] .hljs-attribute,[theme=base16-embers] .hljs-function .hljs-title,[theme=base16-embers] .hljs-section,[theme=base16-embers] .hljs-title.function_,[theme=base16-embers] .ruby .hljs-property{color:#6d5782}[theme=base16-embers] .diff .hljs-meta,[theme=base16-embers] .hljs-keyword,[theme=base16-embers] .hljs-template-tag,[theme=base16-embers] .hljs-type{color:#82576d}[theme=base16-embers] .hljs-emphasis{color:#82576d;font-style:italic}[theme=base16-embers] .hljs-meta,[theme=base16-embers] .hljs-meta .hljs-keyword,[theme=base16-embers] .hljs-meta .hljs-string{color:#825757}[theme=base16-embers] .hljs-meta .hljs-keyword,[theme=base16-embers] .hljs-meta-keyword{font-weight:700}[theme=base16-equilibrium-dark]{ + /*! + Theme: Equilibrium Dark + Author: Carlo Abelli + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-equilibrium-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-equilibrium-dark] code.hljs{padding:3px 5px}[theme=base16-equilibrium-dark] .hljs{color:#afaba2;background:#0c1118}[theme=base16-equilibrium-dark] .hljs ::-moz-selection,[theme=base16-equilibrium-dark] .hljs::-moz-selection{background-color:#22262d;color:#afaba2}[theme=base16-equilibrium-dark] .hljs ::selection,[theme=base16-equilibrium-dark] .hljs::selection{background-color:#22262d;color:#afaba2}[theme=base16-equilibrium-dark] .hljs-comment{color:#7b776e}[theme=base16-equilibrium-dark] .hljs-tag{color:#949088}[theme=base16-equilibrium-dark] .hljs-operator,[theme=base16-equilibrium-dark] .hljs-punctuation,[theme=base16-equilibrium-dark] .hljs-subst{color:#afaba2}[theme=base16-equilibrium-dark] .hljs-operator{opacity:.7}[theme=base16-equilibrium-dark] .hljs-bullet,[theme=base16-equilibrium-dark] .hljs-deletion,[theme=base16-equilibrium-dark] .hljs-name,[theme=base16-equilibrium-dark] .hljs-selector-tag,[theme=base16-equilibrium-dark] .hljs-template-variable,[theme=base16-equilibrium-dark] .hljs-variable{color:#f04339}[theme=base16-equilibrium-dark] .hljs-attr,[theme=base16-equilibrium-dark] .hljs-link,[theme=base16-equilibrium-dark] .hljs-literal,[theme=base16-equilibrium-dark] .hljs-number,[theme=base16-equilibrium-dark] .hljs-symbol,[theme=base16-equilibrium-dark] .hljs-variable.constant_{color:#df5923}[theme=base16-equilibrium-dark] .hljs-class .hljs-title,[theme=base16-equilibrium-dark] .hljs-title,[theme=base16-equilibrium-dark] .hljs-title.class_{color:#bb8801}[theme=base16-equilibrium-dark] .hljs-strong{font-weight:700;color:#bb8801}[theme=base16-equilibrium-dark] .hljs-addition,[theme=base16-equilibrium-dark] .hljs-code,[theme=base16-equilibrium-dark] .hljs-string,[theme=base16-equilibrium-dark] .hljs-title.class_.inherited__{color:#7f8b00}[theme=base16-equilibrium-dark] .hljs-built_in,[theme=base16-equilibrium-dark] .hljs-doctag,[theme=base16-equilibrium-dark] .hljs-keyword.hljs-atrule,[theme=base16-equilibrium-dark] .hljs-quote,[theme=base16-equilibrium-dark] .hljs-regexp{color:#00948b}[theme=base16-equilibrium-dark] .hljs-attribute,[theme=base16-equilibrium-dark] .hljs-function .hljs-title,[theme=base16-equilibrium-dark] .hljs-section,[theme=base16-equilibrium-dark] .hljs-title.function_,[theme=base16-equilibrium-dark] .ruby .hljs-property{color:#008dd1}[theme=base16-equilibrium-dark] .diff .hljs-meta,[theme=base16-equilibrium-dark] .hljs-keyword,[theme=base16-equilibrium-dark] .hljs-template-tag,[theme=base16-equilibrium-dark] .hljs-type{color:#6a7fd2}[theme=base16-equilibrium-dark] .hljs-emphasis{color:#6a7fd2;font-style:italic}[theme=base16-equilibrium-dark] .hljs-meta,[theme=base16-equilibrium-dark] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-dark] .hljs-meta .hljs-string{color:#e3488e}[theme=base16-equilibrium-dark] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-equilibrium-gray-dark]{ + /*! + Theme: Equilibrium Gray Dark + Author: Carlo Abelli + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-equilibrium-gray-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-equilibrium-gray-dark] code.hljs{padding:3px 5px}[theme=base16-equilibrium-gray-dark] .hljs{color:#ababab;background:#111}[theme=base16-equilibrium-gray-dark] .hljs ::-moz-selection,[theme=base16-equilibrium-gray-dark] .hljs::-moz-selection{background-color:#262626;color:#ababab}[theme=base16-equilibrium-gray-dark] .hljs ::selection,[theme=base16-equilibrium-gray-dark] .hljs::selection{background-color:#262626;color:#ababab}[theme=base16-equilibrium-gray-dark] .hljs-comment{color:#777}[theme=base16-equilibrium-gray-dark] .hljs-tag{color:#919191}[theme=base16-equilibrium-gray-dark] .hljs-operator,[theme=base16-equilibrium-gray-dark] .hljs-punctuation,[theme=base16-equilibrium-gray-dark] .hljs-subst{color:#ababab}[theme=base16-equilibrium-gray-dark] .hljs-operator{opacity:.7}[theme=base16-equilibrium-gray-dark] .hljs-bullet,[theme=base16-equilibrium-gray-dark] .hljs-deletion,[theme=base16-equilibrium-gray-dark] .hljs-name,[theme=base16-equilibrium-gray-dark] .hljs-selector-tag,[theme=base16-equilibrium-gray-dark] .hljs-template-variable,[theme=base16-equilibrium-gray-dark] .hljs-variable{color:#f04339}[theme=base16-equilibrium-gray-dark] .hljs-attr,[theme=base16-equilibrium-gray-dark] .hljs-link,[theme=base16-equilibrium-gray-dark] .hljs-literal,[theme=base16-equilibrium-gray-dark] .hljs-number,[theme=base16-equilibrium-gray-dark] .hljs-symbol,[theme=base16-equilibrium-gray-dark] .hljs-variable.constant_{color:#df5923}[theme=base16-equilibrium-gray-dark] .hljs-class .hljs-title,[theme=base16-equilibrium-gray-dark] .hljs-title,[theme=base16-equilibrium-gray-dark] .hljs-title.class_{color:#bb8801}[theme=base16-equilibrium-gray-dark] .hljs-strong{font-weight:700;color:#bb8801}[theme=base16-equilibrium-gray-dark] .hljs-addition,[theme=base16-equilibrium-gray-dark] .hljs-code,[theme=base16-equilibrium-gray-dark] .hljs-string,[theme=base16-equilibrium-gray-dark] .hljs-title.class_.inherited__{color:#7f8b00}[theme=base16-equilibrium-gray-dark] .hljs-built_in,[theme=base16-equilibrium-gray-dark] .hljs-doctag,[theme=base16-equilibrium-gray-dark] .hljs-keyword.hljs-atrule,[theme=base16-equilibrium-gray-dark] .hljs-quote,[theme=base16-equilibrium-gray-dark] .hljs-regexp{color:#00948b}[theme=base16-equilibrium-gray-dark] .hljs-attribute,[theme=base16-equilibrium-gray-dark] .hljs-function .hljs-title,[theme=base16-equilibrium-gray-dark] .hljs-section,[theme=base16-equilibrium-gray-dark] .hljs-title.function_,[theme=base16-equilibrium-gray-dark] .ruby .hljs-property{color:#008dd1}[theme=base16-equilibrium-gray-dark] .diff .hljs-meta,[theme=base16-equilibrium-gray-dark] .hljs-keyword,[theme=base16-equilibrium-gray-dark] .hljs-template-tag,[theme=base16-equilibrium-gray-dark] .hljs-type{color:#6a7fd2}[theme=base16-equilibrium-gray-dark] .hljs-emphasis{color:#6a7fd2;font-style:italic}[theme=base16-equilibrium-gray-dark] .hljs-meta,[theme=base16-equilibrium-gray-dark] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-gray-dark] .hljs-meta .hljs-string{color:#e3488e}[theme=base16-equilibrium-gray-dark] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-gray-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-equilibrium-gray-light]{ + /*! + Theme: Equilibrium Gray Light + Author: Carlo Abelli + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-equilibrium-gray-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-equilibrium-gray-light] code.hljs{padding:3px 5px}[theme=base16-equilibrium-gray-light] .hljs{color:#474747;background:#f1f1f1}[theme=base16-equilibrium-gray-light] .hljs ::-moz-selection,[theme=base16-equilibrium-gray-light] .hljs::-moz-selection{background-color:#d4d4d4;color:#474747}[theme=base16-equilibrium-gray-light] .hljs ::selection,[theme=base16-equilibrium-gray-light] .hljs::selection{background-color:#d4d4d4;color:#474747}[theme=base16-equilibrium-gray-light] .hljs-comment{color:#777}[theme=base16-equilibrium-gray-light] .hljs-tag{color:#5e5e5e}[theme=base16-equilibrium-gray-light] .hljs-operator,[theme=base16-equilibrium-gray-light] .hljs-punctuation,[theme=base16-equilibrium-gray-light] .hljs-subst{color:#474747}[theme=base16-equilibrium-gray-light] .hljs-operator{opacity:.7}[theme=base16-equilibrium-gray-light] .hljs-bullet,[theme=base16-equilibrium-gray-light] .hljs-deletion,[theme=base16-equilibrium-gray-light] .hljs-name,[theme=base16-equilibrium-gray-light] .hljs-selector-tag,[theme=base16-equilibrium-gray-light] .hljs-template-variable,[theme=base16-equilibrium-gray-light] .hljs-variable{color:#d02023}[theme=base16-equilibrium-gray-light] .hljs-attr,[theme=base16-equilibrium-gray-light] .hljs-link,[theme=base16-equilibrium-gray-light] .hljs-literal,[theme=base16-equilibrium-gray-light] .hljs-number,[theme=base16-equilibrium-gray-light] .hljs-symbol,[theme=base16-equilibrium-gray-light] .hljs-variable.constant_{color:#bf3e05}[theme=base16-equilibrium-gray-light] .hljs-class .hljs-title,[theme=base16-equilibrium-gray-light] .hljs-title,[theme=base16-equilibrium-gray-light] .hljs-title.class_{color:#9d6f00}[theme=base16-equilibrium-gray-light] .hljs-strong{font-weight:700;color:#9d6f00}[theme=base16-equilibrium-gray-light] .hljs-addition,[theme=base16-equilibrium-gray-light] .hljs-code,[theme=base16-equilibrium-gray-light] .hljs-string,[theme=base16-equilibrium-gray-light] .hljs-title.class_.inherited__{color:#637200}[theme=base16-equilibrium-gray-light] .hljs-built_in,[theme=base16-equilibrium-gray-light] .hljs-doctag,[theme=base16-equilibrium-gray-light] .hljs-keyword.hljs-atrule,[theme=base16-equilibrium-gray-light] .hljs-quote,[theme=base16-equilibrium-gray-light] .hljs-regexp{color:#007a72}[theme=base16-equilibrium-gray-light] .hljs-attribute,[theme=base16-equilibrium-gray-light] .hljs-function .hljs-title,[theme=base16-equilibrium-gray-light] .hljs-section,[theme=base16-equilibrium-gray-light] .hljs-title.function_,[theme=base16-equilibrium-gray-light] .ruby .hljs-property{color:#0073b5}[theme=base16-equilibrium-gray-light] .diff .hljs-meta,[theme=base16-equilibrium-gray-light] .hljs-keyword,[theme=base16-equilibrium-gray-light] .hljs-template-tag,[theme=base16-equilibrium-gray-light] .hljs-type{color:#4e66b6}[theme=base16-equilibrium-gray-light] .hljs-emphasis{color:#4e66b6;font-style:italic}[theme=base16-equilibrium-gray-light] .hljs-meta,[theme=base16-equilibrium-gray-light] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-gray-light] .hljs-meta .hljs-string{color:#c42775}[theme=base16-equilibrium-gray-light] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-gray-light] .hljs-meta-keyword{font-weight:700}[theme=base16-equilibrium-light]{ + /*! + Theme: Equilibrium Light + Author: Carlo Abelli + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-equilibrium-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-equilibrium-light] code.hljs{padding:3px 5px}[theme=base16-equilibrium-light] .hljs{color:#43474e;background:#f5f0e7}[theme=base16-equilibrium-light] .hljs ::-moz-selection,[theme=base16-equilibrium-light] .hljs::-moz-selection{background-color:#d8d4cb;color:#43474e}[theme=base16-equilibrium-light] .hljs ::selection,[theme=base16-equilibrium-light] .hljs::selection{background-color:#d8d4cb;color:#43474e}[theme=base16-equilibrium-light] .hljs-comment{color:#73777f}[theme=base16-equilibrium-light] .hljs-tag{color:#5a5f66}[theme=base16-equilibrium-light] .hljs-operator,[theme=base16-equilibrium-light] .hljs-punctuation,[theme=base16-equilibrium-light] .hljs-subst{color:#43474e}[theme=base16-equilibrium-light] .hljs-operator{opacity:.7}[theme=base16-equilibrium-light] .hljs-bullet,[theme=base16-equilibrium-light] .hljs-deletion,[theme=base16-equilibrium-light] .hljs-name,[theme=base16-equilibrium-light] .hljs-selector-tag,[theme=base16-equilibrium-light] .hljs-template-variable,[theme=base16-equilibrium-light] .hljs-variable{color:#d02023}[theme=base16-equilibrium-light] .hljs-attr,[theme=base16-equilibrium-light] .hljs-link,[theme=base16-equilibrium-light] .hljs-literal,[theme=base16-equilibrium-light] .hljs-number,[theme=base16-equilibrium-light] .hljs-symbol,[theme=base16-equilibrium-light] .hljs-variable.constant_{color:#bf3e05}[theme=base16-equilibrium-light] .hljs-class .hljs-title,[theme=base16-equilibrium-light] .hljs-title,[theme=base16-equilibrium-light] .hljs-title.class_{color:#9d6f00}[theme=base16-equilibrium-light] .hljs-strong{font-weight:700;color:#9d6f00}[theme=base16-equilibrium-light] .hljs-addition,[theme=base16-equilibrium-light] .hljs-code,[theme=base16-equilibrium-light] .hljs-string,[theme=base16-equilibrium-light] .hljs-title.class_.inherited__{color:#637200}[theme=base16-equilibrium-light] .hljs-built_in,[theme=base16-equilibrium-light] .hljs-doctag,[theme=base16-equilibrium-light] .hljs-keyword.hljs-atrule,[theme=base16-equilibrium-light] .hljs-quote,[theme=base16-equilibrium-light] .hljs-regexp{color:#007a72}[theme=base16-equilibrium-light] .hljs-attribute,[theme=base16-equilibrium-light] .hljs-function .hljs-title,[theme=base16-equilibrium-light] .hljs-section,[theme=base16-equilibrium-light] .hljs-title.function_,[theme=base16-equilibrium-light] .ruby .hljs-property{color:#0073b5}[theme=base16-equilibrium-light] .diff .hljs-meta,[theme=base16-equilibrium-light] .hljs-keyword,[theme=base16-equilibrium-light] .hljs-template-tag,[theme=base16-equilibrium-light] .hljs-type{color:#4e66b6}[theme=base16-equilibrium-light] .hljs-emphasis{color:#4e66b6;font-style:italic}[theme=base16-equilibrium-light] .hljs-meta,[theme=base16-equilibrium-light] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-light] .hljs-meta .hljs-string{color:#c42775}[theme=base16-equilibrium-light] .hljs-meta .hljs-keyword,[theme=base16-equilibrium-light] .hljs-meta-keyword{font-weight:700}[theme=base16-espresso]{ + /*! + Theme: Espresso + Author: Unknown. Maintained by Alex Mirrington (https://github.com/alexmirrington) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-espresso] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-espresso] code.hljs{padding:3px 5px}[theme=base16-espresso] .hljs{color:#ccc;background:#2d2d2d}[theme=base16-espresso] .hljs ::-moz-selection,[theme=base16-espresso] .hljs::-moz-selection{background-color:#515151;color:#ccc}[theme=base16-espresso] .hljs ::selection,[theme=base16-espresso] .hljs::selection{background-color:#515151;color:#ccc}[theme=base16-espresso] .hljs-comment{color:#777}[theme=base16-espresso] .hljs-tag{color:#b4b7b4}[theme=base16-espresso] .hljs-operator,[theme=base16-espresso] .hljs-punctuation,[theme=base16-espresso] .hljs-subst{color:#ccc}[theme=base16-espresso] .hljs-operator{opacity:.7}[theme=base16-espresso] .hljs-bullet,[theme=base16-espresso] .hljs-deletion,[theme=base16-espresso] .hljs-name,[theme=base16-espresso] .hljs-selector-tag,[theme=base16-espresso] .hljs-template-variable,[theme=base16-espresso] .hljs-variable{color:#d25252}[theme=base16-espresso] .hljs-attr,[theme=base16-espresso] .hljs-link,[theme=base16-espresso] .hljs-literal,[theme=base16-espresso] .hljs-number,[theme=base16-espresso] .hljs-symbol,[theme=base16-espresso] .hljs-variable.constant_{color:#f9a959}[theme=base16-espresso] .hljs-class .hljs-title,[theme=base16-espresso] .hljs-title,[theme=base16-espresso] .hljs-title.class_{color:#ffc66d}[theme=base16-espresso] .hljs-strong{font-weight:700;color:#ffc66d}[theme=base16-espresso] .hljs-addition,[theme=base16-espresso] .hljs-code,[theme=base16-espresso] .hljs-string,[theme=base16-espresso] .hljs-title.class_.inherited__{color:#a5c261}[theme=base16-espresso] .hljs-built_in,[theme=base16-espresso] .hljs-doctag,[theme=base16-espresso] .hljs-keyword.hljs-atrule,[theme=base16-espresso] .hljs-quote,[theme=base16-espresso] .hljs-regexp{color:#bed6ff}[theme=base16-espresso] .hljs-attribute,[theme=base16-espresso] .hljs-function .hljs-title,[theme=base16-espresso] .hljs-section,[theme=base16-espresso] .hljs-title.function_,[theme=base16-espresso] .ruby .hljs-property{color:#6c99bb}[theme=base16-espresso] .diff .hljs-meta,[theme=base16-espresso] .hljs-keyword,[theme=base16-espresso] .hljs-template-tag,[theme=base16-espresso] .hljs-type{color:#d197d9}[theme=base16-espresso] .hljs-emphasis{color:#d197d9;font-style:italic}[theme=base16-espresso] .hljs-meta,[theme=base16-espresso] .hljs-meta .hljs-keyword,[theme=base16-espresso] .hljs-meta .hljs-string{color:#f97394}[theme=base16-espresso] .hljs-meta .hljs-keyword,[theme=base16-espresso] .hljs-meta-keyword{font-weight:700}[theme=base16-eva-dim]{ + /*! + Theme: Eva Dim + Author: kjakapat (https://github.com/kjakapat) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-eva-dim] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-eva-dim] code.hljs{padding:3px 5px}[theme=base16-eva-dim] .hljs{color:#9fa2a6;background:#2a3b4d}[theme=base16-eva-dim] .hljs ::-moz-selection,[theme=base16-eva-dim] .hljs::-moz-selection{background-color:#4b6988;color:#9fa2a6}[theme=base16-eva-dim] .hljs ::selection,[theme=base16-eva-dim] .hljs::selection{background-color:#4b6988;color:#9fa2a6}[theme=base16-eva-dim] .hljs-comment{color:#55799c}[theme=base16-eva-dim] .hljs-tag{color:#7e90a3}[theme=base16-eva-dim] .hljs-operator,[theme=base16-eva-dim] .hljs-punctuation,[theme=base16-eva-dim] .hljs-subst{color:#9fa2a6}[theme=base16-eva-dim] .hljs-operator{opacity:.7}[theme=base16-eva-dim] .hljs-bullet,[theme=base16-eva-dim] .hljs-deletion,[theme=base16-eva-dim] .hljs-name,[theme=base16-eva-dim] .hljs-selector-tag,[theme=base16-eva-dim] .hljs-template-variable,[theme=base16-eva-dim] .hljs-variable{color:#c4676c}[theme=base16-eva-dim] .hljs-attr,[theme=base16-eva-dim] .hljs-link,[theme=base16-eva-dim] .hljs-literal,[theme=base16-eva-dim] .hljs-number,[theme=base16-eva-dim] .hljs-symbol,[theme=base16-eva-dim] .hljs-variable.constant_{color:#f96}[theme=base16-eva-dim] .hljs-class .hljs-title,[theme=base16-eva-dim] .hljs-title,[theme=base16-eva-dim] .hljs-title.class_{color:#cfd05d}[theme=base16-eva-dim] .hljs-strong{font-weight:700;color:#cfd05d}[theme=base16-eva-dim] .hljs-addition,[theme=base16-eva-dim] .hljs-code,[theme=base16-eva-dim] .hljs-string,[theme=base16-eva-dim] .hljs-title.class_.inherited__{color:#5de561}[theme=base16-eva-dim] .hljs-built_in,[theme=base16-eva-dim] .hljs-doctag,[theme=base16-eva-dim] .hljs-keyword.hljs-atrule,[theme=base16-eva-dim] .hljs-quote,[theme=base16-eva-dim] .hljs-regexp{color:#4b8f77}[theme=base16-eva-dim] .hljs-attribute,[theme=base16-eva-dim] .hljs-function .hljs-title,[theme=base16-eva-dim] .hljs-section,[theme=base16-eva-dim] .hljs-title.function_,[theme=base16-eva-dim] .ruby .hljs-property{color:#1ae1dc}[theme=base16-eva-dim] .diff .hljs-meta,[theme=base16-eva-dim] .hljs-keyword,[theme=base16-eva-dim] .hljs-template-tag,[theme=base16-eva-dim] .hljs-type{color:#9c6cd3}[theme=base16-eva-dim] .hljs-emphasis{color:#9c6cd3;font-style:italic}[theme=base16-eva-dim] .hljs-meta,[theme=base16-eva-dim] .hljs-meta .hljs-keyword,[theme=base16-eva-dim] .hljs-meta .hljs-string{color:#bb64a9}[theme=base16-eva-dim] .hljs-meta .hljs-keyword,[theme=base16-eva-dim] .hljs-meta-keyword{font-weight:700}[theme=base16-eva]{ + /*! + Theme: Eva + Author: kjakapat (https://github.com/kjakapat) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-eva] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-eva] code.hljs{padding:3px 5px}[theme=base16-eva] .hljs{color:#9fa2a6;background:#2a3b4d}[theme=base16-eva] .hljs ::-moz-selection,[theme=base16-eva] .hljs::-moz-selection{background-color:#4b6988;color:#9fa2a6}[theme=base16-eva] .hljs ::selection,[theme=base16-eva] .hljs::selection{background-color:#4b6988;color:#9fa2a6}[theme=base16-eva] .hljs-comment{color:#55799c}[theme=base16-eva] .hljs-tag{color:#7e90a3}[theme=base16-eva] .hljs-operator,[theme=base16-eva] .hljs-punctuation,[theme=base16-eva] .hljs-subst{color:#9fa2a6}[theme=base16-eva] .hljs-operator{opacity:.7}[theme=base16-eva] .hljs-bullet,[theme=base16-eva] .hljs-deletion,[theme=base16-eva] .hljs-name,[theme=base16-eva] .hljs-selector-tag,[theme=base16-eva] .hljs-template-variable,[theme=base16-eva] .hljs-variable{color:#c4676c}[theme=base16-eva] .hljs-attr,[theme=base16-eva] .hljs-link,[theme=base16-eva] .hljs-literal,[theme=base16-eva] .hljs-number,[theme=base16-eva] .hljs-symbol,[theme=base16-eva] .hljs-variable.constant_{color:#f96}[theme=base16-eva] .hljs-class .hljs-title,[theme=base16-eva] .hljs-title,[theme=base16-eva] .hljs-title.class_{color:#ff6}[theme=base16-eva] .hljs-strong{font-weight:700;color:#ff6}[theme=base16-eva] .hljs-addition,[theme=base16-eva] .hljs-code,[theme=base16-eva] .hljs-string,[theme=base16-eva] .hljs-title.class_.inherited__{color:#6f6}[theme=base16-eva] .hljs-built_in,[theme=base16-eva] .hljs-doctag,[theme=base16-eva] .hljs-keyword.hljs-atrule,[theme=base16-eva] .hljs-quote,[theme=base16-eva] .hljs-regexp{color:#4b8f77}[theme=base16-eva] .hljs-attribute,[theme=base16-eva] .hljs-function .hljs-title,[theme=base16-eva] .hljs-section,[theme=base16-eva] .hljs-title.function_,[theme=base16-eva] .ruby .hljs-property{color:#15f4ee}[theme=base16-eva] .diff .hljs-meta,[theme=base16-eva] .hljs-keyword,[theme=base16-eva] .hljs-template-tag,[theme=base16-eva] .hljs-type{color:#9c6cd3}[theme=base16-eva] .hljs-emphasis{color:#9c6cd3;font-style:italic}[theme=base16-eva] .hljs-meta,[theme=base16-eva] .hljs-meta .hljs-keyword,[theme=base16-eva] .hljs-meta .hljs-string{color:#bb64a9}[theme=base16-eva] .hljs-meta .hljs-keyword,[theme=base16-eva] .hljs-meta-keyword{font-weight:700}[theme=base16-flat]{ + /*! + Theme: Flat + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-flat] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-flat] code.hljs{padding:3px 5px}[theme=base16-flat] .hljs{color:#e0e0e0;background:#2c3e50}[theme=base16-flat] .hljs ::-moz-selection,[theme=base16-flat] .hljs::-moz-selection{background-color:#7f8c8d;color:#e0e0e0}[theme=base16-flat] .hljs ::selection,[theme=base16-flat] .hljs::selection{background-color:#7f8c8d;color:#e0e0e0}[theme=base16-flat] .hljs-comment{color:#95a5a6}[theme=base16-flat] .hljs-tag{color:#bdc3c7}[theme=base16-flat] .hljs-operator,[theme=base16-flat] .hljs-punctuation,[theme=base16-flat] .hljs-subst{color:#e0e0e0}[theme=base16-flat] .hljs-operator{opacity:.7}[theme=base16-flat] .hljs-bullet,[theme=base16-flat] .hljs-deletion,[theme=base16-flat] .hljs-name,[theme=base16-flat] .hljs-selector-tag,[theme=base16-flat] .hljs-template-variable,[theme=base16-flat] .hljs-variable{color:#e74c3c}[theme=base16-flat] .hljs-attr,[theme=base16-flat] .hljs-link,[theme=base16-flat] .hljs-literal,[theme=base16-flat] .hljs-number,[theme=base16-flat] .hljs-symbol,[theme=base16-flat] .hljs-variable.constant_{color:#e67e22}[theme=base16-flat] .hljs-class .hljs-title,[theme=base16-flat] .hljs-title,[theme=base16-flat] .hljs-title.class_{color:#f1c40f}[theme=base16-flat] .hljs-strong{font-weight:700;color:#f1c40f}[theme=base16-flat] .hljs-addition,[theme=base16-flat] .hljs-code,[theme=base16-flat] .hljs-string,[theme=base16-flat] .hljs-title.class_.inherited__{color:#2ecc71}[theme=base16-flat] .hljs-built_in,[theme=base16-flat] .hljs-doctag,[theme=base16-flat] .hljs-keyword.hljs-atrule,[theme=base16-flat] .hljs-quote,[theme=base16-flat] .hljs-regexp{color:#1abc9c}[theme=base16-flat] .hljs-attribute,[theme=base16-flat] .hljs-function .hljs-title,[theme=base16-flat] .hljs-section,[theme=base16-flat] .hljs-title.function_,[theme=base16-flat] .ruby .hljs-property{color:#3498db}[theme=base16-flat] .diff .hljs-meta,[theme=base16-flat] .hljs-keyword,[theme=base16-flat] .hljs-template-tag,[theme=base16-flat] .hljs-type{color:#9b59b6}[theme=base16-flat] .hljs-emphasis{color:#9b59b6;font-style:italic}[theme=base16-flat] .hljs-meta,[theme=base16-flat] .hljs-meta .hljs-keyword,[theme=base16-flat] .hljs-meta .hljs-string{color:#be643c}[theme=base16-flat] .hljs-meta .hljs-keyword,[theme=base16-flat] .hljs-meta-keyword{font-weight:700}[theme=base16-framer]{ + /*! + Theme: Framer + Author: Framer (Maintained by Jesse Hoyos) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-framer] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-framer] code.hljs{padding:3px 5px}[theme=base16-framer] .hljs{color:#d0d0d0;background:#181818}[theme=base16-framer] .hljs ::-moz-selection,[theme=base16-framer] .hljs::-moz-selection{background-color:#464646;color:#d0d0d0}[theme=base16-framer] .hljs ::selection,[theme=base16-framer] .hljs::selection{background-color:#464646;color:#d0d0d0}[theme=base16-framer] .hljs-comment{color:#747474}[theme=base16-framer] .hljs-tag{color:#b9b9b9}[theme=base16-framer] .hljs-operator,[theme=base16-framer] .hljs-punctuation,[theme=base16-framer] .hljs-subst{color:#d0d0d0}[theme=base16-framer] .hljs-operator{opacity:.7}[theme=base16-framer] .hljs-bullet,[theme=base16-framer] .hljs-deletion,[theme=base16-framer] .hljs-name,[theme=base16-framer] .hljs-selector-tag,[theme=base16-framer] .hljs-template-variable,[theme=base16-framer] .hljs-variable{color:#fd886b}[theme=base16-framer] .hljs-attr,[theme=base16-framer] .hljs-link,[theme=base16-framer] .hljs-literal,[theme=base16-framer] .hljs-number,[theme=base16-framer] .hljs-symbol,[theme=base16-framer] .hljs-variable.constant_{color:#fc4769}[theme=base16-framer] .hljs-class .hljs-title,[theme=base16-framer] .hljs-title,[theme=base16-framer] .hljs-title.class_{color:#fecb6e}[theme=base16-framer] .hljs-strong{font-weight:700;color:#fecb6e}[theme=base16-framer] .hljs-addition,[theme=base16-framer] .hljs-code,[theme=base16-framer] .hljs-string,[theme=base16-framer] .hljs-title.class_.inherited__{color:#32ccdc}[theme=base16-framer] .hljs-built_in,[theme=base16-framer] .hljs-doctag,[theme=base16-framer] .hljs-keyword.hljs-atrule,[theme=base16-framer] .hljs-quote,[theme=base16-framer] .hljs-regexp{color:#acddfd}[theme=base16-framer] .hljs-attribute,[theme=base16-framer] .hljs-function .hljs-title,[theme=base16-framer] .hljs-section,[theme=base16-framer] .hljs-title.function_,[theme=base16-framer] .ruby .hljs-property{color:#20bcfc}[theme=base16-framer] .diff .hljs-meta,[theme=base16-framer] .hljs-keyword,[theme=base16-framer] .hljs-template-tag,[theme=base16-framer] .hljs-type{color:#ba8cfc}[theme=base16-framer] .hljs-emphasis{color:#ba8cfc;font-style:italic}[theme=base16-framer] .hljs-meta,[theme=base16-framer] .hljs-meta .hljs-keyword,[theme=base16-framer] .hljs-meta .hljs-string{color:#b15f4a}[theme=base16-framer] .hljs-meta .hljs-keyword,[theme=base16-framer] .hljs-meta-keyword{font-weight:700}[theme=base16-fruit-soda]{ + /*! + Theme: Fruit Soda + Author: jozip + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-fruit-soda] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-fruit-soda] code.hljs{padding:3px 5px}[theme=base16-fruit-soda] .hljs{color:#515151;background:#f1ecf1}[theme=base16-fruit-soda] .hljs ::-moz-selection,[theme=base16-fruit-soda] .hljs::-moz-selection{background-color:#d8d5d5;color:#515151}[theme=base16-fruit-soda] .hljs ::selection,[theme=base16-fruit-soda] .hljs::selection{background-color:#d8d5d5;color:#515151}[theme=base16-fruit-soda] .hljs-comment{color:#b5b4b6}[theme=base16-fruit-soda] .hljs-tag{color:#979598}[theme=base16-fruit-soda] .hljs-operator,[theme=base16-fruit-soda] .hljs-punctuation,[theme=base16-fruit-soda] .hljs-subst{color:#515151}[theme=base16-fruit-soda] .hljs-operator{opacity:.7}[theme=base16-fruit-soda] .hljs-bullet,[theme=base16-fruit-soda] .hljs-deletion,[theme=base16-fruit-soda] .hljs-name,[theme=base16-fruit-soda] .hljs-selector-tag,[theme=base16-fruit-soda] .hljs-template-variable,[theme=base16-fruit-soda] .hljs-variable{color:#fe3e31}[theme=base16-fruit-soda] .hljs-attr,[theme=base16-fruit-soda] .hljs-link,[theme=base16-fruit-soda] .hljs-literal,[theme=base16-fruit-soda] .hljs-number,[theme=base16-fruit-soda] .hljs-symbol,[theme=base16-fruit-soda] .hljs-variable.constant_{color:#fe6d08}[theme=base16-fruit-soda] .hljs-class .hljs-title,[theme=base16-fruit-soda] .hljs-title,[theme=base16-fruit-soda] .hljs-title.class_{color:#f7e203}[theme=base16-fruit-soda] .hljs-strong{font-weight:700;color:#f7e203}[theme=base16-fruit-soda] .hljs-addition,[theme=base16-fruit-soda] .hljs-code,[theme=base16-fruit-soda] .hljs-string,[theme=base16-fruit-soda] .hljs-title.class_.inherited__{color:#47f74c}[theme=base16-fruit-soda] .hljs-built_in,[theme=base16-fruit-soda] .hljs-doctag,[theme=base16-fruit-soda] .hljs-keyword.hljs-atrule,[theme=base16-fruit-soda] .hljs-quote,[theme=base16-fruit-soda] .hljs-regexp{color:#0f9cfd}[theme=base16-fruit-soda] .hljs-attribute,[theme=base16-fruit-soda] .hljs-function .hljs-title,[theme=base16-fruit-soda] .hljs-section,[theme=base16-fruit-soda] .hljs-title.function_,[theme=base16-fruit-soda] .ruby .hljs-property{color:#2931df}[theme=base16-fruit-soda] .diff .hljs-meta,[theme=base16-fruit-soda] .hljs-keyword,[theme=base16-fruit-soda] .hljs-template-tag,[theme=base16-fruit-soda] .hljs-type{color:#611fce}[theme=base16-fruit-soda] .hljs-emphasis{color:#611fce;font-style:italic}[theme=base16-fruit-soda] .hljs-meta,[theme=base16-fruit-soda] .hljs-meta .hljs-keyword,[theme=base16-fruit-soda] .hljs-meta .hljs-string{color:#b16f40}[theme=base16-fruit-soda] .hljs-meta .hljs-keyword,[theme=base16-fruit-soda] .hljs-meta-keyword{font-weight:700}[theme=base16-gigavolt]{ + /*! + Theme: Gigavolt + Author: Aidan Swope (http://github.com/Whillikers) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gigavolt] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gigavolt] code.hljs{padding:3px 5px}[theme=base16-gigavolt] .hljs{color:#e9e7e1;background:#202126}[theme=base16-gigavolt] .hljs ::-moz-selection,[theme=base16-gigavolt] .hljs::-moz-selection{background-color:#5a576e;color:#e9e7e1}[theme=base16-gigavolt] .hljs ::selection,[theme=base16-gigavolt] .hljs::selection{background-color:#5a576e;color:#e9e7e1}[theme=base16-gigavolt] .hljs-comment{color:#a1d2e6}[theme=base16-gigavolt] .hljs-tag{color:#cad3ff}[theme=base16-gigavolt] .hljs-operator,[theme=base16-gigavolt] .hljs-punctuation,[theme=base16-gigavolt] .hljs-subst{color:#e9e7e1}[theme=base16-gigavolt] .hljs-operator{opacity:.7}[theme=base16-gigavolt] .hljs-bullet,[theme=base16-gigavolt] .hljs-deletion,[theme=base16-gigavolt] .hljs-name,[theme=base16-gigavolt] .hljs-selector-tag,[theme=base16-gigavolt] .hljs-template-variable,[theme=base16-gigavolt] .hljs-variable{color:#ff661a}[theme=base16-gigavolt] .hljs-attr,[theme=base16-gigavolt] .hljs-link,[theme=base16-gigavolt] .hljs-literal,[theme=base16-gigavolt] .hljs-number,[theme=base16-gigavolt] .hljs-symbol,[theme=base16-gigavolt] .hljs-variable.constant_{color:#19f988}[theme=base16-gigavolt] .hljs-class .hljs-title,[theme=base16-gigavolt] .hljs-title,[theme=base16-gigavolt] .hljs-title.class_{color:#ffdc2d}[theme=base16-gigavolt] .hljs-strong{font-weight:700;color:#ffdc2d}[theme=base16-gigavolt] .hljs-addition,[theme=base16-gigavolt] .hljs-code,[theme=base16-gigavolt] .hljs-string,[theme=base16-gigavolt] .hljs-title.class_.inherited__{color:#f2e6a9}[theme=base16-gigavolt] .hljs-built_in,[theme=base16-gigavolt] .hljs-doctag,[theme=base16-gigavolt] .hljs-keyword.hljs-atrule,[theme=base16-gigavolt] .hljs-quote,[theme=base16-gigavolt] .hljs-regexp{color:#fb6acb}[theme=base16-gigavolt] .hljs-attribute,[theme=base16-gigavolt] .hljs-function .hljs-title,[theme=base16-gigavolt] .hljs-section,[theme=base16-gigavolt] .hljs-title.function_,[theme=base16-gigavolt] .ruby .hljs-property{color:#40bfff}[theme=base16-gigavolt] .diff .hljs-meta,[theme=base16-gigavolt] .hljs-keyword,[theme=base16-gigavolt] .hljs-template-tag,[theme=base16-gigavolt] .hljs-type{color:#ae94f9}[theme=base16-gigavolt] .hljs-emphasis{color:#ae94f9;font-style:italic}[theme=base16-gigavolt] .hljs-meta,[theme=base16-gigavolt] .hljs-meta .hljs-keyword,[theme=base16-gigavolt] .hljs-meta .hljs-string{color:#6187ff}[theme=base16-gigavolt] .hljs-meta .hljs-keyword,[theme=base16-gigavolt] .hljs-meta-keyword{font-weight:700}[theme=base16-github]{ + /*! + Theme: Github + Author: Defman21 + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-github] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-github] code.hljs{padding:3px 5px}[theme=base16-github] .hljs{color:#333;background:#fff}[theme=base16-github] .hljs ::-moz-selection,[theme=base16-github] .hljs::-moz-selection{background-color:#c8c8fa;color:#333}[theme=base16-github] .hljs ::selection,[theme=base16-github] .hljs::selection{background-color:#c8c8fa;color:#333}[theme=base16-github] .hljs-comment{color:#969896}[theme=base16-github] .hljs-tag{color:#e8e8e8}[theme=base16-github] .hljs-operator,[theme=base16-github] .hljs-punctuation,[theme=base16-github] .hljs-subst{color:#333}[theme=base16-github] .hljs-operator{opacity:.7}[theme=base16-github] .hljs-bullet,[theme=base16-github] .hljs-deletion,[theme=base16-github] .hljs-name,[theme=base16-github] .hljs-selector-tag,[theme=base16-github] .hljs-template-variable,[theme=base16-github] .hljs-variable{color:#ed6a43}[theme=base16-github] .hljs-attr,[theme=base16-github] .hljs-link,[theme=base16-github] .hljs-literal,[theme=base16-github] .hljs-number,[theme=base16-github] .hljs-symbol,[theme=base16-github] .hljs-variable.constant_{color:#0086b3}[theme=base16-github] .hljs-class .hljs-title,[theme=base16-github] .hljs-title,[theme=base16-github] .hljs-title.class_{color:#795da3}[theme=base16-github] .hljs-strong{font-weight:700;color:#795da3}[theme=base16-github] .hljs-addition,[theme=base16-github] .hljs-built_in,[theme=base16-github] .hljs-code,[theme=base16-github] .hljs-doctag,[theme=base16-github] .hljs-keyword.hljs-atrule,[theme=base16-github] .hljs-quote,[theme=base16-github] .hljs-regexp,[theme=base16-github] .hljs-string,[theme=base16-github] .hljs-title.class_.inherited__{color:#183691}[theme=base16-github] .hljs-attribute,[theme=base16-github] .hljs-function .hljs-title,[theme=base16-github] .hljs-section,[theme=base16-github] .hljs-title.function_,[theme=base16-github] .ruby .hljs-property{color:#795da3}[theme=base16-github] .diff .hljs-meta,[theme=base16-github] .hljs-keyword,[theme=base16-github] .hljs-template-tag,[theme=base16-github] .hljs-type{color:#a71d5d}[theme=base16-github] .hljs-emphasis{color:#a71d5d;font-style:italic}[theme=base16-github] .hljs-meta,[theme=base16-github] .hljs-meta .hljs-keyword,[theme=base16-github] .hljs-meta .hljs-string{color:#333}[theme=base16-github] .hljs-meta .hljs-keyword,[theme=base16-github] .hljs-meta-keyword{font-weight:700}[theme=base16-google-dark]{ + /*! + Theme: Google Dark + Author: Seth Wright (http://sethawright.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-google-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-google-dark] code.hljs{padding:3px 5px}[theme=base16-google-dark] .hljs{color:#c5c8c6;background:#1d1f21}[theme=base16-google-dark] .hljs ::-moz-selection,[theme=base16-google-dark] .hljs::-moz-selection{background-color:#373b41;color:#c5c8c6}[theme=base16-google-dark] .hljs ::selection,[theme=base16-google-dark] .hljs::selection{background-color:#373b41;color:#c5c8c6}[theme=base16-google-dark] .hljs-comment{color:#969896}[theme=base16-google-dark] .hljs-tag{color:#b4b7b4}[theme=base16-google-dark] .hljs-operator,[theme=base16-google-dark] .hljs-punctuation,[theme=base16-google-dark] .hljs-subst{color:#c5c8c6}[theme=base16-google-dark] .hljs-operator{opacity:.7}[theme=base16-google-dark] .hljs-bullet,[theme=base16-google-dark] .hljs-deletion,[theme=base16-google-dark] .hljs-name,[theme=base16-google-dark] .hljs-selector-tag,[theme=base16-google-dark] .hljs-template-variable,[theme=base16-google-dark] .hljs-variable{color:#cc342b}[theme=base16-google-dark] .hljs-attr,[theme=base16-google-dark] .hljs-link,[theme=base16-google-dark] .hljs-literal,[theme=base16-google-dark] .hljs-number,[theme=base16-google-dark] .hljs-symbol,[theme=base16-google-dark] .hljs-variable.constant_{color:#f96a38}[theme=base16-google-dark] .hljs-class .hljs-title,[theme=base16-google-dark] .hljs-title,[theme=base16-google-dark] .hljs-title.class_{color:#fba922}[theme=base16-google-dark] .hljs-strong{font-weight:700;color:#fba922}[theme=base16-google-dark] .hljs-addition,[theme=base16-google-dark] .hljs-code,[theme=base16-google-dark] .hljs-string,[theme=base16-google-dark] .hljs-title.class_.inherited__{color:#198844}[theme=base16-google-dark] .hljs-attribute,[theme=base16-google-dark] .hljs-built_in,[theme=base16-google-dark] .hljs-doctag,[theme=base16-google-dark] .hljs-function .hljs-title,[theme=base16-google-dark] .hljs-keyword.hljs-atrule,[theme=base16-google-dark] .hljs-quote,[theme=base16-google-dark] .hljs-regexp,[theme=base16-google-dark] .hljs-section,[theme=base16-google-dark] .hljs-title.function_,[theme=base16-google-dark] .ruby .hljs-property{color:#3971ed}[theme=base16-google-dark] .diff .hljs-meta,[theme=base16-google-dark] .hljs-keyword,[theme=base16-google-dark] .hljs-template-tag,[theme=base16-google-dark] .hljs-type{color:#a36ac7}[theme=base16-google-dark] .hljs-emphasis{color:#a36ac7;font-style:italic}[theme=base16-google-dark] .hljs-meta,[theme=base16-google-dark] .hljs-meta .hljs-keyword,[theme=base16-google-dark] .hljs-meta .hljs-string{color:#3971ed}[theme=base16-google-dark] .hljs-meta .hljs-keyword,[theme=base16-google-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-google-light]{ + /*! + Theme: Google Light + Author: Seth Wright (http://sethawright.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-google-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-google-light] code.hljs{padding:3px 5px}[theme=base16-google-light] .hljs{color:#373b41;background:#fff}[theme=base16-google-light] .hljs ::-moz-selection,[theme=base16-google-light] .hljs::-moz-selection{background-color:#c5c8c6;color:#373b41}[theme=base16-google-light] .hljs ::selection,[theme=base16-google-light] .hljs::selection{background-color:#c5c8c6;color:#373b41}[theme=base16-google-light] .hljs-comment{color:#b4b7b4}[theme=base16-google-light] .hljs-tag{color:#969896}[theme=base16-google-light] .hljs-operator,[theme=base16-google-light] .hljs-punctuation,[theme=base16-google-light] .hljs-subst{color:#373b41}[theme=base16-google-light] .hljs-operator{opacity:.7}[theme=base16-google-light] .hljs-bullet,[theme=base16-google-light] .hljs-deletion,[theme=base16-google-light] .hljs-name,[theme=base16-google-light] .hljs-selector-tag,[theme=base16-google-light] .hljs-template-variable,[theme=base16-google-light] .hljs-variable{color:#cc342b}[theme=base16-google-light] .hljs-attr,[theme=base16-google-light] .hljs-link,[theme=base16-google-light] .hljs-literal,[theme=base16-google-light] .hljs-number,[theme=base16-google-light] .hljs-symbol,[theme=base16-google-light] .hljs-variable.constant_{color:#f96a38}[theme=base16-google-light] .hljs-class .hljs-title,[theme=base16-google-light] .hljs-title,[theme=base16-google-light] .hljs-title.class_{color:#fba922}[theme=base16-google-light] .hljs-strong{font-weight:700;color:#fba922}[theme=base16-google-light] .hljs-addition,[theme=base16-google-light] .hljs-code,[theme=base16-google-light] .hljs-string,[theme=base16-google-light] .hljs-title.class_.inherited__{color:#198844}[theme=base16-google-light] .hljs-attribute,[theme=base16-google-light] .hljs-built_in,[theme=base16-google-light] .hljs-doctag,[theme=base16-google-light] .hljs-function .hljs-title,[theme=base16-google-light] .hljs-keyword.hljs-atrule,[theme=base16-google-light] .hljs-quote,[theme=base16-google-light] .hljs-regexp,[theme=base16-google-light] .hljs-section,[theme=base16-google-light] .hljs-title.function_,[theme=base16-google-light] .ruby .hljs-property{color:#3971ed}[theme=base16-google-light] .diff .hljs-meta,[theme=base16-google-light] .hljs-keyword,[theme=base16-google-light] .hljs-template-tag,[theme=base16-google-light] .hljs-type{color:#a36ac7}[theme=base16-google-light] .hljs-emphasis{color:#a36ac7;font-style:italic}[theme=base16-google-light] .hljs-meta,[theme=base16-google-light] .hljs-meta .hljs-keyword,[theme=base16-google-light] .hljs-meta .hljs-string{color:#3971ed}[theme=base16-google-light] .hljs-meta .hljs-keyword,[theme=base16-google-light] .hljs-meta-keyword{font-weight:700}[theme=base16-grayscale-dark]{ + /*! + Theme: Grayscale Dark + Author: Alexandre Gavioli (https://github.com/Alexx2/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-grayscale-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-grayscale-dark] code.hljs{padding:3px 5px}[theme=base16-grayscale-dark] .hljs{color:#b9b9b9;background:#101010}[theme=base16-grayscale-dark] .hljs ::-moz-selection,[theme=base16-grayscale-dark] .hljs::-moz-selection{background-color:#464646;color:#b9b9b9}[theme=base16-grayscale-dark] .hljs ::selection,[theme=base16-grayscale-dark] .hljs::selection{background-color:#464646;color:#b9b9b9}[theme=base16-grayscale-dark] .hljs-comment{color:#525252}[theme=base16-grayscale-dark] .hljs-tag{color:#ababab}[theme=base16-grayscale-dark] .hljs-operator,[theme=base16-grayscale-dark] .hljs-punctuation,[theme=base16-grayscale-dark] .hljs-subst{color:#b9b9b9}[theme=base16-grayscale-dark] .hljs-operator{opacity:.7}[theme=base16-grayscale-dark] .hljs-bullet,[theme=base16-grayscale-dark] .hljs-deletion,[theme=base16-grayscale-dark] .hljs-name,[theme=base16-grayscale-dark] .hljs-selector-tag,[theme=base16-grayscale-dark] .hljs-template-variable,[theme=base16-grayscale-dark] .hljs-variable{color:#7c7c7c}[theme=base16-grayscale-dark] .hljs-attr,[theme=base16-grayscale-dark] .hljs-link,[theme=base16-grayscale-dark] .hljs-literal,[theme=base16-grayscale-dark] .hljs-number,[theme=base16-grayscale-dark] .hljs-symbol,[theme=base16-grayscale-dark] .hljs-variable.constant_{color:#999}[theme=base16-grayscale-dark] .hljs-class .hljs-title,[theme=base16-grayscale-dark] .hljs-title,[theme=base16-grayscale-dark] .hljs-title.class_{color:#a0a0a0}[theme=base16-grayscale-dark] .hljs-strong{font-weight:700;color:#a0a0a0}[theme=base16-grayscale-dark] .hljs-addition,[theme=base16-grayscale-dark] .hljs-code,[theme=base16-grayscale-dark] .hljs-string,[theme=base16-grayscale-dark] .hljs-title.class_.inherited__{color:#8e8e8e}[theme=base16-grayscale-dark] .hljs-built_in,[theme=base16-grayscale-dark] .hljs-doctag,[theme=base16-grayscale-dark] .hljs-keyword.hljs-atrule,[theme=base16-grayscale-dark] .hljs-quote,[theme=base16-grayscale-dark] .hljs-regexp{color:#868686}[theme=base16-grayscale-dark] .hljs-attribute,[theme=base16-grayscale-dark] .hljs-function .hljs-title,[theme=base16-grayscale-dark] .hljs-section,[theme=base16-grayscale-dark] .hljs-title.function_,[theme=base16-grayscale-dark] .ruby .hljs-property{color:#686868}[theme=base16-grayscale-dark] .diff .hljs-meta,[theme=base16-grayscale-dark] .hljs-keyword,[theme=base16-grayscale-dark] .hljs-template-tag,[theme=base16-grayscale-dark] .hljs-type{color:#747474}[theme=base16-grayscale-dark] .hljs-emphasis{color:#747474;font-style:italic}[theme=base16-grayscale-dark] .hljs-meta,[theme=base16-grayscale-dark] .hljs-meta .hljs-keyword,[theme=base16-grayscale-dark] .hljs-meta .hljs-string{color:#5e5e5e}[theme=base16-grayscale-dark] .hljs-meta .hljs-keyword,[theme=base16-grayscale-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-grayscale-light]{ + /*! + Theme: Grayscale Light + Author: Alexandre Gavioli (https://github.com/Alexx2/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-grayscale-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-grayscale-light] code.hljs{padding:3px 5px}[theme=base16-grayscale-light] .hljs{color:#464646;background:#f7f7f7}[theme=base16-grayscale-light] .hljs ::-moz-selection,[theme=base16-grayscale-light] .hljs::-moz-selection{background-color:#b9b9b9;color:#464646}[theme=base16-grayscale-light] .hljs ::selection,[theme=base16-grayscale-light] .hljs::selection{background-color:#b9b9b9;color:#464646}[theme=base16-grayscale-light] .hljs-comment{color:#ababab}[theme=base16-grayscale-light] .hljs-tag{color:#525252}[theme=base16-grayscale-light] .hljs-operator,[theme=base16-grayscale-light] .hljs-punctuation,[theme=base16-grayscale-light] .hljs-subst{color:#464646}[theme=base16-grayscale-light] .hljs-operator{opacity:.7}[theme=base16-grayscale-light] .hljs-bullet,[theme=base16-grayscale-light] .hljs-deletion,[theme=base16-grayscale-light] .hljs-name,[theme=base16-grayscale-light] .hljs-selector-tag,[theme=base16-grayscale-light] .hljs-template-variable,[theme=base16-grayscale-light] .hljs-variable{color:#7c7c7c}[theme=base16-grayscale-light] .hljs-attr,[theme=base16-grayscale-light] .hljs-link,[theme=base16-grayscale-light] .hljs-literal,[theme=base16-grayscale-light] .hljs-number,[theme=base16-grayscale-light] .hljs-symbol,[theme=base16-grayscale-light] .hljs-variable.constant_{color:#999}[theme=base16-grayscale-light] .hljs-class .hljs-title,[theme=base16-grayscale-light] .hljs-title,[theme=base16-grayscale-light] .hljs-title.class_{color:#a0a0a0}[theme=base16-grayscale-light] .hljs-strong{font-weight:700;color:#a0a0a0}[theme=base16-grayscale-light] .hljs-addition,[theme=base16-grayscale-light] .hljs-code,[theme=base16-grayscale-light] .hljs-string,[theme=base16-grayscale-light] .hljs-title.class_.inherited__{color:#8e8e8e}[theme=base16-grayscale-light] .hljs-built_in,[theme=base16-grayscale-light] .hljs-doctag,[theme=base16-grayscale-light] .hljs-keyword.hljs-atrule,[theme=base16-grayscale-light] .hljs-quote,[theme=base16-grayscale-light] .hljs-regexp{color:#868686}[theme=base16-grayscale-light] .hljs-attribute,[theme=base16-grayscale-light] .hljs-function .hljs-title,[theme=base16-grayscale-light] .hljs-section,[theme=base16-grayscale-light] .hljs-title.function_,[theme=base16-grayscale-light] .ruby .hljs-property{color:#686868}[theme=base16-grayscale-light] .diff .hljs-meta,[theme=base16-grayscale-light] .hljs-keyword,[theme=base16-grayscale-light] .hljs-template-tag,[theme=base16-grayscale-light] .hljs-type{color:#747474}[theme=base16-grayscale-light] .hljs-emphasis{color:#747474;font-style:italic}[theme=base16-grayscale-light] .hljs-meta,[theme=base16-grayscale-light] .hljs-meta .hljs-keyword,[theme=base16-grayscale-light] .hljs-meta .hljs-string{color:#5e5e5e}[theme=base16-grayscale-light] .hljs-meta .hljs-keyword,[theme=base16-grayscale-light] .hljs-meta-keyword{font-weight:700}[theme=base16-green-screen]{ + /*! + Theme: Green Screen + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-green-screen] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-green-screen] code.hljs{padding:3px 5px}[theme=base16-green-screen] .hljs{color:#0b0;background:#010}[theme=base16-green-screen] .hljs ::-moz-selection,[theme=base16-green-screen] .hljs::-moz-selection{background-color:#050;color:#0b0}[theme=base16-green-screen] .hljs ::selection,[theme=base16-green-screen] .hljs::selection{background-color:#050;color:#0b0}[theme=base16-green-screen] .hljs-comment{color:#070}[theme=base16-green-screen] .hljs-tag{color:#090}[theme=base16-green-screen] .hljs-operator,[theme=base16-green-screen] .hljs-punctuation,[theme=base16-green-screen] .hljs-subst{color:#0b0}[theme=base16-green-screen] .hljs-operator{opacity:.7}[theme=base16-green-screen] .hljs-bullet,[theme=base16-green-screen] .hljs-deletion,[theme=base16-green-screen] .hljs-name,[theme=base16-green-screen] .hljs-selector-tag,[theme=base16-green-screen] .hljs-template-variable,[theme=base16-green-screen] .hljs-variable{color:#070}[theme=base16-green-screen] .hljs-attr,[theme=base16-green-screen] .hljs-link,[theme=base16-green-screen] .hljs-literal,[theme=base16-green-screen] .hljs-number,[theme=base16-green-screen] .hljs-symbol,[theme=base16-green-screen] .hljs-variable.constant_{color:#090}[theme=base16-green-screen] .hljs-class .hljs-title,[theme=base16-green-screen] .hljs-title,[theme=base16-green-screen] .hljs-title.class_{color:#070}[theme=base16-green-screen] .hljs-strong{font-weight:700;color:#070}[theme=base16-green-screen] .hljs-addition,[theme=base16-green-screen] .hljs-code,[theme=base16-green-screen] .hljs-string,[theme=base16-green-screen] .hljs-title.class_.inherited__{color:#0b0}[theme=base16-green-screen] .hljs-built_in,[theme=base16-green-screen] .hljs-doctag,[theme=base16-green-screen] .hljs-keyword.hljs-atrule,[theme=base16-green-screen] .hljs-quote,[theme=base16-green-screen] .hljs-regexp{color:#050}[theme=base16-green-screen] .hljs-attribute,[theme=base16-green-screen] .hljs-function .hljs-title,[theme=base16-green-screen] .hljs-section,[theme=base16-green-screen] .hljs-title.function_,[theme=base16-green-screen] .ruby .hljs-property{color:#090}[theme=base16-green-screen] .diff .hljs-meta,[theme=base16-green-screen] .hljs-keyword,[theme=base16-green-screen] .hljs-template-tag,[theme=base16-green-screen] .hljs-type{color:#0b0}[theme=base16-green-screen] .hljs-emphasis{color:#0b0;font-style:italic}[theme=base16-green-screen] .hljs-meta,[theme=base16-green-screen] .hljs-meta .hljs-keyword,[theme=base16-green-screen] .hljs-meta .hljs-string{color:#050}[theme=base16-green-screen] .hljs-meta .hljs-keyword,[theme=base16-green-screen] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-dark-hard]{ + /*! + Theme: Gruvbox dark, hard + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-dark-hard] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-dark-hard] code.hljs{padding:3px 5px}[theme=base16-gruvbox-dark-hard] .hljs{color:#d5c4a1;background:#1d2021}[theme=base16-gruvbox-dark-hard] .hljs ::-moz-selection,[theme=base16-gruvbox-dark-hard] .hljs::-moz-selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-hard] .hljs ::selection,[theme=base16-gruvbox-dark-hard] .hljs::selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-hard] .hljs-comment{color:#665c54}[theme=base16-gruvbox-dark-hard] .hljs-tag{color:#bdae93}[theme=base16-gruvbox-dark-hard] .hljs-operator,[theme=base16-gruvbox-dark-hard] .hljs-punctuation,[theme=base16-gruvbox-dark-hard] .hljs-subst{color:#d5c4a1}[theme=base16-gruvbox-dark-hard] .hljs-operator{opacity:.7}[theme=base16-gruvbox-dark-hard] .hljs-bullet,[theme=base16-gruvbox-dark-hard] .hljs-deletion,[theme=base16-gruvbox-dark-hard] .hljs-name,[theme=base16-gruvbox-dark-hard] .hljs-selector-tag,[theme=base16-gruvbox-dark-hard] .hljs-template-variable,[theme=base16-gruvbox-dark-hard] .hljs-variable{color:#fb4934}[theme=base16-gruvbox-dark-hard] .hljs-attr,[theme=base16-gruvbox-dark-hard] .hljs-link,[theme=base16-gruvbox-dark-hard] .hljs-literal,[theme=base16-gruvbox-dark-hard] .hljs-number,[theme=base16-gruvbox-dark-hard] .hljs-symbol,[theme=base16-gruvbox-dark-hard] .hljs-variable.constant_{color:#fe8019}[theme=base16-gruvbox-dark-hard] .hljs-class .hljs-title,[theme=base16-gruvbox-dark-hard] .hljs-title,[theme=base16-gruvbox-dark-hard] .hljs-title.class_{color:#fabd2f}[theme=base16-gruvbox-dark-hard] .hljs-strong{font-weight:700;color:#fabd2f}[theme=base16-gruvbox-dark-hard] .hljs-addition,[theme=base16-gruvbox-dark-hard] .hljs-code,[theme=base16-gruvbox-dark-hard] .hljs-string,[theme=base16-gruvbox-dark-hard] .hljs-title.class_.inherited__{color:#b8bb26}[theme=base16-gruvbox-dark-hard] .hljs-built_in,[theme=base16-gruvbox-dark-hard] .hljs-doctag,[theme=base16-gruvbox-dark-hard] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-dark-hard] .hljs-quote,[theme=base16-gruvbox-dark-hard] .hljs-regexp{color:#8ec07c}[theme=base16-gruvbox-dark-hard] .hljs-attribute,[theme=base16-gruvbox-dark-hard] .hljs-function .hljs-title,[theme=base16-gruvbox-dark-hard] .hljs-section,[theme=base16-gruvbox-dark-hard] .hljs-title.function_,[theme=base16-gruvbox-dark-hard] .ruby .hljs-property{color:#83a598}[theme=base16-gruvbox-dark-hard] .diff .hljs-meta,[theme=base16-gruvbox-dark-hard] .hljs-keyword,[theme=base16-gruvbox-dark-hard] .hljs-template-tag,[theme=base16-gruvbox-dark-hard] .hljs-type{color:#d3869b}[theme=base16-gruvbox-dark-hard] .hljs-emphasis{color:#d3869b;font-style:italic}[theme=base16-gruvbox-dark-hard] .hljs-meta,[theme=base16-gruvbox-dark-hard] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-hard] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-dark-hard] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-hard] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-dark-medium]{ + /*! + Theme: Gruvbox dark, medium + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-dark-medium] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-dark-medium] code.hljs{padding:3px 5px}[theme=base16-gruvbox-dark-medium] .hljs{color:#d5c4a1;background:#282828}[theme=base16-gruvbox-dark-medium] .hljs ::-moz-selection,[theme=base16-gruvbox-dark-medium] .hljs::-moz-selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-medium] .hljs ::selection,[theme=base16-gruvbox-dark-medium] .hljs::selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-medium] .hljs-comment{color:#665c54}[theme=base16-gruvbox-dark-medium] .hljs-tag{color:#bdae93}[theme=base16-gruvbox-dark-medium] .hljs-operator,[theme=base16-gruvbox-dark-medium] .hljs-punctuation,[theme=base16-gruvbox-dark-medium] .hljs-subst{color:#d5c4a1}[theme=base16-gruvbox-dark-medium] .hljs-operator{opacity:.7}[theme=base16-gruvbox-dark-medium] .hljs-bullet,[theme=base16-gruvbox-dark-medium] .hljs-deletion,[theme=base16-gruvbox-dark-medium] .hljs-name,[theme=base16-gruvbox-dark-medium] .hljs-selector-tag,[theme=base16-gruvbox-dark-medium] .hljs-template-variable,[theme=base16-gruvbox-dark-medium] .hljs-variable{color:#fb4934}[theme=base16-gruvbox-dark-medium] .hljs-attr,[theme=base16-gruvbox-dark-medium] .hljs-link,[theme=base16-gruvbox-dark-medium] .hljs-literal,[theme=base16-gruvbox-dark-medium] .hljs-number,[theme=base16-gruvbox-dark-medium] .hljs-symbol,[theme=base16-gruvbox-dark-medium] .hljs-variable.constant_{color:#fe8019}[theme=base16-gruvbox-dark-medium] .hljs-class .hljs-title,[theme=base16-gruvbox-dark-medium] .hljs-title,[theme=base16-gruvbox-dark-medium] .hljs-title.class_{color:#fabd2f}[theme=base16-gruvbox-dark-medium] .hljs-strong{font-weight:700;color:#fabd2f}[theme=base16-gruvbox-dark-medium] .hljs-addition,[theme=base16-gruvbox-dark-medium] .hljs-code,[theme=base16-gruvbox-dark-medium] .hljs-string,[theme=base16-gruvbox-dark-medium] .hljs-title.class_.inherited__{color:#b8bb26}[theme=base16-gruvbox-dark-medium] .hljs-built_in,[theme=base16-gruvbox-dark-medium] .hljs-doctag,[theme=base16-gruvbox-dark-medium] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-dark-medium] .hljs-quote,[theme=base16-gruvbox-dark-medium] .hljs-regexp{color:#8ec07c}[theme=base16-gruvbox-dark-medium] .hljs-attribute,[theme=base16-gruvbox-dark-medium] .hljs-function .hljs-title,[theme=base16-gruvbox-dark-medium] .hljs-section,[theme=base16-gruvbox-dark-medium] .hljs-title.function_,[theme=base16-gruvbox-dark-medium] .ruby .hljs-property{color:#83a598}[theme=base16-gruvbox-dark-medium] .diff .hljs-meta,[theme=base16-gruvbox-dark-medium] .hljs-keyword,[theme=base16-gruvbox-dark-medium] .hljs-template-tag,[theme=base16-gruvbox-dark-medium] .hljs-type{color:#d3869b}[theme=base16-gruvbox-dark-medium] .hljs-emphasis{color:#d3869b;font-style:italic}[theme=base16-gruvbox-dark-medium] .hljs-meta,[theme=base16-gruvbox-dark-medium] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-medium] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-dark-medium] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-medium] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-dark-pale]{ + /*! + Theme: Gruvbox dark, pale + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-dark-pale] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-dark-pale] code.hljs{padding:3px 5px}[theme=base16-gruvbox-dark-pale] .hljs{color:#dab997;background:#262626}[theme=base16-gruvbox-dark-pale] .hljs ::-moz-selection,[theme=base16-gruvbox-dark-pale] .hljs::-moz-selection{background-color:#4e4e4e;color:#dab997}[theme=base16-gruvbox-dark-pale] .hljs ::selection,[theme=base16-gruvbox-dark-pale] .hljs::selection{background-color:#4e4e4e;color:#dab997}[theme=base16-gruvbox-dark-pale] .hljs-comment{color:#8a8a8a}[theme=base16-gruvbox-dark-pale] .hljs-tag{color:#949494}[theme=base16-gruvbox-dark-pale] .hljs-operator,[theme=base16-gruvbox-dark-pale] .hljs-punctuation,[theme=base16-gruvbox-dark-pale] .hljs-subst{color:#dab997}[theme=base16-gruvbox-dark-pale] .hljs-operator{opacity:.7}[theme=base16-gruvbox-dark-pale] .hljs-bullet,[theme=base16-gruvbox-dark-pale] .hljs-deletion,[theme=base16-gruvbox-dark-pale] .hljs-name,[theme=base16-gruvbox-dark-pale] .hljs-selector-tag,[theme=base16-gruvbox-dark-pale] .hljs-template-variable,[theme=base16-gruvbox-dark-pale] .hljs-variable{color:#d75f5f}[theme=base16-gruvbox-dark-pale] .hljs-attr,[theme=base16-gruvbox-dark-pale] .hljs-link,[theme=base16-gruvbox-dark-pale] .hljs-literal,[theme=base16-gruvbox-dark-pale] .hljs-number,[theme=base16-gruvbox-dark-pale] .hljs-symbol,[theme=base16-gruvbox-dark-pale] .hljs-variable.constant_{color:#ff8700}[theme=base16-gruvbox-dark-pale] .hljs-class .hljs-title,[theme=base16-gruvbox-dark-pale] .hljs-title,[theme=base16-gruvbox-dark-pale] .hljs-title.class_{color:#ffaf00}[theme=base16-gruvbox-dark-pale] .hljs-strong{font-weight:700;color:#ffaf00}[theme=base16-gruvbox-dark-pale] .hljs-addition,[theme=base16-gruvbox-dark-pale] .hljs-code,[theme=base16-gruvbox-dark-pale] .hljs-string,[theme=base16-gruvbox-dark-pale] .hljs-title.class_.inherited__{color:#afaf00}[theme=base16-gruvbox-dark-pale] .hljs-built_in,[theme=base16-gruvbox-dark-pale] .hljs-doctag,[theme=base16-gruvbox-dark-pale] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-dark-pale] .hljs-quote,[theme=base16-gruvbox-dark-pale] .hljs-regexp{color:#85ad85}[theme=base16-gruvbox-dark-pale] .hljs-attribute,[theme=base16-gruvbox-dark-pale] .hljs-function .hljs-title,[theme=base16-gruvbox-dark-pale] .hljs-section,[theme=base16-gruvbox-dark-pale] .hljs-title.function_,[theme=base16-gruvbox-dark-pale] .ruby .hljs-property{color:#83adad}[theme=base16-gruvbox-dark-pale] .diff .hljs-meta,[theme=base16-gruvbox-dark-pale] .hljs-keyword,[theme=base16-gruvbox-dark-pale] .hljs-template-tag,[theme=base16-gruvbox-dark-pale] .hljs-type{color:#d485ad}[theme=base16-gruvbox-dark-pale] .hljs-emphasis{color:#d485ad;font-style:italic}[theme=base16-gruvbox-dark-pale] .hljs-meta,[theme=base16-gruvbox-dark-pale] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-pale] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-dark-pale] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-pale] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-dark-soft]{ + /*! + Theme: Gruvbox dark, soft + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-dark-soft] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-dark-soft] code.hljs{padding:3px 5px}[theme=base16-gruvbox-dark-soft] .hljs{color:#d5c4a1;background:#32302f}[theme=base16-gruvbox-dark-soft] .hljs ::-moz-selection,[theme=base16-gruvbox-dark-soft] .hljs::-moz-selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-soft] .hljs ::selection,[theme=base16-gruvbox-dark-soft] .hljs::selection{background-color:#504945;color:#d5c4a1}[theme=base16-gruvbox-dark-soft] .hljs-comment{color:#665c54}[theme=base16-gruvbox-dark-soft] .hljs-tag{color:#bdae93}[theme=base16-gruvbox-dark-soft] .hljs-operator,[theme=base16-gruvbox-dark-soft] .hljs-punctuation,[theme=base16-gruvbox-dark-soft] .hljs-subst{color:#d5c4a1}[theme=base16-gruvbox-dark-soft] .hljs-operator{opacity:.7}[theme=base16-gruvbox-dark-soft] .hljs-bullet,[theme=base16-gruvbox-dark-soft] .hljs-deletion,[theme=base16-gruvbox-dark-soft] .hljs-name,[theme=base16-gruvbox-dark-soft] .hljs-selector-tag,[theme=base16-gruvbox-dark-soft] .hljs-template-variable,[theme=base16-gruvbox-dark-soft] .hljs-variable{color:#fb4934}[theme=base16-gruvbox-dark-soft] .hljs-attr,[theme=base16-gruvbox-dark-soft] .hljs-link,[theme=base16-gruvbox-dark-soft] .hljs-literal,[theme=base16-gruvbox-dark-soft] .hljs-number,[theme=base16-gruvbox-dark-soft] .hljs-symbol,[theme=base16-gruvbox-dark-soft] .hljs-variable.constant_{color:#fe8019}[theme=base16-gruvbox-dark-soft] .hljs-class .hljs-title,[theme=base16-gruvbox-dark-soft] .hljs-title,[theme=base16-gruvbox-dark-soft] .hljs-title.class_{color:#fabd2f}[theme=base16-gruvbox-dark-soft] .hljs-strong{font-weight:700;color:#fabd2f}[theme=base16-gruvbox-dark-soft] .hljs-addition,[theme=base16-gruvbox-dark-soft] .hljs-code,[theme=base16-gruvbox-dark-soft] .hljs-string,[theme=base16-gruvbox-dark-soft] .hljs-title.class_.inherited__{color:#b8bb26}[theme=base16-gruvbox-dark-soft] .hljs-built_in,[theme=base16-gruvbox-dark-soft] .hljs-doctag,[theme=base16-gruvbox-dark-soft] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-dark-soft] .hljs-quote,[theme=base16-gruvbox-dark-soft] .hljs-regexp{color:#8ec07c}[theme=base16-gruvbox-dark-soft] .hljs-attribute,[theme=base16-gruvbox-dark-soft] .hljs-function .hljs-title,[theme=base16-gruvbox-dark-soft] .hljs-section,[theme=base16-gruvbox-dark-soft] .hljs-title.function_,[theme=base16-gruvbox-dark-soft] .ruby .hljs-property{color:#83a598}[theme=base16-gruvbox-dark-soft] .diff .hljs-meta,[theme=base16-gruvbox-dark-soft] .hljs-keyword,[theme=base16-gruvbox-dark-soft] .hljs-template-tag,[theme=base16-gruvbox-dark-soft] .hljs-type{color:#d3869b}[theme=base16-gruvbox-dark-soft] .hljs-emphasis{color:#d3869b;font-style:italic}[theme=base16-gruvbox-dark-soft] .hljs-meta,[theme=base16-gruvbox-dark-soft] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-soft] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-dark-soft] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-dark-soft] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-light-hard]{ + /*! + Theme: Gruvbox light, hard + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-light-hard] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-light-hard] code.hljs{padding:3px 5px}[theme=base16-gruvbox-light-hard] .hljs{color:#504945;background:#f9f5d7}[theme=base16-gruvbox-light-hard] .hljs ::-moz-selection,[theme=base16-gruvbox-light-hard] .hljs::-moz-selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-hard] .hljs ::selection,[theme=base16-gruvbox-light-hard] .hljs::selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-hard] .hljs-comment{color:#bdae93}[theme=base16-gruvbox-light-hard] .hljs-tag{color:#665c54}[theme=base16-gruvbox-light-hard] .hljs-operator,[theme=base16-gruvbox-light-hard] .hljs-punctuation,[theme=base16-gruvbox-light-hard] .hljs-subst{color:#504945}[theme=base16-gruvbox-light-hard] .hljs-operator{opacity:.7}[theme=base16-gruvbox-light-hard] .hljs-bullet,[theme=base16-gruvbox-light-hard] .hljs-deletion,[theme=base16-gruvbox-light-hard] .hljs-name,[theme=base16-gruvbox-light-hard] .hljs-selector-tag,[theme=base16-gruvbox-light-hard] .hljs-template-variable,[theme=base16-gruvbox-light-hard] .hljs-variable{color:#9d0006}[theme=base16-gruvbox-light-hard] .hljs-attr,[theme=base16-gruvbox-light-hard] .hljs-link,[theme=base16-gruvbox-light-hard] .hljs-literal,[theme=base16-gruvbox-light-hard] .hljs-number,[theme=base16-gruvbox-light-hard] .hljs-symbol,[theme=base16-gruvbox-light-hard] .hljs-variable.constant_{color:#af3a03}[theme=base16-gruvbox-light-hard] .hljs-class .hljs-title,[theme=base16-gruvbox-light-hard] .hljs-title,[theme=base16-gruvbox-light-hard] .hljs-title.class_{color:#b57614}[theme=base16-gruvbox-light-hard] .hljs-strong{font-weight:700;color:#b57614}[theme=base16-gruvbox-light-hard] .hljs-addition,[theme=base16-gruvbox-light-hard] .hljs-code,[theme=base16-gruvbox-light-hard] .hljs-string,[theme=base16-gruvbox-light-hard] .hljs-title.class_.inherited__{color:#79740e}[theme=base16-gruvbox-light-hard] .hljs-built_in,[theme=base16-gruvbox-light-hard] .hljs-doctag,[theme=base16-gruvbox-light-hard] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-light-hard] .hljs-quote,[theme=base16-gruvbox-light-hard] .hljs-regexp{color:#427b58}[theme=base16-gruvbox-light-hard] .hljs-attribute,[theme=base16-gruvbox-light-hard] .hljs-function .hljs-title,[theme=base16-gruvbox-light-hard] .hljs-section,[theme=base16-gruvbox-light-hard] .hljs-title.function_,[theme=base16-gruvbox-light-hard] .ruby .hljs-property{color:#076678}[theme=base16-gruvbox-light-hard] .diff .hljs-meta,[theme=base16-gruvbox-light-hard] .hljs-keyword,[theme=base16-gruvbox-light-hard] .hljs-template-tag,[theme=base16-gruvbox-light-hard] .hljs-type{color:#8f3f71}[theme=base16-gruvbox-light-hard] .hljs-emphasis{color:#8f3f71;font-style:italic}[theme=base16-gruvbox-light-hard] .hljs-meta,[theme=base16-gruvbox-light-hard] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-hard] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-light-hard] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-hard] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-light-medium]{ + /*! + Theme: Gruvbox light, medium + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-light-medium] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-light-medium] code.hljs{padding:3px 5px}[theme=base16-gruvbox-light-medium] .hljs{color:#504945;background:#fbf1c7}[theme=base16-gruvbox-light-medium] .hljs ::-moz-selection,[theme=base16-gruvbox-light-medium] .hljs::-moz-selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-medium] .hljs ::selection,[theme=base16-gruvbox-light-medium] .hljs::selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-medium] .hljs-comment{color:#bdae93}[theme=base16-gruvbox-light-medium] .hljs-tag{color:#665c54}[theme=base16-gruvbox-light-medium] .hljs-operator,[theme=base16-gruvbox-light-medium] .hljs-punctuation,[theme=base16-gruvbox-light-medium] .hljs-subst{color:#504945}[theme=base16-gruvbox-light-medium] .hljs-operator{opacity:.7}[theme=base16-gruvbox-light-medium] .hljs-bullet,[theme=base16-gruvbox-light-medium] .hljs-deletion,[theme=base16-gruvbox-light-medium] .hljs-name,[theme=base16-gruvbox-light-medium] .hljs-selector-tag,[theme=base16-gruvbox-light-medium] .hljs-template-variable,[theme=base16-gruvbox-light-medium] .hljs-variable{color:#9d0006}[theme=base16-gruvbox-light-medium] .hljs-attr,[theme=base16-gruvbox-light-medium] .hljs-link,[theme=base16-gruvbox-light-medium] .hljs-literal,[theme=base16-gruvbox-light-medium] .hljs-number,[theme=base16-gruvbox-light-medium] .hljs-symbol,[theme=base16-gruvbox-light-medium] .hljs-variable.constant_{color:#af3a03}[theme=base16-gruvbox-light-medium] .hljs-class .hljs-title,[theme=base16-gruvbox-light-medium] .hljs-title,[theme=base16-gruvbox-light-medium] .hljs-title.class_{color:#b57614}[theme=base16-gruvbox-light-medium] .hljs-strong{font-weight:700;color:#b57614}[theme=base16-gruvbox-light-medium] .hljs-addition,[theme=base16-gruvbox-light-medium] .hljs-code,[theme=base16-gruvbox-light-medium] .hljs-string,[theme=base16-gruvbox-light-medium] .hljs-title.class_.inherited__{color:#79740e}[theme=base16-gruvbox-light-medium] .hljs-built_in,[theme=base16-gruvbox-light-medium] .hljs-doctag,[theme=base16-gruvbox-light-medium] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-light-medium] .hljs-quote,[theme=base16-gruvbox-light-medium] .hljs-regexp{color:#427b58}[theme=base16-gruvbox-light-medium] .hljs-attribute,[theme=base16-gruvbox-light-medium] .hljs-function .hljs-title,[theme=base16-gruvbox-light-medium] .hljs-section,[theme=base16-gruvbox-light-medium] .hljs-title.function_,[theme=base16-gruvbox-light-medium] .ruby .hljs-property{color:#076678}[theme=base16-gruvbox-light-medium] .diff .hljs-meta,[theme=base16-gruvbox-light-medium] .hljs-keyword,[theme=base16-gruvbox-light-medium] .hljs-template-tag,[theme=base16-gruvbox-light-medium] .hljs-type{color:#8f3f71}[theme=base16-gruvbox-light-medium] .hljs-emphasis{color:#8f3f71;font-style:italic}[theme=base16-gruvbox-light-medium] .hljs-meta,[theme=base16-gruvbox-light-medium] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-medium] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-light-medium] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-medium] .hljs-meta-keyword{font-weight:700}[theme=base16-gruvbox-light-soft]{ + /*! + Theme: Gruvbox light, soft + Author: Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-gruvbox-light-soft] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-gruvbox-light-soft] code.hljs{padding:3px 5px}[theme=base16-gruvbox-light-soft] .hljs{color:#504945;background:#f2e5bc}[theme=base16-gruvbox-light-soft] .hljs ::-moz-selection,[theme=base16-gruvbox-light-soft] .hljs::-moz-selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-soft] .hljs ::selection,[theme=base16-gruvbox-light-soft] .hljs::selection{background-color:#d5c4a1;color:#504945}[theme=base16-gruvbox-light-soft] .hljs-comment{color:#bdae93}[theme=base16-gruvbox-light-soft] .hljs-tag{color:#665c54}[theme=base16-gruvbox-light-soft] .hljs-operator,[theme=base16-gruvbox-light-soft] .hljs-punctuation,[theme=base16-gruvbox-light-soft] .hljs-subst{color:#504945}[theme=base16-gruvbox-light-soft] .hljs-operator{opacity:.7}[theme=base16-gruvbox-light-soft] .hljs-bullet,[theme=base16-gruvbox-light-soft] .hljs-deletion,[theme=base16-gruvbox-light-soft] .hljs-name,[theme=base16-gruvbox-light-soft] .hljs-selector-tag,[theme=base16-gruvbox-light-soft] .hljs-template-variable,[theme=base16-gruvbox-light-soft] .hljs-variable{color:#9d0006}[theme=base16-gruvbox-light-soft] .hljs-attr,[theme=base16-gruvbox-light-soft] .hljs-link,[theme=base16-gruvbox-light-soft] .hljs-literal,[theme=base16-gruvbox-light-soft] .hljs-number,[theme=base16-gruvbox-light-soft] .hljs-symbol,[theme=base16-gruvbox-light-soft] .hljs-variable.constant_{color:#af3a03}[theme=base16-gruvbox-light-soft] .hljs-class .hljs-title,[theme=base16-gruvbox-light-soft] .hljs-title,[theme=base16-gruvbox-light-soft] .hljs-title.class_{color:#b57614}[theme=base16-gruvbox-light-soft] .hljs-strong{font-weight:700;color:#b57614}[theme=base16-gruvbox-light-soft] .hljs-addition,[theme=base16-gruvbox-light-soft] .hljs-code,[theme=base16-gruvbox-light-soft] .hljs-string,[theme=base16-gruvbox-light-soft] .hljs-title.class_.inherited__{color:#79740e}[theme=base16-gruvbox-light-soft] .hljs-built_in,[theme=base16-gruvbox-light-soft] .hljs-doctag,[theme=base16-gruvbox-light-soft] .hljs-keyword.hljs-atrule,[theme=base16-gruvbox-light-soft] .hljs-quote,[theme=base16-gruvbox-light-soft] .hljs-regexp{color:#427b58}[theme=base16-gruvbox-light-soft] .hljs-attribute,[theme=base16-gruvbox-light-soft] .hljs-function .hljs-title,[theme=base16-gruvbox-light-soft] .hljs-section,[theme=base16-gruvbox-light-soft] .hljs-title.function_,[theme=base16-gruvbox-light-soft] .ruby .hljs-property{color:#076678}[theme=base16-gruvbox-light-soft] .diff .hljs-meta,[theme=base16-gruvbox-light-soft] .hljs-keyword,[theme=base16-gruvbox-light-soft] .hljs-template-tag,[theme=base16-gruvbox-light-soft] .hljs-type{color:#8f3f71}[theme=base16-gruvbox-light-soft] .hljs-emphasis{color:#8f3f71;font-style:italic}[theme=base16-gruvbox-light-soft] .hljs-meta,[theme=base16-gruvbox-light-soft] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-soft] .hljs-meta .hljs-string{color:#d65d0e}[theme=base16-gruvbox-light-soft] .hljs-meta .hljs-keyword,[theme=base16-gruvbox-light-soft] .hljs-meta-keyword{font-weight:700}[theme=base16-hardcore]{ + /*! + Theme: Hardcore + Author: Chris Caller + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-hardcore] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-hardcore] code.hljs{padding:3px 5px}[theme=base16-hardcore] .hljs{color:#cdcdcd;background:#212121}[theme=base16-hardcore] .hljs ::-moz-selection,[theme=base16-hardcore] .hljs::-moz-selection{background-color:#353535;color:#cdcdcd}[theme=base16-hardcore] .hljs ::selection,[theme=base16-hardcore] .hljs::selection{background-color:#353535;color:#cdcdcd}[theme=base16-hardcore] .hljs-comment{color:#4a4a4a}[theme=base16-hardcore] .hljs-tag{color:#707070}[theme=base16-hardcore] .hljs-operator,[theme=base16-hardcore] .hljs-punctuation,[theme=base16-hardcore] .hljs-subst{color:#cdcdcd}[theme=base16-hardcore] .hljs-operator{opacity:.7}[theme=base16-hardcore] .hljs-bullet,[theme=base16-hardcore] .hljs-deletion,[theme=base16-hardcore] .hljs-name,[theme=base16-hardcore] .hljs-selector-tag,[theme=base16-hardcore] .hljs-template-variable,[theme=base16-hardcore] .hljs-variable{color:#f92672}[theme=base16-hardcore] .hljs-attr,[theme=base16-hardcore] .hljs-link,[theme=base16-hardcore] .hljs-literal,[theme=base16-hardcore] .hljs-number,[theme=base16-hardcore] .hljs-symbol,[theme=base16-hardcore] .hljs-variable.constant_{color:#fd971f}[theme=base16-hardcore] .hljs-class .hljs-title,[theme=base16-hardcore] .hljs-title,[theme=base16-hardcore] .hljs-title.class_{color:#e6db74}[theme=base16-hardcore] .hljs-strong{font-weight:700;color:#e6db74}[theme=base16-hardcore] .hljs-addition,[theme=base16-hardcore] .hljs-code,[theme=base16-hardcore] .hljs-string,[theme=base16-hardcore] .hljs-title.class_.inherited__{color:#a6e22e}[theme=base16-hardcore] .hljs-built_in,[theme=base16-hardcore] .hljs-doctag,[theme=base16-hardcore] .hljs-keyword.hljs-atrule,[theme=base16-hardcore] .hljs-quote,[theme=base16-hardcore] .hljs-regexp{color:#708387}[theme=base16-hardcore] .hljs-attribute,[theme=base16-hardcore] .hljs-function .hljs-title,[theme=base16-hardcore] .hljs-section,[theme=base16-hardcore] .hljs-title.function_,[theme=base16-hardcore] .ruby .hljs-property{color:#66d9ef}[theme=base16-hardcore] .diff .hljs-meta,[theme=base16-hardcore] .hljs-keyword,[theme=base16-hardcore] .hljs-template-tag,[theme=base16-hardcore] .hljs-type{color:#9e6ffe}[theme=base16-hardcore] .hljs-emphasis{color:#9e6ffe;font-style:italic}[theme=base16-hardcore] .hljs-meta,[theme=base16-hardcore] .hljs-meta .hljs-keyword,[theme=base16-hardcore] .hljs-meta .hljs-string{color:#e8b882}[theme=base16-hardcore] .hljs-meta .hljs-keyword,[theme=base16-hardcore] .hljs-meta-keyword{font-weight:700}[theme=base16-harmonic16-dark]{ + /*! + Theme: Harmonic16 Dark + Author: Jannik Siebert (https://github.com/janniks) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-harmonic16-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-harmonic16-dark] code.hljs{padding:3px 5px}[theme=base16-harmonic16-dark] .hljs{color:#cbd6e2;background:#0b1c2c}[theme=base16-harmonic16-dark] .hljs ::-moz-selection,[theme=base16-harmonic16-dark] .hljs::-moz-selection{background-color:#405c79;color:#cbd6e2}[theme=base16-harmonic16-dark] .hljs ::selection,[theme=base16-harmonic16-dark] .hljs::selection{background-color:#405c79;color:#cbd6e2}[theme=base16-harmonic16-dark] .hljs-comment{color:#627e99}[theme=base16-harmonic16-dark] .hljs-tag{color:#aabcce}[theme=base16-harmonic16-dark] .hljs-operator,[theme=base16-harmonic16-dark] .hljs-punctuation,[theme=base16-harmonic16-dark] .hljs-subst{color:#cbd6e2}[theme=base16-harmonic16-dark] .hljs-operator{opacity:.7}[theme=base16-harmonic16-dark] .hljs-bullet,[theme=base16-harmonic16-dark] .hljs-deletion,[theme=base16-harmonic16-dark] .hljs-name,[theme=base16-harmonic16-dark] .hljs-selector-tag,[theme=base16-harmonic16-dark] .hljs-template-variable,[theme=base16-harmonic16-dark] .hljs-variable{color:#bf8b56}[theme=base16-harmonic16-dark] .hljs-attr,[theme=base16-harmonic16-dark] .hljs-link,[theme=base16-harmonic16-dark] .hljs-literal,[theme=base16-harmonic16-dark] .hljs-number,[theme=base16-harmonic16-dark] .hljs-symbol,[theme=base16-harmonic16-dark] .hljs-variable.constant_{color:#bfbf56}[theme=base16-harmonic16-dark] .hljs-class .hljs-title,[theme=base16-harmonic16-dark] .hljs-title,[theme=base16-harmonic16-dark] .hljs-title.class_{color:#8bbf56}[theme=base16-harmonic16-dark] .hljs-strong{font-weight:700;color:#8bbf56}[theme=base16-harmonic16-dark] .hljs-addition,[theme=base16-harmonic16-dark] .hljs-code,[theme=base16-harmonic16-dark] .hljs-string,[theme=base16-harmonic16-dark] .hljs-title.class_.inherited__{color:#56bf8b}[theme=base16-harmonic16-dark] .hljs-built_in,[theme=base16-harmonic16-dark] .hljs-doctag,[theme=base16-harmonic16-dark] .hljs-keyword.hljs-atrule,[theme=base16-harmonic16-dark] .hljs-quote,[theme=base16-harmonic16-dark] .hljs-regexp{color:#568bbf}[theme=base16-harmonic16-dark] .hljs-attribute,[theme=base16-harmonic16-dark] .hljs-function .hljs-title,[theme=base16-harmonic16-dark] .hljs-section,[theme=base16-harmonic16-dark] .hljs-title.function_,[theme=base16-harmonic16-dark] .ruby .hljs-property{color:#8b56bf}[theme=base16-harmonic16-dark] .diff .hljs-meta,[theme=base16-harmonic16-dark] .hljs-keyword,[theme=base16-harmonic16-dark] .hljs-template-tag,[theme=base16-harmonic16-dark] .hljs-type{color:#bf568b}[theme=base16-harmonic16-dark] .hljs-emphasis{color:#bf568b;font-style:italic}[theme=base16-harmonic16-dark] .hljs-meta,[theme=base16-harmonic16-dark] .hljs-meta .hljs-keyword,[theme=base16-harmonic16-dark] .hljs-meta .hljs-string{color:#bf5656}[theme=base16-harmonic16-dark] .hljs-meta .hljs-keyword,[theme=base16-harmonic16-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-harmonic16-light]{ + /*! + Theme: Harmonic16 Light + Author: Jannik Siebert (https://github.com/janniks) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-harmonic16-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-harmonic16-light] code.hljs{padding:3px 5px}[theme=base16-harmonic16-light] .hljs{color:#405c79;background:#f7f9fb}[theme=base16-harmonic16-light] .hljs ::-moz-selection,[theme=base16-harmonic16-light] .hljs::-moz-selection{background-color:#cbd6e2;color:#405c79}[theme=base16-harmonic16-light] .hljs ::selection,[theme=base16-harmonic16-light] .hljs::selection{background-color:#cbd6e2;color:#405c79}[theme=base16-harmonic16-light] .hljs-comment{color:#aabcce}[theme=base16-harmonic16-light] .hljs-tag{color:#627e99}[theme=base16-harmonic16-light] .hljs-operator,[theme=base16-harmonic16-light] .hljs-punctuation,[theme=base16-harmonic16-light] .hljs-subst{color:#405c79}[theme=base16-harmonic16-light] .hljs-operator{opacity:.7}[theme=base16-harmonic16-light] .hljs-bullet,[theme=base16-harmonic16-light] .hljs-deletion,[theme=base16-harmonic16-light] .hljs-name,[theme=base16-harmonic16-light] .hljs-selector-tag,[theme=base16-harmonic16-light] .hljs-template-variable,[theme=base16-harmonic16-light] .hljs-variable{color:#bf8b56}[theme=base16-harmonic16-light] .hljs-attr,[theme=base16-harmonic16-light] .hljs-link,[theme=base16-harmonic16-light] .hljs-literal,[theme=base16-harmonic16-light] .hljs-number,[theme=base16-harmonic16-light] .hljs-symbol,[theme=base16-harmonic16-light] .hljs-variable.constant_{color:#bfbf56}[theme=base16-harmonic16-light] .hljs-class .hljs-title,[theme=base16-harmonic16-light] .hljs-title,[theme=base16-harmonic16-light] .hljs-title.class_{color:#8bbf56}[theme=base16-harmonic16-light] .hljs-strong{font-weight:700;color:#8bbf56}[theme=base16-harmonic16-light] .hljs-addition,[theme=base16-harmonic16-light] .hljs-code,[theme=base16-harmonic16-light] .hljs-string,[theme=base16-harmonic16-light] .hljs-title.class_.inherited__{color:#56bf8b}[theme=base16-harmonic16-light] .hljs-built_in,[theme=base16-harmonic16-light] .hljs-doctag,[theme=base16-harmonic16-light] .hljs-keyword.hljs-atrule,[theme=base16-harmonic16-light] .hljs-quote,[theme=base16-harmonic16-light] .hljs-regexp{color:#568bbf}[theme=base16-harmonic16-light] .hljs-attribute,[theme=base16-harmonic16-light] .hljs-function .hljs-title,[theme=base16-harmonic16-light] .hljs-section,[theme=base16-harmonic16-light] .hljs-title.function_,[theme=base16-harmonic16-light] .ruby .hljs-property{color:#8b56bf}[theme=base16-harmonic16-light] .diff .hljs-meta,[theme=base16-harmonic16-light] .hljs-keyword,[theme=base16-harmonic16-light] .hljs-template-tag,[theme=base16-harmonic16-light] .hljs-type{color:#bf568b}[theme=base16-harmonic16-light] .hljs-emphasis{color:#bf568b;font-style:italic}[theme=base16-harmonic16-light] .hljs-meta,[theme=base16-harmonic16-light] .hljs-meta .hljs-keyword,[theme=base16-harmonic16-light] .hljs-meta .hljs-string{color:#bf5656}[theme=base16-harmonic16-light] .hljs-meta .hljs-keyword,[theme=base16-harmonic16-light] .hljs-meta-keyword{font-weight:700}[theme=base16-heetch-dark]{ + /*! + Theme: Heetch Dark + Author: Geoffrey Teale (tealeg@gmail.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-heetch-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-heetch-dark] code.hljs{padding:3px 5px}[theme=base16-heetch-dark] .hljs{color:#bdb6c5;background:#190134}[theme=base16-heetch-dark] .hljs ::-moz-selection,[theme=base16-heetch-dark] .hljs::-moz-selection{background-color:#5a496e;color:#bdb6c5}[theme=base16-heetch-dark] .hljs ::selection,[theme=base16-heetch-dark] .hljs::selection{background-color:#5a496e;color:#bdb6c5}[theme=base16-heetch-dark] .hljs-comment{color:#7b6d8b}[theme=base16-heetch-dark] .hljs-tag{color:#9c92a8}[theme=base16-heetch-dark] .hljs-operator,[theme=base16-heetch-dark] .hljs-punctuation,[theme=base16-heetch-dark] .hljs-subst{color:#bdb6c5}[theme=base16-heetch-dark] .hljs-operator{opacity:.7}[theme=base16-heetch-dark] .hljs-bullet,[theme=base16-heetch-dark] .hljs-deletion,[theme=base16-heetch-dark] .hljs-name,[theme=base16-heetch-dark] .hljs-selector-tag,[theme=base16-heetch-dark] .hljs-template-variable,[theme=base16-heetch-dark] .hljs-variable{color:#27d9d5}[theme=base16-heetch-dark] .hljs-attr,[theme=base16-heetch-dark] .hljs-link,[theme=base16-heetch-dark] .hljs-literal,[theme=base16-heetch-dark] .hljs-number,[theme=base16-heetch-dark] .hljs-symbol,[theme=base16-heetch-dark] .hljs-variable.constant_{color:#5ba2b6}[theme=base16-heetch-dark] .hljs-class .hljs-title,[theme=base16-heetch-dark] .hljs-title,[theme=base16-heetch-dark] .hljs-title.class_{color:#8f6c97}[theme=base16-heetch-dark] .hljs-strong{font-weight:700;color:#8f6c97}[theme=base16-heetch-dark] .hljs-addition,[theme=base16-heetch-dark] .hljs-code,[theme=base16-heetch-dark] .hljs-string,[theme=base16-heetch-dark] .hljs-title.class_.inherited__{color:#c33678}[theme=base16-heetch-dark] .hljs-built_in,[theme=base16-heetch-dark] .hljs-doctag,[theme=base16-heetch-dark] .hljs-keyword.hljs-atrule,[theme=base16-heetch-dark] .hljs-quote,[theme=base16-heetch-dark] .hljs-regexp{color:#f80059}[theme=base16-heetch-dark] .hljs-attribute,[theme=base16-heetch-dark] .hljs-function .hljs-title,[theme=base16-heetch-dark] .hljs-section,[theme=base16-heetch-dark] .hljs-title.function_,[theme=base16-heetch-dark] .ruby .hljs-property{color:#bd0152}[theme=base16-heetch-dark] .diff .hljs-meta,[theme=base16-heetch-dark] .hljs-keyword,[theme=base16-heetch-dark] .hljs-template-tag,[theme=base16-heetch-dark] .hljs-type{color:#82034c}[theme=base16-heetch-dark] .hljs-emphasis{color:#82034c;font-style:italic}[theme=base16-heetch-dark] .hljs-meta,[theme=base16-heetch-dark] .hljs-meta .hljs-keyword,[theme=base16-heetch-dark] .hljs-meta .hljs-string{color:#470546}[theme=base16-heetch-dark] .hljs-meta .hljs-keyword,[theme=base16-heetch-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-heetch-light]{ + /*! + Theme: Heetch Light + Author: Geoffrey Teale (tealeg@gmail.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-heetch-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-heetch-light] code.hljs{padding:3px 5px}[theme=base16-heetch-light] .hljs{color:#5a496e;background:#feffff}[theme=base16-heetch-light] .hljs ::-moz-selection,[theme=base16-heetch-light] .hljs::-moz-selection{background-color:#7b6d8b;color:#5a496e}[theme=base16-heetch-light] .hljs ::selection,[theme=base16-heetch-light] .hljs::selection{background-color:#7b6d8b;color:#5a496e}[theme=base16-heetch-light] .hljs-comment{color:#9c92a8}[theme=base16-heetch-light] .hljs-tag{color:#ddd6e5}[theme=base16-heetch-light] .hljs-operator,[theme=base16-heetch-light] .hljs-punctuation,[theme=base16-heetch-light] .hljs-subst{color:#5a496e}[theme=base16-heetch-light] .hljs-operator{opacity:.7}[theme=base16-heetch-light] .hljs-bullet,[theme=base16-heetch-light] .hljs-deletion,[theme=base16-heetch-light] .hljs-name,[theme=base16-heetch-light] .hljs-selector-tag,[theme=base16-heetch-light] .hljs-template-variable,[theme=base16-heetch-light] .hljs-variable{color:#27d9d5}[theme=base16-heetch-light] .hljs-attr,[theme=base16-heetch-light] .hljs-link,[theme=base16-heetch-light] .hljs-literal,[theme=base16-heetch-light] .hljs-number,[theme=base16-heetch-light] .hljs-symbol,[theme=base16-heetch-light] .hljs-variable.constant_{color:#bdb6c5}[theme=base16-heetch-light] .hljs-class .hljs-title,[theme=base16-heetch-light] .hljs-title,[theme=base16-heetch-light] .hljs-title.class_{color:#5ba2b6}[theme=base16-heetch-light] .hljs-strong{font-weight:700;color:#5ba2b6}[theme=base16-heetch-light] .hljs-addition,[theme=base16-heetch-light] .hljs-code,[theme=base16-heetch-light] .hljs-string,[theme=base16-heetch-light] .hljs-title.class_.inherited__{color:#f80059}[theme=base16-heetch-light] .hljs-built_in,[theme=base16-heetch-light] .hljs-doctag,[theme=base16-heetch-light] .hljs-keyword.hljs-atrule,[theme=base16-heetch-light] .hljs-quote,[theme=base16-heetch-light] .hljs-regexp{color:#c33678}[theme=base16-heetch-light] .hljs-attribute,[theme=base16-heetch-light] .hljs-function .hljs-title,[theme=base16-heetch-light] .hljs-section,[theme=base16-heetch-light] .hljs-title.function_,[theme=base16-heetch-light] .ruby .hljs-property{color:#47f9f5}[theme=base16-heetch-light] .diff .hljs-meta,[theme=base16-heetch-light] .hljs-keyword,[theme=base16-heetch-light] .hljs-template-tag,[theme=base16-heetch-light] .hljs-type{color:#bd0152}[theme=base16-heetch-light] .hljs-emphasis{color:#bd0152;font-style:italic}[theme=base16-heetch-light] .hljs-meta,[theme=base16-heetch-light] .hljs-meta .hljs-keyword,[theme=base16-heetch-light] .hljs-meta .hljs-string{color:#dedae2}[theme=base16-heetch-light] .hljs-meta .hljs-keyword,[theme=base16-heetch-light] .hljs-meta-keyword{font-weight:700}[theme=base16-helios]{ + /*! + Theme: Helios + Author: Alex Meyer (https://github.com/reyemxela) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-helios] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-helios] code.hljs{padding:3px 5px}[theme=base16-helios] .hljs{color:#d5d5d5;background:#1d2021}[theme=base16-helios] .hljs ::-moz-selection,[theme=base16-helios] .hljs::-moz-selection{background-color:#53585b;color:#d5d5d5}[theme=base16-helios] .hljs ::selection,[theme=base16-helios] .hljs::selection{background-color:#53585b;color:#d5d5d5}[theme=base16-helios] .hljs-comment{color:#6f7579}[theme=base16-helios] .hljs-tag{color:#cdcdcd}[theme=base16-helios] .hljs-operator,[theme=base16-helios] .hljs-punctuation,[theme=base16-helios] .hljs-subst{color:#d5d5d5}[theme=base16-helios] .hljs-operator{opacity:.7}[theme=base16-helios] .hljs-bullet,[theme=base16-helios] .hljs-deletion,[theme=base16-helios] .hljs-name,[theme=base16-helios] .hljs-selector-tag,[theme=base16-helios] .hljs-template-variable,[theme=base16-helios] .hljs-variable{color:#d72638}[theme=base16-helios] .hljs-attr,[theme=base16-helios] .hljs-link,[theme=base16-helios] .hljs-literal,[theme=base16-helios] .hljs-number,[theme=base16-helios] .hljs-symbol,[theme=base16-helios] .hljs-variable.constant_{color:#eb8413}[theme=base16-helios] .hljs-class .hljs-title,[theme=base16-helios] .hljs-title,[theme=base16-helios] .hljs-title.class_{color:#f19d1a}[theme=base16-helios] .hljs-strong{font-weight:700;color:#f19d1a}[theme=base16-helios] .hljs-addition,[theme=base16-helios] .hljs-code,[theme=base16-helios] .hljs-string,[theme=base16-helios] .hljs-title.class_.inherited__{color:#88b92d}[theme=base16-helios] .hljs-built_in,[theme=base16-helios] .hljs-doctag,[theme=base16-helios] .hljs-keyword.hljs-atrule,[theme=base16-helios] .hljs-quote,[theme=base16-helios] .hljs-regexp{color:#1ba595}[theme=base16-helios] .hljs-attribute,[theme=base16-helios] .hljs-function .hljs-title,[theme=base16-helios] .hljs-section,[theme=base16-helios] .hljs-title.function_,[theme=base16-helios] .ruby .hljs-property{color:#1e8bac}[theme=base16-helios] .diff .hljs-meta,[theme=base16-helios] .hljs-keyword,[theme=base16-helios] .hljs-template-tag,[theme=base16-helios] .hljs-type{color:#be4264}[theme=base16-helios] .hljs-emphasis{color:#be4264;font-style:italic}[theme=base16-helios] .hljs-meta,[theme=base16-helios] .hljs-meta .hljs-keyword,[theme=base16-helios] .hljs-meta .hljs-string{color:#c85e0d}[theme=base16-helios] .hljs-meta .hljs-keyword,[theme=base16-helios] .hljs-meta-keyword{font-weight:700}[theme=base16-hopscotch]{ + /*! + Theme: Hopscotch + Author: Jan T. Sott + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-hopscotch] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-hopscotch] code.hljs{padding:3px 5px}[theme=base16-hopscotch] .hljs{color:#b9b5b8;background:#322931}[theme=base16-hopscotch] .hljs ::-moz-selection,[theme=base16-hopscotch] .hljs::-moz-selection{background-color:#5c545b;color:#b9b5b8}[theme=base16-hopscotch] .hljs ::selection,[theme=base16-hopscotch] .hljs::selection{background-color:#5c545b;color:#b9b5b8}[theme=base16-hopscotch] .hljs-comment{color:#797379}[theme=base16-hopscotch] .hljs-tag{color:#989498}[theme=base16-hopscotch] .hljs-operator,[theme=base16-hopscotch] .hljs-punctuation,[theme=base16-hopscotch] .hljs-subst{color:#b9b5b8}[theme=base16-hopscotch] .hljs-operator{opacity:.7}[theme=base16-hopscotch] .hljs-bullet,[theme=base16-hopscotch] .hljs-deletion,[theme=base16-hopscotch] .hljs-name,[theme=base16-hopscotch] .hljs-selector-tag,[theme=base16-hopscotch] .hljs-template-variable,[theme=base16-hopscotch] .hljs-variable{color:#dd464c}[theme=base16-hopscotch] .hljs-attr,[theme=base16-hopscotch] .hljs-link,[theme=base16-hopscotch] .hljs-literal,[theme=base16-hopscotch] .hljs-number,[theme=base16-hopscotch] .hljs-symbol,[theme=base16-hopscotch] .hljs-variable.constant_{color:#fd8b19}[theme=base16-hopscotch] .hljs-class .hljs-title,[theme=base16-hopscotch] .hljs-title,[theme=base16-hopscotch] .hljs-title.class_{color:#fdcc59}[theme=base16-hopscotch] .hljs-strong{font-weight:700;color:#fdcc59}[theme=base16-hopscotch] .hljs-addition,[theme=base16-hopscotch] .hljs-code,[theme=base16-hopscotch] .hljs-string,[theme=base16-hopscotch] .hljs-title.class_.inherited__{color:#8fc13e}[theme=base16-hopscotch] .hljs-built_in,[theme=base16-hopscotch] .hljs-doctag,[theme=base16-hopscotch] .hljs-keyword.hljs-atrule,[theme=base16-hopscotch] .hljs-quote,[theme=base16-hopscotch] .hljs-regexp{color:#149b93}[theme=base16-hopscotch] .hljs-attribute,[theme=base16-hopscotch] .hljs-function .hljs-title,[theme=base16-hopscotch] .hljs-section,[theme=base16-hopscotch] .hljs-title.function_,[theme=base16-hopscotch] .ruby .hljs-property{color:#1290bf}[theme=base16-hopscotch] .diff .hljs-meta,[theme=base16-hopscotch] .hljs-keyword,[theme=base16-hopscotch] .hljs-template-tag,[theme=base16-hopscotch] .hljs-type{color:#c85e7c}[theme=base16-hopscotch] .hljs-emphasis{color:#c85e7c;font-style:italic}[theme=base16-hopscotch] .hljs-meta,[theme=base16-hopscotch] .hljs-meta .hljs-keyword,[theme=base16-hopscotch] .hljs-meta .hljs-string{color:#b33508}[theme=base16-hopscotch] .hljs-meta .hljs-keyword,[theme=base16-hopscotch] .hljs-meta-keyword{font-weight:700}[theme=base16-horizon-dark]{ + /*! + Theme: Horizon Dark + Author: Michaël Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-horizon-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-horizon-dark] code.hljs{padding:3px 5px}[theme=base16-horizon-dark] .hljs{color:#cbced0;background:#1c1e26}[theme=base16-horizon-dark] .hljs ::-moz-selection,[theme=base16-horizon-dark] .hljs::-moz-selection{background-color:#2e303e;color:#cbced0}[theme=base16-horizon-dark] .hljs ::selection,[theme=base16-horizon-dark] .hljs::selection{background-color:#2e303e;color:#cbced0}[theme=base16-horizon-dark] .hljs-comment{color:#6f6f70}[theme=base16-horizon-dark] .hljs-tag{color:#9da0a2}[theme=base16-horizon-dark] .hljs-operator,[theme=base16-horizon-dark] .hljs-punctuation,[theme=base16-horizon-dark] .hljs-subst{color:#cbced0}[theme=base16-horizon-dark] .hljs-operator{opacity:.7}[theme=base16-horizon-dark] .hljs-bullet,[theme=base16-horizon-dark] .hljs-deletion,[theme=base16-horizon-dark] .hljs-name,[theme=base16-horizon-dark] .hljs-selector-tag,[theme=base16-horizon-dark] .hljs-template-variable,[theme=base16-horizon-dark] .hljs-variable{color:#e93c58}[theme=base16-horizon-dark] .hljs-attr,[theme=base16-horizon-dark] .hljs-link,[theme=base16-horizon-dark] .hljs-literal,[theme=base16-horizon-dark] .hljs-number,[theme=base16-horizon-dark] .hljs-symbol,[theme=base16-horizon-dark] .hljs-variable.constant_{color:#e58d7d}[theme=base16-horizon-dark] .hljs-class .hljs-title,[theme=base16-horizon-dark] .hljs-title,[theme=base16-horizon-dark] .hljs-title.class_{color:#efb993}[theme=base16-horizon-dark] .hljs-strong{font-weight:700;color:#efb993}[theme=base16-horizon-dark] .hljs-addition,[theme=base16-horizon-dark] .hljs-code,[theme=base16-horizon-dark] .hljs-string,[theme=base16-horizon-dark] .hljs-title.class_.inherited__{color:#efaf8e}[theme=base16-horizon-dark] .hljs-built_in,[theme=base16-horizon-dark] .hljs-doctag,[theme=base16-horizon-dark] .hljs-keyword.hljs-atrule,[theme=base16-horizon-dark] .hljs-quote,[theme=base16-horizon-dark] .hljs-regexp{color:#24a8b4}[theme=base16-horizon-dark] .hljs-attribute,[theme=base16-horizon-dark] .hljs-function .hljs-title,[theme=base16-horizon-dark] .hljs-section,[theme=base16-horizon-dark] .hljs-title.function_,[theme=base16-horizon-dark] .ruby .hljs-property{color:#df5273}[theme=base16-horizon-dark] .diff .hljs-meta,[theme=base16-horizon-dark] .hljs-keyword,[theme=base16-horizon-dark] .hljs-template-tag,[theme=base16-horizon-dark] .hljs-type{color:#b072d1}[theme=base16-horizon-dark] .hljs-emphasis{color:#b072d1;font-style:italic}[theme=base16-horizon-dark] .hljs-meta,[theme=base16-horizon-dark] .hljs-meta .hljs-keyword,[theme=base16-horizon-dark] .hljs-meta .hljs-string{color:#e4a382}[theme=base16-horizon-dark] .hljs-meta .hljs-keyword,[theme=base16-horizon-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-horizon-light]{ + /*! + Theme: Horizon Light + Author: Michaël Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-horizon-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-horizon-light] code.hljs{padding:3px 5px}[theme=base16-horizon-light] .hljs{color:#403c3d;background:#fdf0ed}[theme=base16-horizon-light] .hljs ::-moz-selection,[theme=base16-horizon-light] .hljs::-moz-selection{background-color:#f9cbbe;color:#403c3d}[theme=base16-horizon-light] .hljs ::selection,[theme=base16-horizon-light] .hljs::selection{background-color:#f9cbbe;color:#403c3d}[theme=base16-horizon-light] .hljs-comment{color:#bdb3b1}[theme=base16-horizon-light] .hljs-tag{color:#948c8a}[theme=base16-horizon-light] .hljs-operator,[theme=base16-horizon-light] .hljs-punctuation,[theme=base16-horizon-light] .hljs-subst{color:#403c3d}[theme=base16-horizon-light] .hljs-operator{opacity:.7}[theme=base16-horizon-light] .hljs-bullet,[theme=base16-horizon-light] .hljs-deletion,[theme=base16-horizon-light] .hljs-name,[theme=base16-horizon-light] .hljs-selector-tag,[theme=base16-horizon-light] .hljs-template-variable,[theme=base16-horizon-light] .hljs-variable{color:#e95678}[theme=base16-horizon-light] .hljs-attr,[theme=base16-horizon-light] .hljs-link,[theme=base16-horizon-light] .hljs-literal,[theme=base16-horizon-light] .hljs-number,[theme=base16-horizon-light] .hljs-symbol,[theme=base16-horizon-light] .hljs-variable.constant_{color:#f9cec3}[theme=base16-horizon-light] .hljs-class .hljs-title,[theme=base16-horizon-light] .hljs-title,[theme=base16-horizon-light] .hljs-title.class_{color:#fadad1}[theme=base16-horizon-light] .hljs-strong{font-weight:700;color:#fadad1}[theme=base16-horizon-light] .hljs-addition,[theme=base16-horizon-light] .hljs-code,[theme=base16-horizon-light] .hljs-string,[theme=base16-horizon-light] .hljs-title.class_.inherited__{color:#29d398}[theme=base16-horizon-light] .hljs-built_in,[theme=base16-horizon-light] .hljs-doctag,[theme=base16-horizon-light] .hljs-keyword.hljs-atrule,[theme=base16-horizon-light] .hljs-quote,[theme=base16-horizon-light] .hljs-regexp{color:#59e1e3}[theme=base16-horizon-light] .hljs-attribute,[theme=base16-horizon-light] .hljs-function .hljs-title,[theme=base16-horizon-light] .hljs-section,[theme=base16-horizon-light] .hljs-title.function_,[theme=base16-horizon-light] .ruby .hljs-property{color:#26bbd9}[theme=base16-horizon-light] .diff .hljs-meta,[theme=base16-horizon-light] .hljs-keyword,[theme=base16-horizon-light] .hljs-template-tag,[theme=base16-horizon-light] .hljs-type{color:#ee64ac}[theme=base16-horizon-light] .hljs-emphasis{color:#ee64ac;font-style:italic}[theme=base16-horizon-light] .hljs-meta,[theme=base16-horizon-light] .hljs-meta .hljs-keyword,[theme=base16-horizon-light] .hljs-meta .hljs-string{color:#f9cbbe}[theme=base16-horizon-light] .hljs-meta .hljs-keyword,[theme=base16-horizon-light] .hljs-meta-keyword{font-weight:700}[theme=base16-humanoid-dark]{ + /*! + Theme: Humanoid dark + Author: Thomas (tasmo) Friese + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-humanoid-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-humanoid-dark] code.hljs{padding:3px 5px}[theme=base16-humanoid-dark] .hljs{color:#f8f8f2;background:#232629}[theme=base16-humanoid-dark] .hljs ::-moz-selection,[theme=base16-humanoid-dark] .hljs::-moz-selection{background-color:#484e54;color:#f8f8f2}[theme=base16-humanoid-dark] .hljs ::selection,[theme=base16-humanoid-dark] .hljs::selection{background-color:#484e54;color:#f8f8f2}[theme=base16-humanoid-dark] .hljs-comment{color:#60615d}[theme=base16-humanoid-dark] .hljs-tag{color:#c0c0bd}[theme=base16-humanoid-dark] .hljs-operator,[theme=base16-humanoid-dark] .hljs-punctuation,[theme=base16-humanoid-dark] .hljs-subst{color:#f8f8f2}[theme=base16-humanoid-dark] .hljs-operator{opacity:.7}[theme=base16-humanoid-dark] .hljs-bullet,[theme=base16-humanoid-dark] .hljs-deletion,[theme=base16-humanoid-dark] .hljs-name,[theme=base16-humanoid-dark] .hljs-selector-tag,[theme=base16-humanoid-dark] .hljs-template-variable,[theme=base16-humanoid-dark] .hljs-variable{color:#f11235}[theme=base16-humanoid-dark] .hljs-attr,[theme=base16-humanoid-dark] .hljs-link,[theme=base16-humanoid-dark] .hljs-literal,[theme=base16-humanoid-dark] .hljs-number,[theme=base16-humanoid-dark] .hljs-symbol,[theme=base16-humanoid-dark] .hljs-variable.constant_{color:#ff9505}[theme=base16-humanoid-dark] .hljs-class .hljs-title,[theme=base16-humanoid-dark] .hljs-title,[theme=base16-humanoid-dark] .hljs-title.class_{color:#ffb627}[theme=base16-humanoid-dark] .hljs-strong{font-weight:700;color:#ffb627}[theme=base16-humanoid-dark] .hljs-addition,[theme=base16-humanoid-dark] .hljs-code,[theme=base16-humanoid-dark] .hljs-string,[theme=base16-humanoid-dark] .hljs-title.class_.inherited__{color:#02d849}[theme=base16-humanoid-dark] .hljs-built_in,[theme=base16-humanoid-dark] .hljs-doctag,[theme=base16-humanoid-dark] .hljs-keyword.hljs-atrule,[theme=base16-humanoid-dark] .hljs-quote,[theme=base16-humanoid-dark] .hljs-regexp{color:#0dd9d6}[theme=base16-humanoid-dark] .hljs-attribute,[theme=base16-humanoid-dark] .hljs-function .hljs-title,[theme=base16-humanoid-dark] .hljs-section,[theme=base16-humanoid-dark] .hljs-title.function_,[theme=base16-humanoid-dark] .ruby .hljs-property{color:#00a6fb}[theme=base16-humanoid-dark] .diff .hljs-meta,[theme=base16-humanoid-dark] .hljs-keyword,[theme=base16-humanoid-dark] .hljs-template-tag,[theme=base16-humanoid-dark] .hljs-type{color:#f15ee3}[theme=base16-humanoid-dark] .hljs-emphasis{color:#f15ee3;font-style:italic}[theme=base16-humanoid-dark] .hljs-meta,[theme=base16-humanoid-dark] .hljs-meta .hljs-keyword,[theme=base16-humanoid-dark] .hljs-meta .hljs-string{color:#b27701}[theme=base16-humanoid-dark] .hljs-meta .hljs-keyword,[theme=base16-humanoid-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-humanoid-light]{ + /*! + Theme: Humanoid light + Author: Thomas (tasmo) Friese + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-humanoid-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-humanoid-light] code.hljs{padding:3px 5px}[theme=base16-humanoid-light] .hljs{color:#232629;background:#f8f8f2}[theme=base16-humanoid-light] .hljs ::-moz-selection,[theme=base16-humanoid-light] .hljs::-moz-selection{background-color:#deded8;color:#232629}[theme=base16-humanoid-light] .hljs ::selection,[theme=base16-humanoid-light] .hljs::selection{background-color:#deded8;color:#232629}[theme=base16-humanoid-light] .hljs-comment{color:#c0c0bd}[theme=base16-humanoid-light] .hljs-tag{color:#60615d}[theme=base16-humanoid-light] .hljs-operator,[theme=base16-humanoid-light] .hljs-punctuation,[theme=base16-humanoid-light] .hljs-subst{color:#232629}[theme=base16-humanoid-light] .hljs-operator{opacity:.7}[theme=base16-humanoid-light] .hljs-bullet,[theme=base16-humanoid-light] .hljs-deletion,[theme=base16-humanoid-light] .hljs-name,[theme=base16-humanoid-light] .hljs-selector-tag,[theme=base16-humanoid-light] .hljs-template-variable,[theme=base16-humanoid-light] .hljs-variable{color:#b0151a}[theme=base16-humanoid-light] .hljs-attr,[theme=base16-humanoid-light] .hljs-link,[theme=base16-humanoid-light] .hljs-literal,[theme=base16-humanoid-light] .hljs-number,[theme=base16-humanoid-light] .hljs-symbol,[theme=base16-humanoid-light] .hljs-variable.constant_{color:#ff3d00}[theme=base16-humanoid-light] .hljs-class .hljs-title,[theme=base16-humanoid-light] .hljs-title,[theme=base16-humanoid-light] .hljs-title.class_{color:#ffb627}[theme=base16-humanoid-light] .hljs-strong{font-weight:700;color:#ffb627}[theme=base16-humanoid-light] .hljs-addition,[theme=base16-humanoid-light] .hljs-code,[theme=base16-humanoid-light] .hljs-string,[theme=base16-humanoid-light] .hljs-title.class_.inherited__{color:#388e3c}[theme=base16-humanoid-light] .hljs-built_in,[theme=base16-humanoid-light] .hljs-doctag,[theme=base16-humanoid-light] .hljs-keyword.hljs-atrule,[theme=base16-humanoid-light] .hljs-quote,[theme=base16-humanoid-light] .hljs-regexp{color:#008e8e}[theme=base16-humanoid-light] .hljs-attribute,[theme=base16-humanoid-light] .hljs-function .hljs-title,[theme=base16-humanoid-light] .hljs-section,[theme=base16-humanoid-light] .hljs-title.function_,[theme=base16-humanoid-light] .ruby .hljs-property{color:#0082c9}[theme=base16-humanoid-light] .diff .hljs-meta,[theme=base16-humanoid-light] .hljs-keyword,[theme=base16-humanoid-light] .hljs-template-tag,[theme=base16-humanoid-light] .hljs-type{color:#700f98}[theme=base16-humanoid-light] .hljs-emphasis{color:#700f98;font-style:italic}[theme=base16-humanoid-light] .hljs-meta,[theme=base16-humanoid-light] .hljs-meta .hljs-keyword,[theme=base16-humanoid-light] .hljs-meta .hljs-string{color:#b27701}[theme=base16-humanoid-light] .hljs-meta .hljs-keyword,[theme=base16-humanoid-light] .hljs-meta-keyword{font-weight:700}[theme=base16-ia-dark]{ + /*! + Theme: iA Dark + Author: iA Inc. (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ia-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ia-dark] code.hljs{padding:3px 5px}[theme=base16-ia-dark] .hljs{color:#ccc;background:#1a1a1a}[theme=base16-ia-dark] .hljs ::-moz-selection,[theme=base16-ia-dark] .hljs::-moz-selection{background-color:#1d414d;color:#ccc}[theme=base16-ia-dark] .hljs ::selection,[theme=base16-ia-dark] .hljs::selection{background-color:#1d414d;color:#ccc}[theme=base16-ia-dark] .hljs-comment{color:#767676}[theme=base16-ia-dark] .hljs-tag{color:#b8b8b8}[theme=base16-ia-dark] .hljs-operator,[theme=base16-ia-dark] .hljs-punctuation,[theme=base16-ia-dark] .hljs-subst{color:#ccc}[theme=base16-ia-dark] .hljs-operator{opacity:.7}[theme=base16-ia-dark] .hljs-bullet,[theme=base16-ia-dark] .hljs-deletion,[theme=base16-ia-dark] .hljs-name,[theme=base16-ia-dark] .hljs-selector-tag,[theme=base16-ia-dark] .hljs-template-variable,[theme=base16-ia-dark] .hljs-variable{color:#d88568}[theme=base16-ia-dark] .hljs-attr,[theme=base16-ia-dark] .hljs-link,[theme=base16-ia-dark] .hljs-literal,[theme=base16-ia-dark] .hljs-number,[theme=base16-ia-dark] .hljs-symbol,[theme=base16-ia-dark] .hljs-variable.constant_{color:#d86868}[theme=base16-ia-dark] .hljs-class .hljs-title,[theme=base16-ia-dark] .hljs-title,[theme=base16-ia-dark] .hljs-title.class_{color:#b99353}[theme=base16-ia-dark] .hljs-strong{font-weight:700;color:#b99353}[theme=base16-ia-dark] .hljs-addition,[theme=base16-ia-dark] .hljs-code,[theme=base16-ia-dark] .hljs-string,[theme=base16-ia-dark] .hljs-title.class_.inherited__{color:#83a471}[theme=base16-ia-dark] .hljs-built_in,[theme=base16-ia-dark] .hljs-doctag,[theme=base16-ia-dark] .hljs-keyword.hljs-atrule,[theme=base16-ia-dark] .hljs-quote,[theme=base16-ia-dark] .hljs-regexp{color:#7c9cae}[theme=base16-ia-dark] .hljs-attribute,[theme=base16-ia-dark] .hljs-function .hljs-title,[theme=base16-ia-dark] .hljs-section,[theme=base16-ia-dark] .hljs-title.function_,[theme=base16-ia-dark] .ruby .hljs-property{color:#8eccdd}[theme=base16-ia-dark] .diff .hljs-meta,[theme=base16-ia-dark] .hljs-keyword,[theme=base16-ia-dark] .hljs-template-tag,[theme=base16-ia-dark] .hljs-type{color:#b98eb2}[theme=base16-ia-dark] .hljs-emphasis{color:#b98eb2;font-style:italic}[theme=base16-ia-dark] .hljs-meta,[theme=base16-ia-dark] .hljs-meta .hljs-keyword,[theme=base16-ia-dark] .hljs-meta .hljs-string{color:#8b6c37}[theme=base16-ia-dark] .hljs-meta .hljs-keyword,[theme=base16-ia-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-ia-light]{ + /*! + Theme: iA Light + Author: iA Inc. (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ia-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ia-light] code.hljs{padding:3px 5px}[theme=base16-ia-light] .hljs{color:#181818;background:#f6f6f6}[theme=base16-ia-light] .hljs ::-moz-selection,[theme=base16-ia-light] .hljs::-moz-selection{background-color:#bde5f2;color:#181818}[theme=base16-ia-light] .hljs ::selection,[theme=base16-ia-light] .hljs::selection{background-color:#bde5f2;color:#181818}[theme=base16-ia-light] .hljs-comment{color:#898989}[theme=base16-ia-light] .hljs-tag{color:#767676}[theme=base16-ia-light] .hljs-operator,[theme=base16-ia-light] .hljs-punctuation,[theme=base16-ia-light] .hljs-subst{color:#181818}[theme=base16-ia-light] .hljs-operator{opacity:.7}[theme=base16-ia-light] .hljs-bullet,[theme=base16-ia-light] .hljs-deletion,[theme=base16-ia-light] .hljs-name,[theme=base16-ia-light] .hljs-selector-tag,[theme=base16-ia-light] .hljs-template-variable,[theme=base16-ia-light] .hljs-variable{color:#9c5a02}[theme=base16-ia-light] .hljs-attr,[theme=base16-ia-light] .hljs-link,[theme=base16-ia-light] .hljs-literal,[theme=base16-ia-light] .hljs-number,[theme=base16-ia-light] .hljs-symbol,[theme=base16-ia-light] .hljs-variable.constant_{color:#c43e18}[theme=base16-ia-light] .hljs-class .hljs-title,[theme=base16-ia-light] .hljs-title,[theme=base16-ia-light] .hljs-title.class_{color:#c48218}[theme=base16-ia-light] .hljs-strong{font-weight:700;color:#c48218}[theme=base16-ia-light] .hljs-addition,[theme=base16-ia-light] .hljs-code,[theme=base16-ia-light] .hljs-string,[theme=base16-ia-light] .hljs-title.class_.inherited__{color:#38781c}[theme=base16-ia-light] .hljs-built_in,[theme=base16-ia-light] .hljs-doctag,[theme=base16-ia-light] .hljs-keyword.hljs-atrule,[theme=base16-ia-light] .hljs-quote,[theme=base16-ia-light] .hljs-regexp{color:#2d6bb1}[theme=base16-ia-light] .hljs-attribute,[theme=base16-ia-light] .hljs-function .hljs-title,[theme=base16-ia-light] .hljs-section,[theme=base16-ia-light] .hljs-title.function_,[theme=base16-ia-light] .ruby .hljs-property{color:#48bac2}[theme=base16-ia-light] .diff .hljs-meta,[theme=base16-ia-light] .hljs-keyword,[theme=base16-ia-light] .hljs-template-tag,[theme=base16-ia-light] .hljs-type{color:#a94598}[theme=base16-ia-light] .hljs-emphasis{color:#a94598;font-style:italic}[theme=base16-ia-light] .hljs-meta,[theme=base16-ia-light] .hljs-meta .hljs-keyword,[theme=base16-ia-light] .hljs-meta .hljs-string{color:#8b6c37}[theme=base16-ia-light] .hljs-meta .hljs-keyword,[theme=base16-ia-light] .hljs-meta-keyword{font-weight:700}[theme=base16-icy-dark]{ + /*! + Theme: Icy Dark + Author: icyphox (https://icyphox.ga) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-icy-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-icy-dark] code.hljs{padding:3px 5px}[theme=base16-icy-dark] .hljs{color:#095b67;background:#021012}[theme=base16-icy-dark] .hljs ::-moz-selection,[theme=base16-icy-dark] .hljs::-moz-selection{background-color:#041f23;color:#095b67}[theme=base16-icy-dark] .hljs ::selection,[theme=base16-icy-dark] .hljs::selection{background-color:#041f23;color:#095b67}[theme=base16-icy-dark] .hljs-comment{color:#052e34}[theme=base16-icy-dark] .hljs-tag{color:#064048}[theme=base16-icy-dark] .hljs-operator,[theme=base16-icy-dark] .hljs-punctuation,[theme=base16-icy-dark] .hljs-subst{color:#095b67}[theme=base16-icy-dark] .hljs-operator{opacity:.7}[theme=base16-icy-dark] .hljs-bullet,[theme=base16-icy-dark] .hljs-deletion,[theme=base16-icy-dark] .hljs-name,[theme=base16-icy-dark] .hljs-selector-tag,[theme=base16-icy-dark] .hljs-template-variable,[theme=base16-icy-dark] .hljs-variable{color:#16c1d9}[theme=base16-icy-dark] .hljs-attr,[theme=base16-icy-dark] .hljs-link,[theme=base16-icy-dark] .hljs-literal,[theme=base16-icy-dark] .hljs-number,[theme=base16-icy-dark] .hljs-symbol,[theme=base16-icy-dark] .hljs-variable.constant_{color:#b3ebf2}[theme=base16-icy-dark] .hljs-class .hljs-title,[theme=base16-icy-dark] .hljs-title,[theme=base16-icy-dark] .hljs-title.class_{color:#80deea}[theme=base16-icy-dark] .hljs-strong{font-weight:700;color:#80deea}[theme=base16-icy-dark] .hljs-addition,[theme=base16-icy-dark] .hljs-code,[theme=base16-icy-dark] .hljs-string,[theme=base16-icy-dark] .hljs-title.class_.inherited__{color:#4dd0e1}[theme=base16-icy-dark] .hljs-built_in,[theme=base16-icy-dark] .hljs-doctag,[theme=base16-icy-dark] .hljs-keyword.hljs-atrule,[theme=base16-icy-dark] .hljs-quote,[theme=base16-icy-dark] .hljs-regexp{color:#26c6da}[theme=base16-icy-dark] .hljs-attribute,[theme=base16-icy-dark] .hljs-function .hljs-title,[theme=base16-icy-dark] .hljs-section,[theme=base16-icy-dark] .hljs-title.function_,[theme=base16-icy-dark] .ruby .hljs-property{color:#00bcd4}[theme=base16-icy-dark] .diff .hljs-meta,[theme=base16-icy-dark] .hljs-keyword,[theme=base16-icy-dark] .hljs-template-tag,[theme=base16-icy-dark] .hljs-type{color:#00acc1}[theme=base16-icy-dark] .hljs-emphasis{color:#00acc1;font-style:italic}[theme=base16-icy-dark] .hljs-meta,[theme=base16-icy-dark] .hljs-meta .hljs-keyword,[theme=base16-icy-dark] .hljs-meta .hljs-string{color:#0097a7}[theme=base16-icy-dark] .hljs-meta .hljs-keyword,[theme=base16-icy-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-ir-black]{ + /*! + Theme: IR Black + Author: Timothée Poisot (http://timotheepoisot.fr) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ir-black] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ir-black] code.hljs{padding:3px 5px}[theme=base16-ir-black] .hljs{color:#b5b3aa;background:#000}[theme=base16-ir-black] .hljs ::-moz-selection,[theme=base16-ir-black] .hljs::-moz-selection{background-color:#484844;color:#b5b3aa}[theme=base16-ir-black] .hljs ::selection,[theme=base16-ir-black] .hljs::selection{background-color:#484844;color:#b5b3aa}[theme=base16-ir-black] .hljs-comment{color:#6c6c66}[theme=base16-ir-black] .hljs-tag{color:#918f88}[theme=base16-ir-black] .hljs-operator,[theme=base16-ir-black] .hljs-punctuation,[theme=base16-ir-black] .hljs-subst{color:#b5b3aa}[theme=base16-ir-black] .hljs-operator{opacity:.7}[theme=base16-ir-black] .hljs-bullet,[theme=base16-ir-black] .hljs-deletion,[theme=base16-ir-black] .hljs-name,[theme=base16-ir-black] .hljs-selector-tag,[theme=base16-ir-black] .hljs-template-variable,[theme=base16-ir-black] .hljs-variable{color:#ff6c60}[theme=base16-ir-black] .hljs-attr,[theme=base16-ir-black] .hljs-link,[theme=base16-ir-black] .hljs-literal,[theme=base16-ir-black] .hljs-number,[theme=base16-ir-black] .hljs-symbol,[theme=base16-ir-black] .hljs-variable.constant_{color:#e9c062}[theme=base16-ir-black] .hljs-class .hljs-title,[theme=base16-ir-black] .hljs-title,[theme=base16-ir-black] .hljs-title.class_{color:#ffffb6}[theme=base16-ir-black] .hljs-strong{font-weight:700;color:#ffffb6}[theme=base16-ir-black] .hljs-addition,[theme=base16-ir-black] .hljs-code,[theme=base16-ir-black] .hljs-string,[theme=base16-ir-black] .hljs-title.class_.inherited__{color:#a8ff60}[theme=base16-ir-black] .hljs-built_in,[theme=base16-ir-black] .hljs-doctag,[theme=base16-ir-black] .hljs-keyword.hljs-atrule,[theme=base16-ir-black] .hljs-quote,[theme=base16-ir-black] .hljs-regexp{color:#c6c5fe}[theme=base16-ir-black] .hljs-attribute,[theme=base16-ir-black] .hljs-function .hljs-title,[theme=base16-ir-black] .hljs-section,[theme=base16-ir-black] .hljs-title.function_,[theme=base16-ir-black] .ruby .hljs-property{color:#96cbfe}[theme=base16-ir-black] .diff .hljs-meta,[theme=base16-ir-black] .hljs-keyword,[theme=base16-ir-black] .hljs-template-tag,[theme=base16-ir-black] .hljs-type{color:#ff73fd}[theme=base16-ir-black] .hljs-emphasis{color:#ff73fd;font-style:italic}[theme=base16-ir-black] .hljs-meta,[theme=base16-ir-black] .hljs-meta .hljs-keyword,[theme=base16-ir-black] .hljs-meta .hljs-string{color:#b18a3d}[theme=base16-ir-black] .hljs-meta .hljs-keyword,[theme=base16-ir-black] .hljs-meta-keyword{font-weight:700}[theme=base16-isotope]{ + /*! + Theme: Isotope + Author: Jan T. Sott + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-isotope] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-isotope] code.hljs{padding:3px 5px}[theme=base16-isotope] .hljs{color:#d0d0d0;background:#000}[theme=base16-isotope] .hljs ::-moz-selection,[theme=base16-isotope] .hljs::-moz-selection{background-color:#606060;color:#d0d0d0}[theme=base16-isotope] .hljs ::selection,[theme=base16-isotope] .hljs::selection{background-color:#606060;color:#d0d0d0}[theme=base16-isotope] .hljs-comment{color:grey}[theme=base16-isotope] .hljs-tag{color:silver}[theme=base16-isotope] .hljs-operator,[theme=base16-isotope] .hljs-punctuation,[theme=base16-isotope] .hljs-subst{color:#d0d0d0}[theme=base16-isotope] .hljs-operator{opacity:.7}[theme=base16-isotope] .hljs-bullet,[theme=base16-isotope] .hljs-deletion,[theme=base16-isotope] .hljs-name,[theme=base16-isotope] .hljs-selector-tag,[theme=base16-isotope] .hljs-template-variable,[theme=base16-isotope] .hljs-variable{color:red}[theme=base16-isotope] .hljs-attr,[theme=base16-isotope] .hljs-link,[theme=base16-isotope] .hljs-literal,[theme=base16-isotope] .hljs-number,[theme=base16-isotope] .hljs-symbol,[theme=base16-isotope] .hljs-variable.constant_{color:#f90}[theme=base16-isotope] .hljs-class .hljs-title,[theme=base16-isotope] .hljs-title,[theme=base16-isotope] .hljs-title.class_{color:#f09}[theme=base16-isotope] .hljs-strong{font-weight:700;color:#f09}[theme=base16-isotope] .hljs-addition,[theme=base16-isotope] .hljs-code,[theme=base16-isotope] .hljs-string,[theme=base16-isotope] .hljs-title.class_.inherited__{color:#3f0}[theme=base16-isotope] .hljs-built_in,[theme=base16-isotope] .hljs-doctag,[theme=base16-isotope] .hljs-keyword.hljs-atrule,[theme=base16-isotope] .hljs-quote,[theme=base16-isotope] .hljs-regexp{color:#0ff}[theme=base16-isotope] .hljs-attribute,[theme=base16-isotope] .hljs-function .hljs-title,[theme=base16-isotope] .hljs-section,[theme=base16-isotope] .hljs-title.function_,[theme=base16-isotope] .ruby .hljs-property{color:#06f}[theme=base16-isotope] .diff .hljs-meta,[theme=base16-isotope] .hljs-keyword,[theme=base16-isotope] .hljs-template-tag,[theme=base16-isotope] .hljs-type{color:#c0f}[theme=base16-isotope] .hljs-emphasis{color:#c0f;font-style:italic}[theme=base16-isotope] .hljs-meta,[theme=base16-isotope] .hljs-meta .hljs-keyword,[theme=base16-isotope] .hljs-meta .hljs-string{color:#30f}[theme=base16-isotope] .hljs-meta .hljs-keyword,[theme=base16-isotope] .hljs-meta-keyword{font-weight:700}[theme=base16-kimber]{ + /*! + Theme: Kimber + Author: Mishka Nguyen (https://github.com/akhsiM) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-kimber] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-kimber] code.hljs{padding:3px 5px}[theme=base16-kimber] .hljs{color:#dedee7;background:#222}[theme=base16-kimber] .hljs ::-moz-selection,[theme=base16-kimber] .hljs::-moz-selection{background-color:#555d55;color:#dedee7}[theme=base16-kimber] .hljs ::selection,[theme=base16-kimber] .hljs::selection{background-color:#555d55;color:#dedee7}[theme=base16-kimber] .hljs-comment{color:#644646}[theme=base16-kimber] .hljs-tag{color:#5a5a5a}[theme=base16-kimber] .hljs-operator,[theme=base16-kimber] .hljs-punctuation,[theme=base16-kimber] .hljs-subst{color:#dedee7}[theme=base16-kimber] .hljs-operator{opacity:.7}[theme=base16-kimber] .hljs-bullet,[theme=base16-kimber] .hljs-deletion,[theme=base16-kimber] .hljs-name,[theme=base16-kimber] .hljs-selector-tag,[theme=base16-kimber] .hljs-template-variable,[theme=base16-kimber] .hljs-variable{color:#c88c8c}[theme=base16-kimber] .hljs-attr,[theme=base16-kimber] .hljs-link,[theme=base16-kimber] .hljs-literal,[theme=base16-kimber] .hljs-number,[theme=base16-kimber] .hljs-symbol,[theme=base16-kimber] .hljs-variable.constant_{color:#476c88}[theme=base16-kimber] .hljs-class .hljs-title,[theme=base16-kimber] .hljs-title,[theme=base16-kimber] .hljs-title.class_{color:#d8b56d}[theme=base16-kimber] .hljs-strong{font-weight:700;color:#d8b56d}[theme=base16-kimber] .hljs-addition,[theme=base16-kimber] .hljs-code,[theme=base16-kimber] .hljs-string,[theme=base16-kimber] .hljs-title.class_.inherited__{color:#99c899}[theme=base16-kimber] .hljs-built_in,[theme=base16-kimber] .hljs-doctag,[theme=base16-kimber] .hljs-keyword.hljs-atrule,[theme=base16-kimber] .hljs-quote,[theme=base16-kimber] .hljs-regexp{color:#78b4b4}[theme=base16-kimber] .hljs-attribute,[theme=base16-kimber] .hljs-function .hljs-title,[theme=base16-kimber] .hljs-section,[theme=base16-kimber] .hljs-title.function_,[theme=base16-kimber] .ruby .hljs-property{color:#537c9c}[theme=base16-kimber] .diff .hljs-meta,[theme=base16-kimber] .hljs-keyword,[theme=base16-kimber] .hljs-template-tag,[theme=base16-kimber] .hljs-type{color:#86cacd}[theme=base16-kimber] .hljs-emphasis{color:#86cacd;font-style:italic}[theme=base16-kimber] .hljs-meta,[theme=base16-kimber] .hljs-meta .hljs-keyword,[theme=base16-kimber] .hljs-meta .hljs-string{color:#704f4f}[theme=base16-kimber] .hljs-meta .hljs-keyword,[theme=base16-kimber] .hljs-meta-keyword{font-weight:700}[theme=base16-london-tube]{ + /*! + Theme: London Tube + Author: Jan T. Sott + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-london-tube] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-london-tube] code.hljs{padding:3px 5px}[theme=base16-london-tube] .hljs{color:#d9d8d8;background:#231f20}[theme=base16-london-tube] .hljs ::-moz-selection,[theme=base16-london-tube] .hljs::-moz-selection{background-color:#5a5758;color:#d9d8d8}[theme=base16-london-tube] .hljs ::selection,[theme=base16-london-tube] .hljs::selection{background-color:#5a5758;color:#d9d8d8}[theme=base16-london-tube] .hljs-comment{color:#737171}[theme=base16-london-tube] .hljs-tag{color:#959ca1}[theme=base16-london-tube] .hljs-operator,[theme=base16-london-tube] .hljs-punctuation,[theme=base16-london-tube] .hljs-subst{color:#d9d8d8}[theme=base16-london-tube] .hljs-operator{opacity:.7}[theme=base16-london-tube] .hljs-bullet,[theme=base16-london-tube] .hljs-deletion,[theme=base16-london-tube] .hljs-name,[theme=base16-london-tube] .hljs-selector-tag,[theme=base16-london-tube] .hljs-template-variable,[theme=base16-london-tube] .hljs-variable{color:#ee2e24}[theme=base16-london-tube] .hljs-attr,[theme=base16-london-tube] .hljs-link,[theme=base16-london-tube] .hljs-literal,[theme=base16-london-tube] .hljs-number,[theme=base16-london-tube] .hljs-symbol,[theme=base16-london-tube] .hljs-variable.constant_{color:#f386a1}[theme=base16-london-tube] .hljs-class .hljs-title,[theme=base16-london-tube] .hljs-title,[theme=base16-london-tube] .hljs-title.class_{color:#ffd204}[theme=base16-london-tube] .hljs-strong{font-weight:700;color:#ffd204}[theme=base16-london-tube] .hljs-addition,[theme=base16-london-tube] .hljs-code,[theme=base16-london-tube] .hljs-string,[theme=base16-london-tube] .hljs-title.class_.inherited__{color:#00853e}[theme=base16-london-tube] .hljs-built_in,[theme=base16-london-tube] .hljs-doctag,[theme=base16-london-tube] .hljs-keyword.hljs-atrule,[theme=base16-london-tube] .hljs-quote,[theme=base16-london-tube] .hljs-regexp{color:#85cebc}[theme=base16-london-tube] .hljs-attribute,[theme=base16-london-tube] .hljs-function .hljs-title,[theme=base16-london-tube] .hljs-section,[theme=base16-london-tube] .hljs-title.function_,[theme=base16-london-tube] .ruby .hljs-property{color:#009ddc}[theme=base16-london-tube] .diff .hljs-meta,[theme=base16-london-tube] .hljs-keyword,[theme=base16-london-tube] .hljs-template-tag,[theme=base16-london-tube] .hljs-type{color:#98005d}[theme=base16-london-tube] .hljs-emphasis{color:#98005d;font-style:italic}[theme=base16-london-tube] .hljs-meta,[theme=base16-london-tube] .hljs-meta .hljs-keyword,[theme=base16-london-tube] .hljs-meta .hljs-string{color:#b06110}[theme=base16-london-tube] .hljs-meta .hljs-keyword,[theme=base16-london-tube] .hljs-meta-keyword{font-weight:700}[theme=base16-macintosh]{ + /*! + Theme: Macintosh + Author: Rebecca Bettencourt (http://www.kreativekorp.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-macintosh] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-macintosh] code.hljs{padding:3px 5px}[theme=base16-macintosh] .hljs{color:silver;background:#000}[theme=base16-macintosh] .hljs ::-moz-selection,[theme=base16-macintosh] .hljs::-moz-selection{background-color:#404040;color:silver}[theme=base16-macintosh] .hljs ::selection,[theme=base16-macintosh] .hljs::selection{background-color:#404040;color:silver}[theme=base16-macintosh] .hljs-comment,[theme=base16-macintosh] .hljs-tag{color:grey}[theme=base16-macintosh] .hljs-operator,[theme=base16-macintosh] .hljs-punctuation,[theme=base16-macintosh] .hljs-subst{color:silver}[theme=base16-macintosh] .hljs-operator{opacity:.7}[theme=base16-macintosh] .hljs-bullet,[theme=base16-macintosh] .hljs-deletion,[theme=base16-macintosh] .hljs-name,[theme=base16-macintosh] .hljs-selector-tag,[theme=base16-macintosh] .hljs-template-variable,[theme=base16-macintosh] .hljs-variable{color:#dd0907}[theme=base16-macintosh] .hljs-attr,[theme=base16-macintosh] .hljs-link,[theme=base16-macintosh] .hljs-literal,[theme=base16-macintosh] .hljs-number,[theme=base16-macintosh] .hljs-symbol,[theme=base16-macintosh] .hljs-variable.constant_{color:#ff6403}[theme=base16-macintosh] .hljs-class .hljs-title,[theme=base16-macintosh] .hljs-title,[theme=base16-macintosh] .hljs-title.class_{color:#fbf305}[theme=base16-macintosh] .hljs-strong{font-weight:700;color:#fbf305}[theme=base16-macintosh] .hljs-addition,[theme=base16-macintosh] .hljs-code,[theme=base16-macintosh] .hljs-string,[theme=base16-macintosh] .hljs-title.class_.inherited__{color:#1fb714}[theme=base16-macintosh] .hljs-built_in,[theme=base16-macintosh] .hljs-doctag,[theme=base16-macintosh] .hljs-keyword.hljs-atrule,[theme=base16-macintosh] .hljs-quote,[theme=base16-macintosh] .hljs-regexp{color:#02abea}[theme=base16-macintosh] .hljs-attribute,[theme=base16-macintosh] .hljs-function .hljs-title,[theme=base16-macintosh] .hljs-section,[theme=base16-macintosh] .hljs-title.function_,[theme=base16-macintosh] .ruby .hljs-property{color:#0000d3}[theme=base16-macintosh] .diff .hljs-meta,[theme=base16-macintosh] .hljs-keyword,[theme=base16-macintosh] .hljs-template-tag,[theme=base16-macintosh] .hljs-type{color:#4700a5}[theme=base16-macintosh] .hljs-emphasis{color:#4700a5;font-style:italic}[theme=base16-macintosh] .hljs-meta,[theme=base16-macintosh] .hljs-meta .hljs-keyword,[theme=base16-macintosh] .hljs-meta .hljs-string{color:#90713a}[theme=base16-macintosh] .hljs-meta .hljs-keyword,[theme=base16-macintosh] .hljs-meta-keyword{font-weight:700}[theme=base16-marrakesh]{ + /*! + Theme: Marrakesh + Author: Alexandre Gavioli (http://github.com/Alexx2/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-marrakesh] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-marrakesh] code.hljs{padding:3px 5px}[theme=base16-marrakesh] .hljs{color:#948e48;background:#201602}[theme=base16-marrakesh] .hljs ::-moz-selection,[theme=base16-marrakesh] .hljs::-moz-selection{background-color:#5f5b17;color:#948e48}[theme=base16-marrakesh] .hljs ::selection,[theme=base16-marrakesh] .hljs::selection{background-color:#5f5b17;color:#948e48}[theme=base16-marrakesh] .hljs-comment{color:#6c6823}[theme=base16-marrakesh] .hljs-tag{color:#86813b}[theme=base16-marrakesh] .hljs-operator,[theme=base16-marrakesh] .hljs-punctuation,[theme=base16-marrakesh] .hljs-subst{color:#948e48}[theme=base16-marrakesh] .hljs-operator{opacity:.7}[theme=base16-marrakesh] .hljs-bullet,[theme=base16-marrakesh] .hljs-deletion,[theme=base16-marrakesh] .hljs-name,[theme=base16-marrakesh] .hljs-selector-tag,[theme=base16-marrakesh] .hljs-template-variable,[theme=base16-marrakesh] .hljs-variable{color:#c35359}[theme=base16-marrakesh] .hljs-attr,[theme=base16-marrakesh] .hljs-link,[theme=base16-marrakesh] .hljs-literal,[theme=base16-marrakesh] .hljs-number,[theme=base16-marrakesh] .hljs-symbol,[theme=base16-marrakesh] .hljs-variable.constant_{color:#b36144}[theme=base16-marrakesh] .hljs-class .hljs-title,[theme=base16-marrakesh] .hljs-title,[theme=base16-marrakesh] .hljs-title.class_{color:#a88339}[theme=base16-marrakesh] .hljs-strong{font-weight:700;color:#a88339}[theme=base16-marrakesh] .hljs-addition,[theme=base16-marrakesh] .hljs-code,[theme=base16-marrakesh] .hljs-string,[theme=base16-marrakesh] .hljs-title.class_.inherited__{color:#18974e}[theme=base16-marrakesh] .hljs-built_in,[theme=base16-marrakesh] .hljs-doctag,[theme=base16-marrakesh] .hljs-keyword.hljs-atrule,[theme=base16-marrakesh] .hljs-quote,[theme=base16-marrakesh] .hljs-regexp{color:#75a738}[theme=base16-marrakesh] .hljs-attribute,[theme=base16-marrakesh] .hljs-function .hljs-title,[theme=base16-marrakesh] .hljs-section,[theme=base16-marrakesh] .hljs-title.function_,[theme=base16-marrakesh] .ruby .hljs-property{color:#477ca1}[theme=base16-marrakesh] .diff .hljs-meta,[theme=base16-marrakesh] .hljs-keyword,[theme=base16-marrakesh] .hljs-template-tag,[theme=base16-marrakesh] .hljs-type{color:#8868b3}[theme=base16-marrakesh] .hljs-emphasis{color:#8868b3;font-style:italic}[theme=base16-marrakesh] .hljs-meta,[theme=base16-marrakesh] .hljs-meta .hljs-keyword,[theme=base16-marrakesh] .hljs-meta .hljs-string{color:#b3588e}[theme=base16-marrakesh] .hljs-meta .hljs-keyword,[theme=base16-marrakesh] .hljs-meta-keyword{font-weight:700}[theme=base16-materia]{ + /*! + Theme: Materia + Author: Defman21 + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-materia] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-materia] code.hljs{padding:3px 5px}[theme=base16-materia] .hljs{color:#cdd3de;background:#263238}[theme=base16-materia] .hljs ::-moz-selection,[theme=base16-materia] .hljs::-moz-selection{background-color:#37474f;color:#cdd3de}[theme=base16-materia] .hljs ::selection,[theme=base16-materia] .hljs::selection{background-color:#37474f;color:#cdd3de}[theme=base16-materia] .hljs-comment{color:#707880}[theme=base16-materia] .hljs-tag{color:#c9ccd3}[theme=base16-materia] .hljs-operator,[theme=base16-materia] .hljs-punctuation,[theme=base16-materia] .hljs-subst{color:#cdd3de}[theme=base16-materia] .hljs-operator{opacity:.7}[theme=base16-materia] .hljs-bullet,[theme=base16-materia] .hljs-deletion,[theme=base16-materia] .hljs-name,[theme=base16-materia] .hljs-selector-tag,[theme=base16-materia] .hljs-template-variable,[theme=base16-materia] .hljs-variable{color:#ec5f67}[theme=base16-materia] .hljs-attr,[theme=base16-materia] .hljs-link,[theme=base16-materia] .hljs-literal,[theme=base16-materia] .hljs-number,[theme=base16-materia] .hljs-symbol,[theme=base16-materia] .hljs-variable.constant_{color:#ea9560}[theme=base16-materia] .hljs-class .hljs-title,[theme=base16-materia] .hljs-title,[theme=base16-materia] .hljs-title.class_{color:#fc0}[theme=base16-materia] .hljs-strong{font-weight:700;color:#fc0}[theme=base16-materia] .hljs-addition,[theme=base16-materia] .hljs-code,[theme=base16-materia] .hljs-string,[theme=base16-materia] .hljs-title.class_.inherited__{color:#8bd649}[theme=base16-materia] .hljs-built_in,[theme=base16-materia] .hljs-doctag,[theme=base16-materia] .hljs-keyword.hljs-atrule,[theme=base16-materia] .hljs-quote,[theme=base16-materia] .hljs-regexp{color:#80cbc4}[theme=base16-materia] .hljs-attribute,[theme=base16-materia] .hljs-function .hljs-title,[theme=base16-materia] .hljs-section,[theme=base16-materia] .hljs-title.function_,[theme=base16-materia] .ruby .hljs-property{color:#89ddff}[theme=base16-materia] .diff .hljs-meta,[theme=base16-materia] .hljs-keyword,[theme=base16-materia] .hljs-template-tag,[theme=base16-materia] .hljs-type{color:#82aaff}[theme=base16-materia] .hljs-emphasis{color:#82aaff;font-style:italic}[theme=base16-materia] .hljs-meta,[theme=base16-materia] .hljs-meta .hljs-keyword,[theme=base16-materia] .hljs-meta .hljs-string{color:#ec5f67}[theme=base16-materia] .hljs-meta .hljs-keyword,[theme=base16-materia] .hljs-meta-keyword{font-weight:700}[theme=base16-material-darker]{ + /*! + Theme: Material Darker + Author: Nate Peterson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-material-darker] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-material-darker] code.hljs{padding:3px 5px}[theme=base16-material-darker] .hljs{color:#eff;background:#212121}[theme=base16-material-darker] .hljs ::-moz-selection,[theme=base16-material-darker] .hljs::-moz-selection{background-color:#353535;color:#eff}[theme=base16-material-darker] .hljs ::selection,[theme=base16-material-darker] .hljs::selection{background-color:#353535;color:#eff}[theme=base16-material-darker] .hljs-comment{color:#4a4a4a}[theme=base16-material-darker] .hljs-tag{color:#b2ccd6}[theme=base16-material-darker] .hljs-operator,[theme=base16-material-darker] .hljs-punctuation,[theme=base16-material-darker] .hljs-subst{color:#eff}[theme=base16-material-darker] .hljs-operator{opacity:.7}[theme=base16-material-darker] .hljs-bullet,[theme=base16-material-darker] .hljs-deletion,[theme=base16-material-darker] .hljs-name,[theme=base16-material-darker] .hljs-selector-tag,[theme=base16-material-darker] .hljs-template-variable,[theme=base16-material-darker] .hljs-variable{color:#f07178}[theme=base16-material-darker] .hljs-attr,[theme=base16-material-darker] .hljs-link,[theme=base16-material-darker] .hljs-literal,[theme=base16-material-darker] .hljs-number,[theme=base16-material-darker] .hljs-symbol,[theme=base16-material-darker] .hljs-variable.constant_{color:#f78c6c}[theme=base16-material-darker] .hljs-class .hljs-title,[theme=base16-material-darker] .hljs-title,[theme=base16-material-darker] .hljs-title.class_{color:#ffcb6b}[theme=base16-material-darker] .hljs-strong{font-weight:700;color:#ffcb6b}[theme=base16-material-darker] .hljs-addition,[theme=base16-material-darker] .hljs-code,[theme=base16-material-darker] .hljs-string,[theme=base16-material-darker] .hljs-title.class_.inherited__{color:#c3e88d}[theme=base16-material-darker] .hljs-built_in,[theme=base16-material-darker] .hljs-doctag,[theme=base16-material-darker] .hljs-keyword.hljs-atrule,[theme=base16-material-darker] .hljs-quote,[theme=base16-material-darker] .hljs-regexp{color:#89ddff}[theme=base16-material-darker] .hljs-attribute,[theme=base16-material-darker] .hljs-function .hljs-title,[theme=base16-material-darker] .hljs-section,[theme=base16-material-darker] .hljs-title.function_,[theme=base16-material-darker] .ruby .hljs-property{color:#82aaff}[theme=base16-material-darker] .diff .hljs-meta,[theme=base16-material-darker] .hljs-keyword,[theme=base16-material-darker] .hljs-template-tag,[theme=base16-material-darker] .hljs-type{color:#c792ea}[theme=base16-material-darker] .hljs-emphasis{color:#c792ea;font-style:italic}[theme=base16-material-darker] .hljs-meta,[theme=base16-material-darker] .hljs-meta .hljs-keyword,[theme=base16-material-darker] .hljs-meta .hljs-string{color:#ff5370}[theme=base16-material-darker] .hljs-meta .hljs-keyword,[theme=base16-material-darker] .hljs-meta-keyword{font-weight:700}[theme=base16-material-lighter]{ + /*! + Theme: Material Lighter + Author: Nate Peterson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-material-lighter] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-material-lighter] code.hljs{padding:3px 5px}[theme=base16-material-lighter] .hljs{color:#80cbc4;background:#fafafa}[theme=base16-material-lighter] .hljs ::-moz-selection,[theme=base16-material-lighter] .hljs::-moz-selection{background-color:#cceae7;color:#80cbc4}[theme=base16-material-lighter] .hljs ::selection,[theme=base16-material-lighter] .hljs::selection{background-color:#cceae7;color:#80cbc4}[theme=base16-material-lighter] .hljs-comment{color:#ccd7da}[theme=base16-material-lighter] .hljs-tag{color:#8796b0}[theme=base16-material-lighter] .hljs-operator,[theme=base16-material-lighter] .hljs-punctuation,[theme=base16-material-lighter] .hljs-subst{color:#80cbc4}[theme=base16-material-lighter] .hljs-operator{opacity:.7}[theme=base16-material-lighter] .hljs-bullet,[theme=base16-material-lighter] .hljs-deletion,[theme=base16-material-lighter] .hljs-name,[theme=base16-material-lighter] .hljs-selector-tag,[theme=base16-material-lighter] .hljs-template-variable,[theme=base16-material-lighter] .hljs-variable{color:#ff5370}[theme=base16-material-lighter] .hljs-attr,[theme=base16-material-lighter] .hljs-link,[theme=base16-material-lighter] .hljs-literal,[theme=base16-material-lighter] .hljs-number,[theme=base16-material-lighter] .hljs-symbol,[theme=base16-material-lighter] .hljs-variable.constant_{color:#f76d47}[theme=base16-material-lighter] .hljs-class .hljs-title,[theme=base16-material-lighter] .hljs-title,[theme=base16-material-lighter] .hljs-title.class_{color:#ffb62c}[theme=base16-material-lighter] .hljs-strong{font-weight:700;color:#ffb62c}[theme=base16-material-lighter] .hljs-addition,[theme=base16-material-lighter] .hljs-code,[theme=base16-material-lighter] .hljs-string,[theme=base16-material-lighter] .hljs-title.class_.inherited__{color:#91b859}[theme=base16-material-lighter] .hljs-built_in,[theme=base16-material-lighter] .hljs-doctag,[theme=base16-material-lighter] .hljs-keyword.hljs-atrule,[theme=base16-material-lighter] .hljs-quote,[theme=base16-material-lighter] .hljs-regexp{color:#39adb5}[theme=base16-material-lighter] .hljs-attribute,[theme=base16-material-lighter] .hljs-function .hljs-title,[theme=base16-material-lighter] .hljs-section,[theme=base16-material-lighter] .hljs-title.function_,[theme=base16-material-lighter] .ruby .hljs-property{color:#6182b8}[theme=base16-material-lighter] .diff .hljs-meta,[theme=base16-material-lighter] .hljs-keyword,[theme=base16-material-lighter] .hljs-template-tag,[theme=base16-material-lighter] .hljs-type{color:#7c4dff}[theme=base16-material-lighter] .hljs-emphasis{color:#7c4dff;font-style:italic}[theme=base16-material-lighter] .hljs-meta,[theme=base16-material-lighter] .hljs-meta .hljs-keyword,[theme=base16-material-lighter] .hljs-meta .hljs-string{color:#e53935}[theme=base16-material-lighter] .hljs-meta .hljs-keyword,[theme=base16-material-lighter] .hljs-meta-keyword{font-weight:700}[theme=base16-material-palenight]{ + /*! + Theme: Material Palenight + Author: Nate Peterson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-material-palenight] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-material-palenight] code.hljs{padding:3px 5px}[theme=base16-material-palenight] .hljs{color:#959dcb;background:#292d3e}[theme=base16-material-palenight] .hljs ::-moz-selection,[theme=base16-material-palenight] .hljs::-moz-selection{background-color:#32374d;color:#959dcb}[theme=base16-material-palenight] .hljs ::selection,[theme=base16-material-palenight] .hljs::selection{background-color:#32374d;color:#959dcb}[theme=base16-material-palenight] .hljs-comment{color:#676e95}[theme=base16-material-palenight] .hljs-tag{color:#8796b0}[theme=base16-material-palenight] .hljs-operator,[theme=base16-material-palenight] .hljs-punctuation,[theme=base16-material-palenight] .hljs-subst{color:#959dcb}[theme=base16-material-palenight] .hljs-operator{opacity:.7}[theme=base16-material-palenight] .hljs-bullet,[theme=base16-material-palenight] .hljs-deletion,[theme=base16-material-palenight] .hljs-name,[theme=base16-material-palenight] .hljs-selector-tag,[theme=base16-material-palenight] .hljs-template-variable,[theme=base16-material-palenight] .hljs-variable{color:#f07178}[theme=base16-material-palenight] .hljs-attr,[theme=base16-material-palenight] .hljs-link,[theme=base16-material-palenight] .hljs-literal,[theme=base16-material-palenight] .hljs-number,[theme=base16-material-palenight] .hljs-symbol,[theme=base16-material-palenight] .hljs-variable.constant_{color:#f78c6c}[theme=base16-material-palenight] .hljs-class .hljs-title,[theme=base16-material-palenight] .hljs-title,[theme=base16-material-palenight] .hljs-title.class_{color:#ffcb6b}[theme=base16-material-palenight] .hljs-strong{font-weight:700;color:#ffcb6b}[theme=base16-material-palenight] .hljs-addition,[theme=base16-material-palenight] .hljs-code,[theme=base16-material-palenight] .hljs-string,[theme=base16-material-palenight] .hljs-title.class_.inherited__{color:#c3e88d}[theme=base16-material-palenight] .hljs-built_in,[theme=base16-material-palenight] .hljs-doctag,[theme=base16-material-palenight] .hljs-keyword.hljs-atrule,[theme=base16-material-palenight] .hljs-quote,[theme=base16-material-palenight] .hljs-regexp{color:#89ddff}[theme=base16-material-palenight] .hljs-attribute,[theme=base16-material-palenight] .hljs-function .hljs-title,[theme=base16-material-palenight] .hljs-section,[theme=base16-material-palenight] .hljs-title.function_,[theme=base16-material-palenight] .ruby .hljs-property{color:#82aaff}[theme=base16-material-palenight] .diff .hljs-meta,[theme=base16-material-palenight] .hljs-keyword,[theme=base16-material-palenight] .hljs-template-tag,[theme=base16-material-palenight] .hljs-type{color:#c792ea}[theme=base16-material-palenight] .hljs-emphasis{color:#c792ea;font-style:italic}[theme=base16-material-palenight] .hljs-meta,[theme=base16-material-palenight] .hljs-meta .hljs-keyword,[theme=base16-material-palenight] .hljs-meta .hljs-string{color:#ff5370}[theme=base16-material-palenight] .hljs-meta .hljs-keyword,[theme=base16-material-palenight] .hljs-meta-keyword{font-weight:700}[theme=base16-material-vivid]{ + /*! + Theme: Material Vivid + Author: joshyrobot + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-material-vivid] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-material-vivid] code.hljs{padding:3px 5px}[theme=base16-material-vivid] .hljs{color:#80868b;background:#202124}[theme=base16-material-vivid] .hljs ::-moz-selection,[theme=base16-material-vivid] .hljs::-moz-selection{background-color:#323639;color:#80868b}[theme=base16-material-vivid] .hljs ::selection,[theme=base16-material-vivid] .hljs::selection{background-color:#323639;color:#80868b}[theme=base16-material-vivid] .hljs-comment{color:#44464d}[theme=base16-material-vivid] .hljs-tag{color:#676c71}[theme=base16-material-vivid] .hljs-operator,[theme=base16-material-vivid] .hljs-punctuation,[theme=base16-material-vivid] .hljs-subst{color:#80868b}[theme=base16-material-vivid] .hljs-operator{opacity:.7}[theme=base16-material-vivid] .hljs-bullet,[theme=base16-material-vivid] .hljs-deletion,[theme=base16-material-vivid] .hljs-name,[theme=base16-material-vivid] .hljs-selector-tag,[theme=base16-material-vivid] .hljs-template-variable,[theme=base16-material-vivid] .hljs-variable{color:#f44336}[theme=base16-material-vivid] .hljs-attr,[theme=base16-material-vivid] .hljs-link,[theme=base16-material-vivid] .hljs-literal,[theme=base16-material-vivid] .hljs-number,[theme=base16-material-vivid] .hljs-symbol,[theme=base16-material-vivid] .hljs-variable.constant_{color:#ff9800}[theme=base16-material-vivid] .hljs-class .hljs-title,[theme=base16-material-vivid] .hljs-title,[theme=base16-material-vivid] .hljs-title.class_{color:#ffeb3b}[theme=base16-material-vivid] .hljs-strong{font-weight:700;color:#ffeb3b}[theme=base16-material-vivid] .hljs-addition,[theme=base16-material-vivid] .hljs-code,[theme=base16-material-vivid] .hljs-string,[theme=base16-material-vivid] .hljs-title.class_.inherited__{color:#00e676}[theme=base16-material-vivid] .hljs-built_in,[theme=base16-material-vivid] .hljs-doctag,[theme=base16-material-vivid] .hljs-keyword.hljs-atrule,[theme=base16-material-vivid] .hljs-quote,[theme=base16-material-vivid] .hljs-regexp{color:#00bcd4}[theme=base16-material-vivid] .hljs-attribute,[theme=base16-material-vivid] .hljs-function .hljs-title,[theme=base16-material-vivid] .hljs-section,[theme=base16-material-vivid] .hljs-title.function_,[theme=base16-material-vivid] .ruby .hljs-property{color:#2196f3}[theme=base16-material-vivid] .diff .hljs-meta,[theme=base16-material-vivid] .hljs-keyword,[theme=base16-material-vivid] .hljs-template-tag,[theme=base16-material-vivid] .hljs-type{color:#673ab7}[theme=base16-material-vivid] .hljs-emphasis{color:#673ab7;font-style:italic}[theme=base16-material-vivid] .hljs-meta,[theme=base16-material-vivid] .hljs-meta .hljs-keyword,[theme=base16-material-vivid] .hljs-meta .hljs-string{color:#8d6e63}[theme=base16-material-vivid] .hljs-meta .hljs-keyword,[theme=base16-material-vivid] .hljs-meta-keyword{font-weight:700}[theme=base16-material]{ + /*! + Theme: Material + Author: Nate Peterson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-material] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-material] code.hljs{padding:3px 5px}[theme=base16-material] .hljs{color:#eff;background:#263238}[theme=base16-material] .hljs ::-moz-selection,[theme=base16-material] .hljs::-moz-selection{background-color:#314549;color:#eff}[theme=base16-material] .hljs ::selection,[theme=base16-material] .hljs::selection{background-color:#314549;color:#eff}[theme=base16-material] .hljs-comment{color:#546e7a}[theme=base16-material] .hljs-tag{color:#b2ccd6}[theme=base16-material] .hljs-operator,[theme=base16-material] .hljs-punctuation,[theme=base16-material] .hljs-subst{color:#eff}[theme=base16-material] .hljs-operator{opacity:.7}[theme=base16-material] .hljs-bullet,[theme=base16-material] .hljs-deletion,[theme=base16-material] .hljs-name,[theme=base16-material] .hljs-selector-tag,[theme=base16-material] .hljs-template-variable,[theme=base16-material] .hljs-variable{color:#f07178}[theme=base16-material] .hljs-attr,[theme=base16-material] .hljs-link,[theme=base16-material] .hljs-literal,[theme=base16-material] .hljs-number,[theme=base16-material] .hljs-symbol,[theme=base16-material] .hljs-variable.constant_{color:#f78c6c}[theme=base16-material] .hljs-class .hljs-title,[theme=base16-material] .hljs-title,[theme=base16-material] .hljs-title.class_{color:#ffcb6b}[theme=base16-material] .hljs-strong{font-weight:700;color:#ffcb6b}[theme=base16-material] .hljs-addition,[theme=base16-material] .hljs-code,[theme=base16-material] .hljs-string,[theme=base16-material] .hljs-title.class_.inherited__{color:#c3e88d}[theme=base16-material] .hljs-built_in,[theme=base16-material] .hljs-doctag,[theme=base16-material] .hljs-keyword.hljs-atrule,[theme=base16-material] .hljs-quote,[theme=base16-material] .hljs-regexp{color:#89ddff}[theme=base16-material] .hljs-attribute,[theme=base16-material] .hljs-function .hljs-title,[theme=base16-material] .hljs-section,[theme=base16-material] .hljs-title.function_,[theme=base16-material] .ruby .hljs-property{color:#82aaff}[theme=base16-material] .diff .hljs-meta,[theme=base16-material] .hljs-keyword,[theme=base16-material] .hljs-template-tag,[theme=base16-material] .hljs-type{color:#c792ea}[theme=base16-material] .hljs-emphasis{color:#c792ea;font-style:italic}[theme=base16-material] .hljs-meta,[theme=base16-material] .hljs-meta .hljs-keyword,[theme=base16-material] .hljs-meta .hljs-string{color:#ff5370}[theme=base16-material] .hljs-meta .hljs-keyword,[theme=base16-material] .hljs-meta-keyword{font-weight:700}[theme=base16-mellow-purple]{ + /*! + Theme: Mellow Purple + Author: gidsi + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-mellow-purple] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-mellow-purple] code.hljs{padding:3px 5px}[theme=base16-mellow-purple] .hljs{color:#fef;background:#1e0528}[theme=base16-mellow-purple] .hljs ::-moz-selection,[theme=base16-mellow-purple] .hljs::-moz-selection{background-color:#331354;color:#fef}[theme=base16-mellow-purple] .hljs ::selection,[theme=base16-mellow-purple] .hljs::selection{background-color:#331354;color:#fef}[theme=base16-mellow-purple] .hljs-comment{color:#320f55}[theme=base16-mellow-purple] .hljs-tag{color:#873582}[theme=base16-mellow-purple] .hljs-operator,[theme=base16-mellow-purple] .hljs-punctuation,[theme=base16-mellow-purple] .hljs-subst{color:#fef}[theme=base16-mellow-purple] .hljs-operator{opacity:.7}[theme=base16-mellow-purple] .hljs-bullet,[theme=base16-mellow-purple] .hljs-deletion,[theme=base16-mellow-purple] .hljs-name,[theme=base16-mellow-purple] .hljs-selector-tag,[theme=base16-mellow-purple] .hljs-template-variable,[theme=base16-mellow-purple] .hljs-variable{color:#00d9e9}[theme=base16-mellow-purple] .hljs-attr,[theme=base16-mellow-purple] .hljs-link,[theme=base16-mellow-purple] .hljs-literal,[theme=base16-mellow-purple] .hljs-number,[theme=base16-mellow-purple] .hljs-symbol,[theme=base16-mellow-purple] .hljs-variable.constant_{color:#aa00a3}[theme=base16-mellow-purple] .hljs-class .hljs-title,[theme=base16-mellow-purple] .hljs-title,[theme=base16-mellow-purple] .hljs-title.class_{color:#955ae7}[theme=base16-mellow-purple] .hljs-strong{font-weight:700;color:#955ae7}[theme=base16-mellow-purple] .hljs-addition,[theme=base16-mellow-purple] .hljs-code,[theme=base16-mellow-purple] .hljs-string,[theme=base16-mellow-purple] .hljs-title.class_.inherited__{color:#05cb0d}[theme=base16-mellow-purple] .hljs-built_in,[theme=base16-mellow-purple] .hljs-doctag,[theme=base16-mellow-purple] .hljs-keyword.hljs-atrule,[theme=base16-mellow-purple] .hljs-quote,[theme=base16-mellow-purple] .hljs-regexp{color:#b900b1}[theme=base16-mellow-purple] .hljs-attribute,[theme=base16-mellow-purple] .hljs-function .hljs-title,[theme=base16-mellow-purple] .hljs-section,[theme=base16-mellow-purple] .hljs-title.function_,[theme=base16-mellow-purple] .ruby .hljs-property{color:#550068}[theme=base16-mellow-purple] .diff .hljs-meta,[theme=base16-mellow-purple] .hljs-keyword,[theme=base16-mellow-purple] .hljs-template-tag,[theme=base16-mellow-purple] .hljs-type{color:#8991bb}[theme=base16-mellow-purple] .hljs-emphasis{color:#8991bb;font-style:italic}[theme=base16-mellow-purple] .hljs-meta,[theme=base16-mellow-purple] .hljs-meta .hljs-keyword,[theme=base16-mellow-purple] .hljs-meta .hljs-string{color:#4d6fff}[theme=base16-mellow-purple] .hljs-meta .hljs-keyword,[theme=base16-mellow-purple] .hljs-meta-keyword{font-weight:700}[theme=base16-mexico-light]{ + /*! + Theme: Mexico Light + Author: Sheldon Johnson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-mexico-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-mexico-light] code.hljs{padding:3px 5px}[theme=base16-mexico-light] .hljs{color:#383838;background:#f8f8f8}[theme=base16-mexico-light] .hljs ::-moz-selection,[theme=base16-mexico-light] .hljs::-moz-selection{background-color:#d8d8d8;color:#383838}[theme=base16-mexico-light] .hljs ::selection,[theme=base16-mexico-light] .hljs::selection{background-color:#d8d8d8;color:#383838}[theme=base16-mexico-light] .hljs-comment{color:#b8b8b8}[theme=base16-mexico-light] .hljs-tag{color:#585858}[theme=base16-mexico-light] .hljs-operator,[theme=base16-mexico-light] .hljs-punctuation,[theme=base16-mexico-light] .hljs-subst{color:#383838}[theme=base16-mexico-light] .hljs-operator{opacity:.7}[theme=base16-mexico-light] .hljs-bullet,[theme=base16-mexico-light] .hljs-deletion,[theme=base16-mexico-light] .hljs-name,[theme=base16-mexico-light] .hljs-selector-tag,[theme=base16-mexico-light] .hljs-template-variable,[theme=base16-mexico-light] .hljs-variable{color:#ab4642}[theme=base16-mexico-light] .hljs-attr,[theme=base16-mexico-light] .hljs-link,[theme=base16-mexico-light] .hljs-literal,[theme=base16-mexico-light] .hljs-number,[theme=base16-mexico-light] .hljs-symbol,[theme=base16-mexico-light] .hljs-variable.constant_{color:#dc9656}[theme=base16-mexico-light] .hljs-class .hljs-title,[theme=base16-mexico-light] .hljs-title,[theme=base16-mexico-light] .hljs-title.class_{color:#f79a0e}[theme=base16-mexico-light] .hljs-strong{font-weight:700;color:#f79a0e}[theme=base16-mexico-light] .hljs-addition,[theme=base16-mexico-light] .hljs-code,[theme=base16-mexico-light] .hljs-string,[theme=base16-mexico-light] .hljs-title.class_.inherited__{color:#538947}[theme=base16-mexico-light] .hljs-built_in,[theme=base16-mexico-light] .hljs-doctag,[theme=base16-mexico-light] .hljs-keyword.hljs-atrule,[theme=base16-mexico-light] .hljs-quote,[theme=base16-mexico-light] .hljs-regexp{color:#4b8093}[theme=base16-mexico-light] .hljs-attribute,[theme=base16-mexico-light] .hljs-function .hljs-title,[theme=base16-mexico-light] .hljs-section,[theme=base16-mexico-light] .hljs-title.function_,[theme=base16-mexico-light] .ruby .hljs-property{color:#7cafc2}[theme=base16-mexico-light] .diff .hljs-meta,[theme=base16-mexico-light] .hljs-keyword,[theme=base16-mexico-light] .hljs-template-tag,[theme=base16-mexico-light] .hljs-type{color:#96609e}[theme=base16-mexico-light] .hljs-emphasis{color:#96609e;font-style:italic}[theme=base16-mexico-light] .hljs-meta,[theme=base16-mexico-light] .hljs-meta .hljs-keyword,[theme=base16-mexico-light] .hljs-meta .hljs-string{color:#a16946}[theme=base16-mexico-light] .hljs-meta .hljs-keyword,[theme=base16-mexico-light] .hljs-meta-keyword{font-weight:700}[theme=base16-mocha]{ + /*! + Theme: Mocha + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-mocha] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-mocha] code.hljs{padding:3px 5px}[theme=base16-mocha] .hljs{color:#d0c8c6;background:#3b3228}[theme=base16-mocha] .hljs ::-moz-selection,[theme=base16-mocha] .hljs::-moz-selection{background-color:#645240;color:#d0c8c6}[theme=base16-mocha] .hljs ::selection,[theme=base16-mocha] .hljs::selection{background-color:#645240;color:#d0c8c6}[theme=base16-mocha] .hljs-comment{color:#7e705a}[theme=base16-mocha] .hljs-tag{color:#b8afad}[theme=base16-mocha] .hljs-operator,[theme=base16-mocha] .hljs-punctuation,[theme=base16-mocha] .hljs-subst{color:#d0c8c6}[theme=base16-mocha] .hljs-operator{opacity:.7}[theme=base16-mocha] .hljs-bullet,[theme=base16-mocha] .hljs-deletion,[theme=base16-mocha] .hljs-name,[theme=base16-mocha] .hljs-selector-tag,[theme=base16-mocha] .hljs-template-variable,[theme=base16-mocha] .hljs-variable{color:#cb6077}[theme=base16-mocha] .hljs-attr,[theme=base16-mocha] .hljs-link,[theme=base16-mocha] .hljs-literal,[theme=base16-mocha] .hljs-number,[theme=base16-mocha] .hljs-symbol,[theme=base16-mocha] .hljs-variable.constant_{color:#d28b71}[theme=base16-mocha] .hljs-class .hljs-title,[theme=base16-mocha] .hljs-title,[theme=base16-mocha] .hljs-title.class_{color:#f4bc87}[theme=base16-mocha] .hljs-strong{font-weight:700;color:#f4bc87}[theme=base16-mocha] .hljs-addition,[theme=base16-mocha] .hljs-code,[theme=base16-mocha] .hljs-string,[theme=base16-mocha] .hljs-title.class_.inherited__{color:#beb55b}[theme=base16-mocha] .hljs-built_in,[theme=base16-mocha] .hljs-doctag,[theme=base16-mocha] .hljs-keyword.hljs-atrule,[theme=base16-mocha] .hljs-quote,[theme=base16-mocha] .hljs-regexp{color:#7bbda4}[theme=base16-mocha] .hljs-attribute,[theme=base16-mocha] .hljs-function .hljs-title,[theme=base16-mocha] .hljs-section,[theme=base16-mocha] .hljs-title.function_,[theme=base16-mocha] .ruby .hljs-property{color:#8ab3b5}[theme=base16-mocha] .diff .hljs-meta,[theme=base16-mocha] .hljs-keyword,[theme=base16-mocha] .hljs-template-tag,[theme=base16-mocha] .hljs-type{color:#a89bb9}[theme=base16-mocha] .hljs-emphasis{color:#a89bb9;font-style:italic}[theme=base16-mocha] .hljs-meta,[theme=base16-mocha] .hljs-meta .hljs-keyword,[theme=base16-mocha] .hljs-meta .hljs-string{color:#bb9584}[theme=base16-mocha] .hljs-meta .hljs-keyword,[theme=base16-mocha] .hljs-meta-keyword{font-weight:700}[theme=base16-monokai]{ + /*! + Theme: Monokai + Author: Wimer Hazenberg (http://www.monokai.nl) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-monokai] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-monokai] code.hljs{padding:3px 5px}[theme=base16-monokai] .hljs{color:#f8f8f2;background:#272822}[theme=base16-monokai] .hljs ::-moz-selection,[theme=base16-monokai] .hljs::-moz-selection{background-color:#49483e;color:#f8f8f2}[theme=base16-monokai] .hljs ::selection,[theme=base16-monokai] .hljs::selection{background-color:#49483e;color:#f8f8f2}[theme=base16-monokai] .hljs-comment{color:#75715e}[theme=base16-monokai] .hljs-tag{color:#a59f85}[theme=base16-monokai] .hljs-operator,[theme=base16-monokai] .hljs-punctuation,[theme=base16-monokai] .hljs-subst{color:#f8f8f2}[theme=base16-monokai] .hljs-operator{opacity:.7}[theme=base16-monokai] .hljs-bullet,[theme=base16-monokai] .hljs-deletion,[theme=base16-monokai] .hljs-name,[theme=base16-monokai] .hljs-selector-tag,[theme=base16-monokai] .hljs-template-variable,[theme=base16-monokai] .hljs-variable{color:#f92672}[theme=base16-monokai] .hljs-attr,[theme=base16-monokai] .hljs-link,[theme=base16-monokai] .hljs-literal,[theme=base16-monokai] .hljs-number,[theme=base16-monokai] .hljs-symbol,[theme=base16-monokai] .hljs-variable.constant_{color:#fd971f}[theme=base16-monokai] .hljs-class .hljs-title,[theme=base16-monokai] .hljs-title,[theme=base16-monokai] .hljs-title.class_{color:#f4bf75}[theme=base16-monokai] .hljs-strong{font-weight:700;color:#f4bf75}[theme=base16-monokai] .hljs-addition,[theme=base16-monokai] .hljs-code,[theme=base16-monokai] .hljs-string,[theme=base16-monokai] .hljs-title.class_.inherited__{color:#a6e22e}[theme=base16-monokai] .hljs-built_in,[theme=base16-monokai] .hljs-doctag,[theme=base16-monokai] .hljs-keyword.hljs-atrule,[theme=base16-monokai] .hljs-quote,[theme=base16-monokai] .hljs-regexp{color:#a1efe4}[theme=base16-monokai] .hljs-attribute,[theme=base16-monokai] .hljs-function .hljs-title,[theme=base16-monokai] .hljs-section,[theme=base16-monokai] .hljs-title.function_,[theme=base16-monokai] .ruby .hljs-property{color:#66d9ef}[theme=base16-monokai] .diff .hljs-meta,[theme=base16-monokai] .hljs-keyword,[theme=base16-monokai] .hljs-template-tag,[theme=base16-monokai] .hljs-type{color:#ae81ff}[theme=base16-monokai] .hljs-emphasis{color:#ae81ff;font-style:italic}[theme=base16-monokai] .hljs-meta,[theme=base16-monokai] .hljs-meta .hljs-keyword,[theme=base16-monokai] .hljs-meta .hljs-string{color:#c63}[theme=base16-monokai] .hljs-meta .hljs-keyword,[theme=base16-monokai] .hljs-meta-keyword{font-weight:700}[theme=base16-nebula]{ + /*! + Theme: Nebula + Author: Gabriel Fontes (https://github.com/Misterio77) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-nebula] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-nebula] code.hljs{padding:3px 5px}[theme=base16-nebula] .hljs{color:#a4a6a9;background:#22273b}[theme=base16-nebula] .hljs ::-moz-selection,[theme=base16-nebula] .hljs::-moz-selection{background-color:#5a8380;color:#a4a6a9}[theme=base16-nebula] .hljs ::selection,[theme=base16-nebula] .hljs::selection{background-color:#5a8380;color:#a4a6a9}[theme=base16-nebula] .hljs-comment{color:#6e6f72}[theme=base16-nebula] .hljs-tag{color:#87888b}[theme=base16-nebula] .hljs-operator,[theme=base16-nebula] .hljs-punctuation,[theme=base16-nebula] .hljs-subst{color:#a4a6a9}[theme=base16-nebula] .hljs-operator{opacity:.7}[theme=base16-nebula] .hljs-bullet,[theme=base16-nebula] .hljs-deletion,[theme=base16-nebula] .hljs-name,[theme=base16-nebula] .hljs-selector-tag,[theme=base16-nebula] .hljs-template-variable,[theme=base16-nebula] .hljs-variable{color:#777abc}[theme=base16-nebula] .hljs-attr,[theme=base16-nebula] .hljs-link,[theme=base16-nebula] .hljs-literal,[theme=base16-nebula] .hljs-number,[theme=base16-nebula] .hljs-symbol,[theme=base16-nebula] .hljs-variable.constant_{color:#94929e}[theme=base16-nebula] .hljs-class .hljs-title,[theme=base16-nebula] .hljs-title,[theme=base16-nebula] .hljs-title.class_{color:#4f9062}[theme=base16-nebula] .hljs-strong{font-weight:700;color:#4f9062}[theme=base16-nebula] .hljs-addition,[theme=base16-nebula] .hljs-code,[theme=base16-nebula] .hljs-string,[theme=base16-nebula] .hljs-title.class_.inherited__{color:#6562a8}[theme=base16-nebula] .hljs-built_in,[theme=base16-nebula] .hljs-doctag,[theme=base16-nebula] .hljs-keyword.hljs-atrule,[theme=base16-nebula] .hljs-quote,[theme=base16-nebula] .hljs-regexp{color:#226f68}[theme=base16-nebula] .hljs-attribute,[theme=base16-nebula] .hljs-function .hljs-title,[theme=base16-nebula] .hljs-section,[theme=base16-nebula] .hljs-title.function_,[theme=base16-nebula] .ruby .hljs-property{color:#4d6bb6}[theme=base16-nebula] .diff .hljs-meta,[theme=base16-nebula] .hljs-keyword,[theme=base16-nebula] .hljs-template-tag,[theme=base16-nebula] .hljs-type{color:#716cae}[theme=base16-nebula] .hljs-emphasis{color:#716cae;font-style:italic}[theme=base16-nebula] .hljs-meta,[theme=base16-nebula] .hljs-meta .hljs-keyword,[theme=base16-nebula] .hljs-meta .hljs-string{color:#8c70a7}[theme=base16-nebula] .hljs-meta .hljs-keyword,[theme=base16-nebula] .hljs-meta-keyword{font-weight:700}[theme=base16-nord]{ + /*! + Theme: Nord + Author: arcticicestudio + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-nord] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-nord] code.hljs{padding:3px 5px}[theme=base16-nord] .hljs{color:#e5e9f0;background:#2e3440}[theme=base16-nord] .hljs ::-moz-selection,[theme=base16-nord] .hljs::-moz-selection{background-color:#434c5e;color:#e5e9f0}[theme=base16-nord] .hljs ::selection,[theme=base16-nord] .hljs::selection{background-color:#434c5e;color:#e5e9f0}[theme=base16-nord] .hljs-comment{color:#4c566a}[theme=base16-nord] .hljs-tag{color:#d8dee9}[theme=base16-nord] .hljs-operator,[theme=base16-nord] .hljs-punctuation,[theme=base16-nord] .hljs-subst{color:#e5e9f0}[theme=base16-nord] .hljs-operator{opacity:.7}[theme=base16-nord] .hljs-bullet,[theme=base16-nord] .hljs-deletion,[theme=base16-nord] .hljs-name,[theme=base16-nord] .hljs-selector-tag,[theme=base16-nord] .hljs-template-variable,[theme=base16-nord] .hljs-variable{color:#bf616a}[theme=base16-nord] .hljs-attr,[theme=base16-nord] .hljs-link,[theme=base16-nord] .hljs-literal,[theme=base16-nord] .hljs-number,[theme=base16-nord] .hljs-symbol,[theme=base16-nord] .hljs-variable.constant_{color:#d08770}[theme=base16-nord] .hljs-class .hljs-title,[theme=base16-nord] .hljs-title,[theme=base16-nord] .hljs-title.class_{color:#ebcb8b}[theme=base16-nord] .hljs-strong{font-weight:700;color:#ebcb8b}[theme=base16-nord] .hljs-addition,[theme=base16-nord] .hljs-code,[theme=base16-nord] .hljs-string,[theme=base16-nord] .hljs-title.class_.inherited__{color:#a3be8c}[theme=base16-nord] .hljs-built_in,[theme=base16-nord] .hljs-doctag,[theme=base16-nord] .hljs-keyword.hljs-atrule,[theme=base16-nord] .hljs-quote,[theme=base16-nord] .hljs-regexp{color:#88c0d0}[theme=base16-nord] .hljs-attribute,[theme=base16-nord] .hljs-function .hljs-title,[theme=base16-nord] .hljs-section,[theme=base16-nord] .hljs-title.function_,[theme=base16-nord] .ruby .hljs-property{color:#81a1c1}[theme=base16-nord] .diff .hljs-meta,[theme=base16-nord] .hljs-keyword,[theme=base16-nord] .hljs-template-tag,[theme=base16-nord] .hljs-type{color:#b48ead}[theme=base16-nord] .hljs-emphasis{color:#b48ead;font-style:italic}[theme=base16-nord] .hljs-meta,[theme=base16-nord] .hljs-meta .hljs-keyword,[theme=base16-nord] .hljs-meta .hljs-string{color:#5e81ac}[theme=base16-nord] .hljs-meta .hljs-keyword,[theme=base16-nord] .hljs-meta-keyword{font-weight:700}[theme=base16-nova]{ + /*! + Theme: Nova + Author: George Essig (https://github.com/gessig), Trevor D. Miller (https://trevordmiller.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-nova] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-nova] code.hljs{padding:3px 5px}[theme=base16-nova] .hljs{color:#c5d4dd;background:#3c4c55}[theme=base16-nova] .hljs ::-moz-selection,[theme=base16-nova] .hljs::-moz-selection{background-color:#6a7d89;color:#c5d4dd}[theme=base16-nova] .hljs ::selection,[theme=base16-nova] .hljs::selection{background-color:#6a7d89;color:#c5d4dd}[theme=base16-nova] .hljs-comment,[theme=base16-nova] .hljs-tag{color:#899ba6}[theme=base16-nova] .hljs-operator,[theme=base16-nova] .hljs-punctuation,[theme=base16-nova] .hljs-subst{color:#c5d4dd}[theme=base16-nova] .hljs-operator{opacity:.7}[theme=base16-nova] .hljs-bullet,[theme=base16-nova] .hljs-deletion,[theme=base16-nova] .hljs-name,[theme=base16-nova] .hljs-selector-tag,[theme=base16-nova] .hljs-template-variable,[theme=base16-nova] .hljs-variable{color:#83afe5}[theme=base16-nova] .hljs-attr,[theme=base16-nova] .hljs-link,[theme=base16-nova] .hljs-literal,[theme=base16-nova] .hljs-number,[theme=base16-nova] .hljs-symbol,[theme=base16-nova] .hljs-variable.constant_{color:#7fc1ca}[theme=base16-nova] .hljs-class .hljs-title,[theme=base16-nova] .hljs-title,[theme=base16-nova] .hljs-title.class_{color:#a8ce93}[theme=base16-nova] .hljs-strong{font-weight:700;color:#a8ce93}[theme=base16-nova] .hljs-addition,[theme=base16-nova] .hljs-code,[theme=base16-nova] .hljs-string,[theme=base16-nova] .hljs-title.class_.inherited__{color:#7fc1ca}[theme=base16-nova] .hljs-built_in,[theme=base16-nova] .hljs-doctag,[theme=base16-nova] .hljs-keyword.hljs-atrule,[theme=base16-nova] .hljs-quote,[theme=base16-nova] .hljs-regexp{color:#f2c38f}[theme=base16-nova] .hljs-attribute,[theme=base16-nova] .hljs-function .hljs-title,[theme=base16-nova] .hljs-section,[theme=base16-nova] .hljs-title.function_,[theme=base16-nova] .ruby .hljs-property{color:#83afe5}[theme=base16-nova] .diff .hljs-meta,[theme=base16-nova] .hljs-keyword,[theme=base16-nova] .hljs-template-tag,[theme=base16-nova] .hljs-type{color:#9a93e1}[theme=base16-nova] .hljs-emphasis{color:#9a93e1;font-style:italic}[theme=base16-nova] .hljs-meta,[theme=base16-nova] .hljs-meta .hljs-keyword,[theme=base16-nova] .hljs-meta .hljs-string{color:#f2c38f}[theme=base16-nova] .hljs-meta .hljs-keyword,[theme=base16-nova] .hljs-meta-keyword{font-weight:700}[theme=base16-ocean]{ + /*! + Theme: Ocean + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ocean] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ocean] code.hljs{padding:3px 5px}[theme=base16-ocean] .hljs{color:#c0c5ce;background:#2b303b}[theme=base16-ocean] .hljs ::-moz-selection,[theme=base16-ocean] .hljs::-moz-selection{background-color:#4f5b66;color:#c0c5ce}[theme=base16-ocean] .hljs ::selection,[theme=base16-ocean] .hljs::selection{background-color:#4f5b66;color:#c0c5ce}[theme=base16-ocean] .hljs-comment{color:#65737e}[theme=base16-ocean] .hljs-tag{color:#a7adba}[theme=base16-ocean] .hljs-operator,[theme=base16-ocean] .hljs-punctuation,[theme=base16-ocean] .hljs-subst{color:#c0c5ce}[theme=base16-ocean] .hljs-operator{opacity:.7}[theme=base16-ocean] .hljs-bullet,[theme=base16-ocean] .hljs-deletion,[theme=base16-ocean] .hljs-name,[theme=base16-ocean] .hljs-selector-tag,[theme=base16-ocean] .hljs-template-variable,[theme=base16-ocean] .hljs-variable{color:#bf616a}[theme=base16-ocean] .hljs-attr,[theme=base16-ocean] .hljs-link,[theme=base16-ocean] .hljs-literal,[theme=base16-ocean] .hljs-number,[theme=base16-ocean] .hljs-symbol,[theme=base16-ocean] .hljs-variable.constant_{color:#d08770}[theme=base16-ocean] .hljs-class .hljs-title,[theme=base16-ocean] .hljs-title,[theme=base16-ocean] .hljs-title.class_{color:#ebcb8b}[theme=base16-ocean] .hljs-strong{font-weight:700;color:#ebcb8b}[theme=base16-ocean] .hljs-addition,[theme=base16-ocean] .hljs-code,[theme=base16-ocean] .hljs-string,[theme=base16-ocean] .hljs-title.class_.inherited__{color:#a3be8c}[theme=base16-ocean] .hljs-built_in,[theme=base16-ocean] .hljs-doctag,[theme=base16-ocean] .hljs-keyword.hljs-atrule,[theme=base16-ocean] .hljs-quote,[theme=base16-ocean] .hljs-regexp{color:#96b5b4}[theme=base16-ocean] .hljs-attribute,[theme=base16-ocean] .hljs-function .hljs-title,[theme=base16-ocean] .hljs-section,[theme=base16-ocean] .hljs-title.function_,[theme=base16-ocean] .ruby .hljs-property{color:#8fa1b3}[theme=base16-ocean] .diff .hljs-meta,[theme=base16-ocean] .hljs-keyword,[theme=base16-ocean] .hljs-template-tag,[theme=base16-ocean] .hljs-type{color:#b48ead}[theme=base16-ocean] .hljs-emphasis{color:#b48ead;font-style:italic}[theme=base16-ocean] .hljs-meta,[theme=base16-ocean] .hljs-meta .hljs-keyword,[theme=base16-ocean] .hljs-meta .hljs-string{color:#ab7967}[theme=base16-ocean] .hljs-meta .hljs-keyword,[theme=base16-ocean] .hljs-meta-keyword{font-weight:700}[theme=base16-oceanicnext]{ + /*! + Theme: OceanicNext + Author: https://github.com/voronianski/oceanic-next-color-scheme + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-oceanicnext] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-oceanicnext] code.hljs{padding:3px 5px}[theme=base16-oceanicnext] .hljs{color:#c0c5ce;background:#1b2b34}[theme=base16-oceanicnext] .hljs ::-moz-selection,[theme=base16-oceanicnext] .hljs::-moz-selection{background-color:#4f5b66;color:#c0c5ce}[theme=base16-oceanicnext] .hljs ::selection,[theme=base16-oceanicnext] .hljs::selection{background-color:#4f5b66;color:#c0c5ce}[theme=base16-oceanicnext] .hljs-comment{color:#65737e}[theme=base16-oceanicnext] .hljs-tag{color:#a7adba}[theme=base16-oceanicnext] .hljs-operator,[theme=base16-oceanicnext] .hljs-punctuation,[theme=base16-oceanicnext] .hljs-subst{color:#c0c5ce}[theme=base16-oceanicnext] .hljs-operator{opacity:.7}[theme=base16-oceanicnext] .hljs-bullet,[theme=base16-oceanicnext] .hljs-deletion,[theme=base16-oceanicnext] .hljs-name,[theme=base16-oceanicnext] .hljs-selector-tag,[theme=base16-oceanicnext] .hljs-template-variable,[theme=base16-oceanicnext] .hljs-variable{color:#ec5f67}[theme=base16-oceanicnext] .hljs-attr,[theme=base16-oceanicnext] .hljs-link,[theme=base16-oceanicnext] .hljs-literal,[theme=base16-oceanicnext] .hljs-number,[theme=base16-oceanicnext] .hljs-symbol,[theme=base16-oceanicnext] .hljs-variable.constant_{color:#f99157}[theme=base16-oceanicnext] .hljs-class .hljs-title,[theme=base16-oceanicnext] .hljs-title,[theme=base16-oceanicnext] .hljs-title.class_{color:#fac863}[theme=base16-oceanicnext] .hljs-strong{font-weight:700;color:#fac863}[theme=base16-oceanicnext] .hljs-addition,[theme=base16-oceanicnext] .hljs-code,[theme=base16-oceanicnext] .hljs-string,[theme=base16-oceanicnext] .hljs-title.class_.inherited__{color:#99c794}[theme=base16-oceanicnext] .hljs-built_in,[theme=base16-oceanicnext] .hljs-doctag,[theme=base16-oceanicnext] .hljs-keyword.hljs-atrule,[theme=base16-oceanicnext] .hljs-quote,[theme=base16-oceanicnext] .hljs-regexp{color:#5fb3b3}[theme=base16-oceanicnext] .hljs-attribute,[theme=base16-oceanicnext] .hljs-function .hljs-title,[theme=base16-oceanicnext] .hljs-section,[theme=base16-oceanicnext] .hljs-title.function_,[theme=base16-oceanicnext] .ruby .hljs-property{color:#69c}[theme=base16-oceanicnext] .diff .hljs-meta,[theme=base16-oceanicnext] .hljs-keyword,[theme=base16-oceanicnext] .hljs-template-tag,[theme=base16-oceanicnext] .hljs-type{color:#c594c5}[theme=base16-oceanicnext] .hljs-emphasis{color:#c594c5;font-style:italic}[theme=base16-oceanicnext] .hljs-meta,[theme=base16-oceanicnext] .hljs-meta .hljs-keyword,[theme=base16-oceanicnext] .hljs-meta .hljs-string{color:#ab7967}[theme=base16-oceanicnext] .hljs-meta .hljs-keyword,[theme=base16-oceanicnext] .hljs-meta-keyword{font-weight:700}[theme=base16-one-light]{ + /*! + Theme: One Light + Author: Daniel Pfeifer (http://github.com/purpleKarrot) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-one-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-one-light] code.hljs{padding:3px 5px}[theme=base16-one-light] .hljs{color:#383a42;background:#fafafa}[theme=base16-one-light] .hljs ::-moz-selection,[theme=base16-one-light] .hljs::-moz-selection{background-color:#e5e5e6;color:#383a42}[theme=base16-one-light] .hljs ::selection,[theme=base16-one-light] .hljs::selection{background-color:#e5e5e6;color:#383a42}[theme=base16-one-light] .hljs-comment{color:#a0a1a7}[theme=base16-one-light] .hljs-tag{color:#696c77}[theme=base16-one-light] .hljs-operator,[theme=base16-one-light] .hljs-punctuation,[theme=base16-one-light] .hljs-subst{color:#383a42}[theme=base16-one-light] .hljs-operator{opacity:.7}[theme=base16-one-light] .hljs-bullet,[theme=base16-one-light] .hljs-deletion,[theme=base16-one-light] .hljs-name,[theme=base16-one-light] .hljs-selector-tag,[theme=base16-one-light] .hljs-template-variable,[theme=base16-one-light] .hljs-variable{color:#ca1243}[theme=base16-one-light] .hljs-attr,[theme=base16-one-light] .hljs-link,[theme=base16-one-light] .hljs-literal,[theme=base16-one-light] .hljs-number,[theme=base16-one-light] .hljs-symbol,[theme=base16-one-light] .hljs-variable.constant_{color:#d75f00}[theme=base16-one-light] .hljs-class .hljs-title,[theme=base16-one-light] .hljs-title,[theme=base16-one-light] .hljs-title.class_{color:#c18401}[theme=base16-one-light] .hljs-strong{font-weight:700;color:#c18401}[theme=base16-one-light] .hljs-addition,[theme=base16-one-light] .hljs-code,[theme=base16-one-light] .hljs-string,[theme=base16-one-light] .hljs-title.class_.inherited__{color:#50a14f}[theme=base16-one-light] .hljs-built_in,[theme=base16-one-light] .hljs-doctag,[theme=base16-one-light] .hljs-keyword.hljs-atrule,[theme=base16-one-light] .hljs-quote,[theme=base16-one-light] .hljs-regexp{color:#0184bc}[theme=base16-one-light] .hljs-attribute,[theme=base16-one-light] .hljs-function .hljs-title,[theme=base16-one-light] .hljs-section,[theme=base16-one-light] .hljs-title.function_,[theme=base16-one-light] .ruby .hljs-property{color:#4078f2}[theme=base16-one-light] .diff .hljs-meta,[theme=base16-one-light] .hljs-keyword,[theme=base16-one-light] .hljs-template-tag,[theme=base16-one-light] .hljs-type{color:#a626a4}[theme=base16-one-light] .hljs-emphasis{color:#a626a4;font-style:italic}[theme=base16-one-light] .hljs-meta,[theme=base16-one-light] .hljs-meta .hljs-keyword,[theme=base16-one-light] .hljs-meta .hljs-string{color:#986801}[theme=base16-one-light] .hljs-meta .hljs-keyword,[theme=base16-one-light] .hljs-meta-keyword{font-weight:700}[theme=base16-onedark]{ + /*! + Theme: OneDark + Author: Lalit Magant (http://github.com/tilal6991) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-onedark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-onedark] code.hljs{padding:3px 5px}[theme=base16-onedark] .hljs{color:#abb2bf;background:#282c34}[theme=base16-onedark] .hljs ::-moz-selection,[theme=base16-onedark] .hljs::-moz-selection{background-color:#3e4451;color:#abb2bf}[theme=base16-onedark] .hljs ::selection,[theme=base16-onedark] .hljs::selection{background-color:#3e4451;color:#abb2bf}[theme=base16-onedark] .hljs-comment{color:#545862}[theme=base16-onedark] .hljs-tag{color:#565c64}[theme=base16-onedark] .hljs-operator,[theme=base16-onedark] .hljs-punctuation,[theme=base16-onedark] .hljs-subst{color:#abb2bf}[theme=base16-onedark] .hljs-operator{opacity:.7}[theme=base16-onedark] .hljs-bullet,[theme=base16-onedark] .hljs-deletion,[theme=base16-onedark] .hljs-name,[theme=base16-onedark] .hljs-selector-tag,[theme=base16-onedark] .hljs-template-variable,[theme=base16-onedark] .hljs-variable{color:#e06c75}[theme=base16-onedark] .hljs-attr,[theme=base16-onedark] .hljs-link,[theme=base16-onedark] .hljs-literal,[theme=base16-onedark] .hljs-number,[theme=base16-onedark] .hljs-symbol,[theme=base16-onedark] .hljs-variable.constant_{color:#d19a66}[theme=base16-onedark] .hljs-class .hljs-title,[theme=base16-onedark] .hljs-title,[theme=base16-onedark] .hljs-title.class_{color:#e5c07b}[theme=base16-onedark] .hljs-strong{font-weight:700;color:#e5c07b}[theme=base16-onedark] .hljs-addition,[theme=base16-onedark] .hljs-code,[theme=base16-onedark] .hljs-string,[theme=base16-onedark] .hljs-title.class_.inherited__{color:#98c379}[theme=base16-onedark] .hljs-built_in,[theme=base16-onedark] .hljs-doctag,[theme=base16-onedark] .hljs-keyword.hljs-atrule,[theme=base16-onedark] .hljs-quote,[theme=base16-onedark] .hljs-regexp{color:#56b6c2}[theme=base16-onedark] .hljs-attribute,[theme=base16-onedark] .hljs-function .hljs-title,[theme=base16-onedark] .hljs-section,[theme=base16-onedark] .hljs-title.function_,[theme=base16-onedark] .ruby .hljs-property{color:#61afef}[theme=base16-onedark] .diff .hljs-meta,[theme=base16-onedark] .hljs-keyword,[theme=base16-onedark] .hljs-template-tag,[theme=base16-onedark] .hljs-type{color:#c678dd}[theme=base16-onedark] .hljs-emphasis{color:#c678dd;font-style:italic}[theme=base16-onedark] .hljs-meta,[theme=base16-onedark] .hljs-meta .hljs-keyword,[theme=base16-onedark] .hljs-meta .hljs-string{color:#be5046}[theme=base16-onedark] .hljs-meta .hljs-keyword,[theme=base16-onedark] .hljs-meta-keyword{font-weight:700}[theme=base16-outrun-dark]{ + /*! + Theme: Outrun Dark + Author: Hugo Delahousse (http://github.com/hugodelahousse/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-outrun-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-outrun-dark] code.hljs{padding:3px 5px}[theme=base16-outrun-dark] .hljs{color:#d0d0fa;background:#00002a}[theme=base16-outrun-dark] .hljs ::-moz-selection,[theme=base16-outrun-dark] .hljs::-moz-selection{background-color:#30305a;color:#d0d0fa}[theme=base16-outrun-dark] .hljs ::selection,[theme=base16-outrun-dark] .hljs::selection{background-color:#30305a;color:#d0d0fa}[theme=base16-outrun-dark] .hljs-comment{color:#50507a}[theme=base16-outrun-dark] .hljs-tag{color:#b0b0da}[theme=base16-outrun-dark] .hljs-operator,[theme=base16-outrun-dark] .hljs-punctuation,[theme=base16-outrun-dark] .hljs-subst{color:#d0d0fa}[theme=base16-outrun-dark] .hljs-operator{opacity:.7}[theme=base16-outrun-dark] .hljs-bullet,[theme=base16-outrun-dark] .hljs-deletion,[theme=base16-outrun-dark] .hljs-name,[theme=base16-outrun-dark] .hljs-selector-tag,[theme=base16-outrun-dark] .hljs-template-variable,[theme=base16-outrun-dark] .hljs-variable{color:#ff4242}[theme=base16-outrun-dark] .hljs-attr,[theme=base16-outrun-dark] .hljs-link,[theme=base16-outrun-dark] .hljs-literal,[theme=base16-outrun-dark] .hljs-number,[theme=base16-outrun-dark] .hljs-symbol,[theme=base16-outrun-dark] .hljs-variable.constant_{color:#fc8d28}[theme=base16-outrun-dark] .hljs-class .hljs-title,[theme=base16-outrun-dark] .hljs-title,[theme=base16-outrun-dark] .hljs-title.class_{color:#f3e877}[theme=base16-outrun-dark] .hljs-strong{font-weight:700;color:#f3e877}[theme=base16-outrun-dark] .hljs-addition,[theme=base16-outrun-dark] .hljs-code,[theme=base16-outrun-dark] .hljs-string,[theme=base16-outrun-dark] .hljs-title.class_.inherited__{color:#59f176}[theme=base16-outrun-dark] .hljs-built_in,[theme=base16-outrun-dark] .hljs-doctag,[theme=base16-outrun-dark] .hljs-keyword.hljs-atrule,[theme=base16-outrun-dark] .hljs-quote,[theme=base16-outrun-dark] .hljs-regexp{color:#0ef0f0}[theme=base16-outrun-dark] .hljs-attribute,[theme=base16-outrun-dark] .hljs-function .hljs-title,[theme=base16-outrun-dark] .hljs-section,[theme=base16-outrun-dark] .hljs-title.function_,[theme=base16-outrun-dark] .ruby .hljs-property{color:#66b0ff}[theme=base16-outrun-dark] .diff .hljs-meta,[theme=base16-outrun-dark] .hljs-keyword,[theme=base16-outrun-dark] .hljs-template-tag,[theme=base16-outrun-dark] .hljs-type{color:#f10596}[theme=base16-outrun-dark] .hljs-emphasis{color:#f10596;font-style:italic}[theme=base16-outrun-dark] .hljs-meta,[theme=base16-outrun-dark] .hljs-meta .hljs-keyword,[theme=base16-outrun-dark] .hljs-meta .hljs-string{color:#f003ef}[theme=base16-outrun-dark] .hljs-meta .hljs-keyword,[theme=base16-outrun-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-papercolor-dark]{ + /*! + Theme: PaperColor Dark + Author: Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-papercolor-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-papercolor-dark] code.hljs{padding:3px 5px}[theme=base16-papercolor-dark] .hljs{color:grey;background:#1c1c1c}[theme=base16-papercolor-dark] .hljs ::-moz-selection,[theme=base16-papercolor-dark] .hljs::-moz-selection{background-color:#5faf00;color:grey}[theme=base16-papercolor-dark] .hljs ::selection,[theme=base16-papercolor-dark] .hljs::selection{background-color:#5faf00;color:grey}[theme=base16-papercolor-dark] .hljs-comment{color:#d7af5f}[theme=base16-papercolor-dark] .hljs-tag{color:#5fafd7}[theme=base16-papercolor-dark] .hljs-operator,[theme=base16-papercolor-dark] .hljs-punctuation,[theme=base16-papercolor-dark] .hljs-subst{color:grey}[theme=base16-papercolor-dark] .hljs-operator{opacity:.7}[theme=base16-papercolor-dark] .hljs-bullet,[theme=base16-papercolor-dark] .hljs-deletion,[theme=base16-papercolor-dark] .hljs-name,[theme=base16-papercolor-dark] .hljs-selector-tag,[theme=base16-papercolor-dark] .hljs-template-variable,[theme=base16-papercolor-dark] .hljs-variable{color:#585858}[theme=base16-papercolor-dark] .hljs-attr,[theme=base16-papercolor-dark] .hljs-link,[theme=base16-papercolor-dark] .hljs-literal,[theme=base16-papercolor-dark] .hljs-number,[theme=base16-papercolor-dark] .hljs-symbol,[theme=base16-papercolor-dark] .hljs-variable.constant_{color:#5faf5f}[theme=base16-papercolor-dark] .hljs-class .hljs-title,[theme=base16-papercolor-dark] .hljs-title,[theme=base16-papercolor-dark] .hljs-title.class_{color:#afd700}[theme=base16-papercolor-dark] .hljs-strong{font-weight:700;color:#afd700}[theme=base16-papercolor-dark] .hljs-addition,[theme=base16-papercolor-dark] .hljs-code,[theme=base16-papercolor-dark] .hljs-string,[theme=base16-papercolor-dark] .hljs-title.class_.inherited__{color:#af87d7}[theme=base16-papercolor-dark] .hljs-built_in,[theme=base16-papercolor-dark] .hljs-doctag,[theme=base16-papercolor-dark] .hljs-keyword.hljs-atrule,[theme=base16-papercolor-dark] .hljs-quote,[theme=base16-papercolor-dark] .hljs-regexp{color:#ffaf00}[theme=base16-papercolor-dark] .hljs-attribute,[theme=base16-papercolor-dark] .hljs-function .hljs-title,[theme=base16-papercolor-dark] .hljs-section,[theme=base16-papercolor-dark] .hljs-title.function_,[theme=base16-papercolor-dark] .ruby .hljs-property{color:#ff5faf}[theme=base16-papercolor-dark] .diff .hljs-meta,[theme=base16-papercolor-dark] .hljs-keyword,[theme=base16-papercolor-dark] .hljs-template-tag,[theme=base16-papercolor-dark] .hljs-type{color:#00afaf}[theme=base16-papercolor-dark] .hljs-emphasis{color:#00afaf;font-style:italic}[theme=base16-papercolor-dark] .hljs-meta,[theme=base16-papercolor-dark] .hljs-meta .hljs-keyword,[theme=base16-papercolor-dark] .hljs-meta .hljs-string{color:#5f8787}[theme=base16-papercolor-dark] .hljs-meta .hljs-keyword,[theme=base16-papercolor-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-papercolor-light]{ + /*! + Theme: PaperColor Light + Author: Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-papercolor-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-papercolor-light] code.hljs{padding:3px 5px}[theme=base16-papercolor-light] .hljs{color:#444;background:#eee}[theme=base16-papercolor-light] .hljs ::-moz-selection,[theme=base16-papercolor-light] .hljs::-moz-selection{background-color:#008700;color:#444}[theme=base16-papercolor-light] .hljs ::selection,[theme=base16-papercolor-light] .hljs::selection{background-color:#008700;color:#444}[theme=base16-papercolor-light] .hljs-comment{color:#5f8700}[theme=base16-papercolor-light] .hljs-tag{color:#0087af}[theme=base16-papercolor-light] .hljs-operator,[theme=base16-papercolor-light] .hljs-punctuation,[theme=base16-papercolor-light] .hljs-subst{color:#444}[theme=base16-papercolor-light] .hljs-operator{opacity:.7}[theme=base16-papercolor-light] .hljs-bullet,[theme=base16-papercolor-light] .hljs-deletion,[theme=base16-papercolor-light] .hljs-name,[theme=base16-papercolor-light] .hljs-selector-tag,[theme=base16-papercolor-light] .hljs-template-variable,[theme=base16-papercolor-light] .hljs-variable{color:#bcbcbc}[theme=base16-papercolor-light] .hljs-attr,[theme=base16-papercolor-light] .hljs-link,[theme=base16-papercolor-light] .hljs-literal,[theme=base16-papercolor-light] .hljs-number,[theme=base16-papercolor-light] .hljs-symbol,[theme=base16-papercolor-light] .hljs-variable.constant_{color:#d70000}[theme=base16-papercolor-light] .hljs-class .hljs-title,[theme=base16-papercolor-light] .hljs-title,[theme=base16-papercolor-light] .hljs-title.class_{color:#d70087}[theme=base16-papercolor-light] .hljs-strong{font-weight:700;color:#d70087}[theme=base16-papercolor-light] .hljs-addition,[theme=base16-papercolor-light] .hljs-code,[theme=base16-papercolor-light] .hljs-string,[theme=base16-papercolor-light] .hljs-title.class_.inherited__{color:#8700af}[theme=base16-papercolor-light] .hljs-attribute,[theme=base16-papercolor-light] .hljs-built_in,[theme=base16-papercolor-light] .hljs-doctag,[theme=base16-papercolor-light] .hljs-function .hljs-title,[theme=base16-papercolor-light] .hljs-keyword.hljs-atrule,[theme=base16-papercolor-light] .hljs-quote,[theme=base16-papercolor-light] .hljs-regexp,[theme=base16-papercolor-light] .hljs-section,[theme=base16-papercolor-light] .hljs-title.function_,[theme=base16-papercolor-light] .ruby .hljs-property{color:#d75f00}[theme=base16-papercolor-light] .diff .hljs-meta,[theme=base16-papercolor-light] .hljs-keyword,[theme=base16-papercolor-light] .hljs-template-tag,[theme=base16-papercolor-light] .hljs-type{color:#005faf}[theme=base16-papercolor-light] .hljs-emphasis{color:#005faf;font-style:italic}[theme=base16-papercolor-light] .hljs-meta,[theme=base16-papercolor-light] .hljs-meta .hljs-keyword,[theme=base16-papercolor-light] .hljs-meta .hljs-string{color:#005f87}[theme=base16-papercolor-light] .hljs-meta .hljs-keyword,[theme=base16-papercolor-light] .hljs-meta-keyword{font-weight:700}[theme=base16-paraiso]{ + /*! + Theme: Paraiso + Author: Jan T. Sott + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-paraiso] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-paraiso] code.hljs{padding:3px 5px}[theme=base16-paraiso] .hljs{color:#a39e9b;background:#2f1e2e}[theme=base16-paraiso] .hljs ::-moz-selection,[theme=base16-paraiso] .hljs::-moz-selection{background-color:#4f424c;color:#a39e9b}[theme=base16-paraiso] .hljs ::selection,[theme=base16-paraiso] .hljs::selection{background-color:#4f424c;color:#a39e9b}[theme=base16-paraiso] .hljs-comment{color:#776e71}[theme=base16-paraiso] .hljs-tag{color:#8d8687}[theme=base16-paraiso] .hljs-operator,[theme=base16-paraiso] .hljs-punctuation,[theme=base16-paraiso] .hljs-subst{color:#a39e9b}[theme=base16-paraiso] .hljs-operator{opacity:.7}[theme=base16-paraiso] .hljs-bullet,[theme=base16-paraiso] .hljs-deletion,[theme=base16-paraiso] .hljs-name,[theme=base16-paraiso] .hljs-selector-tag,[theme=base16-paraiso] .hljs-template-variable,[theme=base16-paraiso] .hljs-variable{color:#ef6155}[theme=base16-paraiso] .hljs-attr,[theme=base16-paraiso] .hljs-link,[theme=base16-paraiso] .hljs-literal,[theme=base16-paraiso] .hljs-number,[theme=base16-paraiso] .hljs-symbol,[theme=base16-paraiso] .hljs-variable.constant_{color:#f99b15}[theme=base16-paraiso] .hljs-class .hljs-title,[theme=base16-paraiso] .hljs-title,[theme=base16-paraiso] .hljs-title.class_{color:#fec418}[theme=base16-paraiso] .hljs-strong{font-weight:700;color:#fec418}[theme=base16-paraiso] .hljs-addition,[theme=base16-paraiso] .hljs-code,[theme=base16-paraiso] .hljs-string,[theme=base16-paraiso] .hljs-title.class_.inherited__{color:#48b685}[theme=base16-paraiso] .hljs-built_in,[theme=base16-paraiso] .hljs-doctag,[theme=base16-paraiso] .hljs-keyword.hljs-atrule,[theme=base16-paraiso] .hljs-quote,[theme=base16-paraiso] .hljs-regexp{color:#5bc4bf}[theme=base16-paraiso] .hljs-attribute,[theme=base16-paraiso] .hljs-function .hljs-title,[theme=base16-paraiso] .hljs-section,[theme=base16-paraiso] .hljs-title.function_,[theme=base16-paraiso] .ruby .hljs-property{color:#06b6ef}[theme=base16-paraiso] .diff .hljs-meta,[theme=base16-paraiso] .hljs-keyword,[theme=base16-paraiso] .hljs-template-tag,[theme=base16-paraiso] .hljs-type{color:#815ba4}[theme=base16-paraiso] .hljs-emphasis{color:#815ba4;font-style:italic}[theme=base16-paraiso] .hljs-meta,[theme=base16-paraiso] .hljs-meta .hljs-keyword,[theme=base16-paraiso] .hljs-meta .hljs-string{color:#e96ba8}[theme=base16-paraiso] .hljs-meta .hljs-keyword,[theme=base16-paraiso] .hljs-meta-keyword{font-weight:700}[theme=base16-pasque]{ + /*! + Theme: Pasque + Author: Gabriel Fontes (https://github.com/Misterio77) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-pasque] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-pasque] code.hljs{padding:3px 5px}[theme=base16-pasque] .hljs{color:#dedcdf;background:#271c3a}[theme=base16-pasque] .hljs ::-moz-selection,[theme=base16-pasque] .hljs::-moz-selection{background-color:#3e2d5c;color:#dedcdf}[theme=base16-pasque] .hljs ::selection,[theme=base16-pasque] .hljs::selection{background-color:#3e2d5c;color:#dedcdf}[theme=base16-pasque] .hljs-comment{color:#5d5766}[theme=base16-pasque] .hljs-tag{color:#bebcbf}[theme=base16-pasque] .hljs-operator,[theme=base16-pasque] .hljs-punctuation,[theme=base16-pasque] .hljs-subst{color:#dedcdf}[theme=base16-pasque] .hljs-operator{opacity:.7}[theme=base16-pasque] .hljs-bullet,[theme=base16-pasque] .hljs-deletion,[theme=base16-pasque] .hljs-name,[theme=base16-pasque] .hljs-selector-tag,[theme=base16-pasque] .hljs-template-variable,[theme=base16-pasque] .hljs-variable{color:#a92258}[theme=base16-pasque] .hljs-attr,[theme=base16-pasque] .hljs-link,[theme=base16-pasque] .hljs-literal,[theme=base16-pasque] .hljs-number,[theme=base16-pasque] .hljs-symbol,[theme=base16-pasque] .hljs-variable.constant_{color:#918889}[theme=base16-pasque] .hljs-class .hljs-title,[theme=base16-pasque] .hljs-title,[theme=base16-pasque] .hljs-title.class_{color:#804ead}[theme=base16-pasque] .hljs-strong{font-weight:700;color:#804ead}[theme=base16-pasque] .hljs-addition,[theme=base16-pasque] .hljs-code,[theme=base16-pasque] .hljs-string,[theme=base16-pasque] .hljs-title.class_.inherited__{color:#c6914b}[theme=base16-pasque] .hljs-built_in,[theme=base16-pasque] .hljs-doctag,[theme=base16-pasque] .hljs-keyword.hljs-atrule,[theme=base16-pasque] .hljs-quote,[theme=base16-pasque] .hljs-regexp{color:#7263aa}[theme=base16-pasque] .hljs-attribute,[theme=base16-pasque] .hljs-function .hljs-title,[theme=base16-pasque] .hljs-section,[theme=base16-pasque] .hljs-title.function_,[theme=base16-pasque] .ruby .hljs-property{color:#8e7dc6}[theme=base16-pasque] .diff .hljs-meta,[theme=base16-pasque] .hljs-keyword,[theme=base16-pasque] .hljs-template-tag,[theme=base16-pasque] .hljs-type{color:#953b9d}[theme=base16-pasque] .hljs-emphasis{color:#953b9d;font-style:italic}[theme=base16-pasque] .hljs-meta,[theme=base16-pasque] .hljs-meta .hljs-keyword,[theme=base16-pasque] .hljs-meta .hljs-string{color:#59325c}[theme=base16-pasque] .hljs-meta .hljs-keyword,[theme=base16-pasque] .hljs-meta-keyword{font-weight:700}[theme=base16-phd]{ + /*! + Theme: PhD + Author: Hennig Hasemann (http://leetless.de/vim.html) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-phd] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-phd] code.hljs{padding:3px 5px}[theme=base16-phd] .hljs{color:#b8bbc2;background:#061229}[theme=base16-phd] .hljs ::-moz-selection,[theme=base16-phd] .hljs::-moz-selection{background-color:#4d5666;color:#b8bbc2}[theme=base16-phd] .hljs ::selection,[theme=base16-phd] .hljs::selection{background-color:#4d5666;color:#b8bbc2}[theme=base16-phd] .hljs-comment{color:#717885}[theme=base16-phd] .hljs-tag{color:#9a99a3}[theme=base16-phd] .hljs-operator,[theme=base16-phd] .hljs-punctuation,[theme=base16-phd] .hljs-subst{color:#b8bbc2}[theme=base16-phd] .hljs-operator{opacity:.7}[theme=base16-phd] .hljs-bullet,[theme=base16-phd] .hljs-deletion,[theme=base16-phd] .hljs-name,[theme=base16-phd] .hljs-selector-tag,[theme=base16-phd] .hljs-template-variable,[theme=base16-phd] .hljs-variable{color:#d07346}[theme=base16-phd] .hljs-attr,[theme=base16-phd] .hljs-link,[theme=base16-phd] .hljs-literal,[theme=base16-phd] .hljs-number,[theme=base16-phd] .hljs-symbol,[theme=base16-phd] .hljs-variable.constant_{color:#f0a000}[theme=base16-phd] .hljs-class .hljs-title,[theme=base16-phd] .hljs-title,[theme=base16-phd] .hljs-title.class_{color:#fbd461}[theme=base16-phd] .hljs-strong{font-weight:700;color:#fbd461}[theme=base16-phd] .hljs-addition,[theme=base16-phd] .hljs-code,[theme=base16-phd] .hljs-string,[theme=base16-phd] .hljs-title.class_.inherited__{color:#99bf52}[theme=base16-phd] .hljs-built_in,[theme=base16-phd] .hljs-doctag,[theme=base16-phd] .hljs-keyword.hljs-atrule,[theme=base16-phd] .hljs-quote,[theme=base16-phd] .hljs-regexp{color:#72b9bf}[theme=base16-phd] .hljs-attribute,[theme=base16-phd] .hljs-function .hljs-title,[theme=base16-phd] .hljs-section,[theme=base16-phd] .hljs-title.function_,[theme=base16-phd] .ruby .hljs-property{color:#5299bf}[theme=base16-phd] .diff .hljs-meta,[theme=base16-phd] .hljs-keyword,[theme=base16-phd] .hljs-template-tag,[theme=base16-phd] .hljs-type{color:#9989cc}[theme=base16-phd] .hljs-emphasis{color:#9989cc;font-style:italic}[theme=base16-phd] .hljs-meta,[theme=base16-phd] .hljs-meta .hljs-keyword,[theme=base16-phd] .hljs-meta .hljs-string{color:#b08060}[theme=base16-phd] .hljs-meta .hljs-keyword,[theme=base16-phd] .hljs-meta-keyword{font-weight:700}[theme=base16-pico]{ + /*! + Theme: Pico + Author: PICO-8 (http://www.lexaloffle.com/pico-8.php) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-pico] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-pico] code.hljs{padding:3px 5px}[theme=base16-pico] .hljs{color:#5f574f;background:#000}[theme=base16-pico] .hljs ::-moz-selection,[theme=base16-pico] .hljs::-moz-selection{background-color:#7e2553;color:#5f574f}[theme=base16-pico] .hljs ::selection,[theme=base16-pico] .hljs::selection{background-color:#7e2553;color:#5f574f}[theme=base16-pico] .hljs-comment{color:#008751}[theme=base16-pico] .hljs-tag{color:#ab5236}[theme=base16-pico] .hljs-operator,[theme=base16-pico] .hljs-punctuation,[theme=base16-pico] .hljs-subst{color:#5f574f}[theme=base16-pico] .hljs-operator{opacity:.7}[theme=base16-pico] .hljs-bullet,[theme=base16-pico] .hljs-deletion,[theme=base16-pico] .hljs-name,[theme=base16-pico] .hljs-selector-tag,[theme=base16-pico] .hljs-template-variable,[theme=base16-pico] .hljs-variable{color:#ff004d}[theme=base16-pico] .hljs-attr,[theme=base16-pico] .hljs-link,[theme=base16-pico] .hljs-literal,[theme=base16-pico] .hljs-number,[theme=base16-pico] .hljs-symbol,[theme=base16-pico] .hljs-variable.constant_{color:#ffa300}[theme=base16-pico] .hljs-class .hljs-title,[theme=base16-pico] .hljs-title,[theme=base16-pico] .hljs-title.class_{color:#fff024}[theme=base16-pico] .hljs-strong{font-weight:700;color:#fff024}[theme=base16-pico] .hljs-addition,[theme=base16-pico] .hljs-code,[theme=base16-pico] .hljs-string,[theme=base16-pico] .hljs-title.class_.inherited__{color:#00e756}[theme=base16-pico] .hljs-built_in,[theme=base16-pico] .hljs-doctag,[theme=base16-pico] .hljs-keyword.hljs-atrule,[theme=base16-pico] .hljs-quote,[theme=base16-pico] .hljs-regexp{color:#29adff}[theme=base16-pico] .hljs-attribute,[theme=base16-pico] .hljs-function .hljs-title,[theme=base16-pico] .hljs-section,[theme=base16-pico] .hljs-title.function_,[theme=base16-pico] .ruby .hljs-property{color:#83769c}[theme=base16-pico] .diff .hljs-meta,[theme=base16-pico] .hljs-keyword,[theme=base16-pico] .hljs-template-tag,[theme=base16-pico] .hljs-type{color:#ff77a8}[theme=base16-pico] .hljs-emphasis{color:#ff77a8;font-style:italic}[theme=base16-pico] .hljs-meta,[theme=base16-pico] .hljs-meta .hljs-keyword,[theme=base16-pico] .hljs-meta .hljs-string{color:#fca}[theme=base16-pico] .hljs-meta .hljs-keyword,[theme=base16-pico] .hljs-meta-keyword{font-weight:700}[theme=base16-pop]{ + /*! + Theme: Pop + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-pop] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-pop] code.hljs{padding:3px 5px}[theme=base16-pop] .hljs{color:#d0d0d0;background:#000}[theme=base16-pop] .hljs ::-moz-selection,[theme=base16-pop] .hljs::-moz-selection{background-color:#303030;color:#d0d0d0}[theme=base16-pop] .hljs ::selection,[theme=base16-pop] .hljs::selection{background-color:#303030;color:#d0d0d0}[theme=base16-pop] .hljs-comment{color:#505050}[theme=base16-pop] .hljs-tag{color:#b0b0b0}[theme=base16-pop] .hljs-operator,[theme=base16-pop] .hljs-punctuation,[theme=base16-pop] .hljs-subst{color:#d0d0d0}[theme=base16-pop] .hljs-operator{opacity:.7}[theme=base16-pop] .hljs-bullet,[theme=base16-pop] .hljs-deletion,[theme=base16-pop] .hljs-name,[theme=base16-pop] .hljs-selector-tag,[theme=base16-pop] .hljs-template-variable,[theme=base16-pop] .hljs-variable{color:#eb008a}[theme=base16-pop] .hljs-attr,[theme=base16-pop] .hljs-link,[theme=base16-pop] .hljs-literal,[theme=base16-pop] .hljs-number,[theme=base16-pop] .hljs-symbol,[theme=base16-pop] .hljs-variable.constant_{color:#f29333}[theme=base16-pop] .hljs-class .hljs-title,[theme=base16-pop] .hljs-title,[theme=base16-pop] .hljs-title.class_{color:#f8ca12}[theme=base16-pop] .hljs-strong{font-weight:700;color:#f8ca12}[theme=base16-pop] .hljs-addition,[theme=base16-pop] .hljs-code,[theme=base16-pop] .hljs-string,[theme=base16-pop] .hljs-title.class_.inherited__{color:#37b349}[theme=base16-pop] .hljs-built_in,[theme=base16-pop] .hljs-doctag,[theme=base16-pop] .hljs-keyword.hljs-atrule,[theme=base16-pop] .hljs-quote,[theme=base16-pop] .hljs-regexp{color:#0ab}[theme=base16-pop] .hljs-attribute,[theme=base16-pop] .hljs-function .hljs-title,[theme=base16-pop] .hljs-section,[theme=base16-pop] .hljs-title.function_,[theme=base16-pop] .ruby .hljs-property{color:#0e5a94}[theme=base16-pop] .diff .hljs-meta,[theme=base16-pop] .hljs-keyword,[theme=base16-pop] .hljs-template-tag,[theme=base16-pop] .hljs-type{color:#b31e8d}[theme=base16-pop] .hljs-emphasis{color:#b31e8d;font-style:italic}[theme=base16-pop] .hljs-meta,[theme=base16-pop] .hljs-meta .hljs-keyword,[theme=base16-pop] .hljs-meta .hljs-string{color:#7a2d00}[theme=base16-pop] .hljs-meta .hljs-keyword,[theme=base16-pop] .hljs-meta-keyword{font-weight:700}[theme=base16-porple]{ + /*! + Theme: Porple + Author: Niek den Breeje (https://github.com/AuditeMarlow) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-porple] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-porple] code.hljs{padding:3px 5px}[theme=base16-porple] .hljs{color:#d8d8d8;background:#292c36}[theme=base16-porple] .hljs ::-moz-selection,[theme=base16-porple] .hljs::-moz-selection{background-color:#474160;color:#d8d8d8}[theme=base16-porple] .hljs ::selection,[theme=base16-porple] .hljs::selection{background-color:#474160;color:#d8d8d8}[theme=base16-porple] .hljs-comment{color:#65568a}[theme=base16-porple] .hljs-tag{color:#b8b8b8}[theme=base16-porple] .hljs-operator,[theme=base16-porple] .hljs-punctuation,[theme=base16-porple] .hljs-subst{color:#d8d8d8}[theme=base16-porple] .hljs-operator{opacity:.7}[theme=base16-porple] .hljs-bullet,[theme=base16-porple] .hljs-deletion,[theme=base16-porple] .hljs-name,[theme=base16-porple] .hljs-selector-tag,[theme=base16-porple] .hljs-template-variable,[theme=base16-porple] .hljs-variable{color:#f84547}[theme=base16-porple] .hljs-attr,[theme=base16-porple] .hljs-link,[theme=base16-porple] .hljs-literal,[theme=base16-porple] .hljs-number,[theme=base16-porple] .hljs-symbol,[theme=base16-porple] .hljs-variable.constant_{color:#d28e5d}[theme=base16-porple] .hljs-class .hljs-title,[theme=base16-porple] .hljs-title,[theme=base16-porple] .hljs-title.class_{color:#efa16b}[theme=base16-porple] .hljs-strong{font-weight:700;color:#efa16b}[theme=base16-porple] .hljs-addition,[theme=base16-porple] .hljs-code,[theme=base16-porple] .hljs-string,[theme=base16-porple] .hljs-title.class_.inherited__{color:#95c76f}[theme=base16-porple] .hljs-built_in,[theme=base16-porple] .hljs-doctag,[theme=base16-porple] .hljs-keyword.hljs-atrule,[theme=base16-porple] .hljs-quote,[theme=base16-porple] .hljs-regexp{color:#64878f}[theme=base16-porple] .hljs-attribute,[theme=base16-porple] .hljs-function .hljs-title,[theme=base16-porple] .hljs-section,[theme=base16-porple] .hljs-title.function_,[theme=base16-porple] .ruby .hljs-property{color:#8485ce}[theme=base16-porple] .diff .hljs-meta,[theme=base16-porple] .hljs-keyword,[theme=base16-porple] .hljs-template-tag,[theme=base16-porple] .hljs-type{color:#b74989}[theme=base16-porple] .hljs-emphasis{color:#b74989;font-style:italic}[theme=base16-porple] .hljs-meta,[theme=base16-porple] .hljs-meta .hljs-keyword,[theme=base16-porple] .hljs-meta .hljs-string{color:#986841}[theme=base16-porple] .hljs-meta .hljs-keyword,[theme=base16-porple] .hljs-meta-keyword{font-weight:700}[theme=base16-qualia]{ + /*! + Theme: Qualia + Author: isaacwhanson + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-qualia] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-qualia] code.hljs{padding:3px 5px}[theme=base16-qualia] .hljs{color:silver;background:#101010}[theme=base16-qualia] .hljs ::-moz-selection,[theme=base16-qualia] .hljs::-moz-selection{background-color:#454545;color:silver}[theme=base16-qualia] .hljs ::selection,[theme=base16-qualia] .hljs::selection{background-color:#454545;color:silver}[theme=base16-qualia] .hljs-comment{color:#454545}[theme=base16-qualia] .hljs-tag{color:grey}[theme=base16-qualia] .hljs-operator,[theme=base16-qualia] .hljs-punctuation,[theme=base16-qualia] .hljs-subst{color:silver}[theme=base16-qualia] .hljs-operator{opacity:.7}[theme=base16-qualia] .hljs-bullet,[theme=base16-qualia] .hljs-deletion,[theme=base16-qualia] .hljs-name,[theme=base16-qualia] .hljs-selector-tag,[theme=base16-qualia] .hljs-template-variable,[theme=base16-qualia] .hljs-variable{color:#efa6a2}[theme=base16-qualia] .hljs-attr,[theme=base16-qualia] .hljs-link,[theme=base16-qualia] .hljs-literal,[theme=base16-qualia] .hljs-number,[theme=base16-qualia] .hljs-symbol,[theme=base16-qualia] .hljs-variable.constant_{color:#a3b8ef}[theme=base16-qualia] .hljs-class .hljs-title,[theme=base16-qualia] .hljs-title,[theme=base16-qualia] .hljs-title.class_{color:#e6a3dc}[theme=base16-qualia] .hljs-strong{font-weight:700;color:#e6a3dc}[theme=base16-qualia] .hljs-addition,[theme=base16-qualia] .hljs-code,[theme=base16-qualia] .hljs-string,[theme=base16-qualia] .hljs-title.class_.inherited__{color:#80c990}[theme=base16-qualia] .hljs-built_in,[theme=base16-qualia] .hljs-doctag,[theme=base16-qualia] .hljs-keyword.hljs-atrule,[theme=base16-qualia] .hljs-quote,[theme=base16-qualia] .hljs-regexp{color:#c8c874}[theme=base16-qualia] .hljs-attribute,[theme=base16-qualia] .hljs-function .hljs-title,[theme=base16-qualia] .hljs-section,[theme=base16-qualia] .hljs-title.function_,[theme=base16-qualia] .ruby .hljs-property{color:#50cacd}[theme=base16-qualia] .diff .hljs-meta,[theme=base16-qualia] .hljs-keyword,[theme=base16-qualia] .hljs-template-tag,[theme=base16-qualia] .hljs-type{color:#e0af85}[theme=base16-qualia] .hljs-emphasis{color:#e0af85;font-style:italic}[theme=base16-qualia] .hljs-meta,[theme=base16-qualia] .hljs-meta .hljs-keyword,[theme=base16-qualia] .hljs-meta .hljs-string{color:grey}[theme=base16-qualia] .hljs-meta .hljs-keyword,[theme=base16-qualia] .hljs-meta-keyword{font-weight:700}[theme=base16-railscasts]{ + /*! + Theme: Railscasts + Author: Ryan Bates (http://railscasts.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-railscasts] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-railscasts] code.hljs{padding:3px 5px}[theme=base16-railscasts] .hljs{color:#e6e1dc;background:#2b2b2b}[theme=base16-railscasts] .hljs ::-moz-selection,[theme=base16-railscasts] .hljs::-moz-selection{background-color:#3a4055;color:#e6e1dc}[theme=base16-railscasts] .hljs ::selection,[theme=base16-railscasts] .hljs::selection{background-color:#3a4055;color:#e6e1dc}[theme=base16-railscasts] .hljs-comment{color:#5a647e}[theme=base16-railscasts] .hljs-tag{color:#d4cfc9}[theme=base16-railscasts] .hljs-operator,[theme=base16-railscasts] .hljs-punctuation,[theme=base16-railscasts] .hljs-subst{color:#e6e1dc}[theme=base16-railscasts] .hljs-operator{opacity:.7}[theme=base16-railscasts] .hljs-bullet,[theme=base16-railscasts] .hljs-deletion,[theme=base16-railscasts] .hljs-name,[theme=base16-railscasts] .hljs-selector-tag,[theme=base16-railscasts] .hljs-template-variable,[theme=base16-railscasts] .hljs-variable{color:#da4939}[theme=base16-railscasts] .hljs-attr,[theme=base16-railscasts] .hljs-link,[theme=base16-railscasts] .hljs-literal,[theme=base16-railscasts] .hljs-number,[theme=base16-railscasts] .hljs-symbol,[theme=base16-railscasts] .hljs-variable.constant_{color:#cc7833}[theme=base16-railscasts] .hljs-class .hljs-title,[theme=base16-railscasts] .hljs-title,[theme=base16-railscasts] .hljs-title.class_{color:#ffc66d}[theme=base16-railscasts] .hljs-strong{font-weight:700;color:#ffc66d}[theme=base16-railscasts] .hljs-addition,[theme=base16-railscasts] .hljs-code,[theme=base16-railscasts] .hljs-string,[theme=base16-railscasts] .hljs-title.class_.inherited__{color:#a5c261}[theme=base16-railscasts] .hljs-built_in,[theme=base16-railscasts] .hljs-doctag,[theme=base16-railscasts] .hljs-keyword.hljs-atrule,[theme=base16-railscasts] .hljs-quote,[theme=base16-railscasts] .hljs-regexp{color:#519f50}[theme=base16-railscasts] .hljs-attribute,[theme=base16-railscasts] .hljs-function .hljs-title,[theme=base16-railscasts] .hljs-section,[theme=base16-railscasts] .hljs-title.function_,[theme=base16-railscasts] .ruby .hljs-property{color:#6d9cbe}[theme=base16-railscasts] .diff .hljs-meta,[theme=base16-railscasts] .hljs-keyword,[theme=base16-railscasts] .hljs-template-tag,[theme=base16-railscasts] .hljs-type{color:#b6b3eb}[theme=base16-railscasts] .hljs-emphasis{color:#b6b3eb;font-style:italic}[theme=base16-railscasts] .hljs-meta,[theme=base16-railscasts] .hljs-meta .hljs-keyword,[theme=base16-railscasts] .hljs-meta .hljs-string{color:#bc9458}[theme=base16-railscasts] .hljs-meta .hljs-keyword,[theme=base16-railscasts] .hljs-meta-keyword{font-weight:700}[theme=base16-rebecca]{ + /*! + Theme: Rebecca + Author: Victor Borja (http://github.com/vic) based on Rebecca Theme (http://github.com/vic/rebecca-theme) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-rebecca] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-rebecca] code.hljs{padding:3px 5px}[theme=base16-rebecca] .hljs{color:#f1eff8;background:#292a44}[theme=base16-rebecca] .hljs ::-moz-selection,[theme=base16-rebecca] .hljs::-moz-selection{background-color:#383a62;color:#f1eff8}[theme=base16-rebecca] .hljs ::selection,[theme=base16-rebecca] .hljs::selection{background-color:#383a62;color:#f1eff8}[theme=base16-rebecca] .hljs-comment{color:#669}[theme=base16-rebecca] .hljs-tag{color:#a0a0c5}[theme=base16-rebecca] .hljs-operator,[theme=base16-rebecca] .hljs-punctuation,[theme=base16-rebecca] .hljs-subst{color:#f1eff8}[theme=base16-rebecca] .hljs-operator{opacity:.7}[theme=base16-rebecca] .hljs-bullet,[theme=base16-rebecca] .hljs-deletion,[theme=base16-rebecca] .hljs-name,[theme=base16-rebecca] .hljs-selector-tag,[theme=base16-rebecca] .hljs-template-variable,[theme=base16-rebecca] .hljs-variable{color:#a0a0c5}[theme=base16-rebecca] .hljs-attr,[theme=base16-rebecca] .hljs-link,[theme=base16-rebecca] .hljs-literal,[theme=base16-rebecca] .hljs-number,[theme=base16-rebecca] .hljs-symbol,[theme=base16-rebecca] .hljs-variable.constant_{color:#efe4a1}[theme=base16-rebecca] .hljs-class .hljs-title,[theme=base16-rebecca] .hljs-title,[theme=base16-rebecca] .hljs-title.class_{color:#ae81ff}[theme=base16-rebecca] .hljs-strong{font-weight:700;color:#ae81ff}[theme=base16-rebecca] .hljs-addition,[theme=base16-rebecca] .hljs-code,[theme=base16-rebecca] .hljs-string,[theme=base16-rebecca] .hljs-title.class_.inherited__{color:#6dfedf}[theme=base16-rebecca] .hljs-built_in,[theme=base16-rebecca] .hljs-doctag,[theme=base16-rebecca] .hljs-keyword.hljs-atrule,[theme=base16-rebecca] .hljs-quote,[theme=base16-rebecca] .hljs-regexp{color:#8eaee0}[theme=base16-rebecca] .hljs-attribute,[theme=base16-rebecca] .hljs-function .hljs-title,[theme=base16-rebecca] .hljs-section,[theme=base16-rebecca] .hljs-title.function_,[theme=base16-rebecca] .ruby .hljs-property{color:#2de0a7}[theme=base16-rebecca] .diff .hljs-meta,[theme=base16-rebecca] .hljs-keyword,[theme=base16-rebecca] .hljs-template-tag,[theme=base16-rebecca] .hljs-type{color:#7aa5ff}[theme=base16-rebecca] .hljs-emphasis{color:#7aa5ff;font-style:italic}[theme=base16-rebecca] .hljs-meta,[theme=base16-rebecca] .hljs-meta .hljs-keyword,[theme=base16-rebecca] .hljs-meta .hljs-string{color:#ff79c6}[theme=base16-rebecca] .hljs-meta .hljs-keyword,[theme=base16-rebecca] .hljs-meta-keyword{font-weight:700}[theme=base16-ros-pine-dawn]{ + /*! + Theme: Rosé Pine Dawn + Author: Emilia Dunfelt + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ros-pine-dawn] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ros-pine-dawn] code.hljs{padding:3px 5px}[theme=base16-ros-pine-dawn] .hljs{color:#575279;background:#faf4ed}[theme=base16-ros-pine-dawn] .hljs ::-moz-selection,[theme=base16-ros-pine-dawn] .hljs::-moz-selection{background-color:#f2e9de;color:#575279}[theme=base16-ros-pine-dawn] .hljs ::selection,[theme=base16-ros-pine-dawn] .hljs::selection{background-color:#f2e9de;color:#575279}[theme=base16-ros-pine-dawn] .hljs-comment{color:#9893a5}[theme=base16-ros-pine-dawn] .hljs-tag{color:#6e6a86}[theme=base16-ros-pine-dawn] .hljs-operator,[theme=base16-ros-pine-dawn] .hljs-punctuation,[theme=base16-ros-pine-dawn] .hljs-subst{color:#575279}[theme=base16-ros-pine-dawn] .hljs-operator{opacity:.7}[theme=base16-ros-pine-dawn] .hljs-bullet,[theme=base16-ros-pine-dawn] .hljs-deletion,[theme=base16-ros-pine-dawn] .hljs-name,[theme=base16-ros-pine-dawn] .hljs-selector-tag,[theme=base16-ros-pine-dawn] .hljs-template-variable,[theme=base16-ros-pine-dawn] .hljs-variable{color:#1f1d2e}[theme=base16-ros-pine-dawn] .hljs-attr,[theme=base16-ros-pine-dawn] .hljs-link,[theme=base16-ros-pine-dawn] .hljs-literal,[theme=base16-ros-pine-dawn] .hljs-number,[theme=base16-ros-pine-dawn] .hljs-symbol,[theme=base16-ros-pine-dawn] .hljs-variable.constant_{color:#b4637a}[theme=base16-ros-pine-dawn] .hljs-class .hljs-title,[theme=base16-ros-pine-dawn] .hljs-title,[theme=base16-ros-pine-dawn] .hljs-title.class_{color:#ea9d34}[theme=base16-ros-pine-dawn] .hljs-strong{font-weight:700;color:#ea9d34}[theme=base16-ros-pine-dawn] .hljs-addition,[theme=base16-ros-pine-dawn] .hljs-code,[theme=base16-ros-pine-dawn] .hljs-string,[theme=base16-ros-pine-dawn] .hljs-title.class_.inherited__{color:#d7827e}[theme=base16-ros-pine-dawn] .hljs-built_in,[theme=base16-ros-pine-dawn] .hljs-doctag,[theme=base16-ros-pine-dawn] .hljs-keyword.hljs-atrule,[theme=base16-ros-pine-dawn] .hljs-quote,[theme=base16-ros-pine-dawn] .hljs-regexp{color:#286983}[theme=base16-ros-pine-dawn] .hljs-attribute,[theme=base16-ros-pine-dawn] .hljs-function .hljs-title,[theme=base16-ros-pine-dawn] .hljs-section,[theme=base16-ros-pine-dawn] .hljs-title.function_,[theme=base16-ros-pine-dawn] .ruby .hljs-property{color:#56949f}[theme=base16-ros-pine-dawn] .diff .hljs-meta,[theme=base16-ros-pine-dawn] .hljs-keyword,[theme=base16-ros-pine-dawn] .hljs-template-tag,[theme=base16-ros-pine-dawn] .hljs-type{color:#907aa9}[theme=base16-ros-pine-dawn] .hljs-emphasis{color:#907aa9;font-style:italic}[theme=base16-ros-pine-dawn] .hljs-meta,[theme=base16-ros-pine-dawn] .hljs-meta .hljs-keyword,[theme=base16-ros-pine-dawn] .hljs-meta .hljs-string{color:#c5c3ce}[theme=base16-ros-pine-dawn] .hljs-meta .hljs-keyword,[theme=base16-ros-pine-dawn] .hljs-meta-keyword{font-weight:700}[theme=base16-ros-pine-moon]{ + /*! + Theme: Rosé Pine Moon + Author: Emilia Dunfelt + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ros-pine-moon] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ros-pine-moon] code.hljs{padding:3px 5px}[theme=base16-ros-pine-moon] .hljs{color:#e0def4;background:#232136}[theme=base16-ros-pine-moon] .hljs ::-moz-selection,[theme=base16-ros-pine-moon] .hljs::-moz-selection{background-color:#393552;color:#e0def4}[theme=base16-ros-pine-moon] .hljs ::selection,[theme=base16-ros-pine-moon] .hljs::selection{background-color:#393552;color:#e0def4}[theme=base16-ros-pine-moon] .hljs-comment{color:#59546d}[theme=base16-ros-pine-moon] .hljs-tag{color:#817c9c}[theme=base16-ros-pine-moon] .hljs-operator,[theme=base16-ros-pine-moon] .hljs-punctuation,[theme=base16-ros-pine-moon] .hljs-subst{color:#e0def4}[theme=base16-ros-pine-moon] .hljs-operator{opacity:.7}[theme=base16-ros-pine-moon] .hljs-bullet,[theme=base16-ros-pine-moon] .hljs-deletion,[theme=base16-ros-pine-moon] .hljs-name,[theme=base16-ros-pine-moon] .hljs-selector-tag,[theme=base16-ros-pine-moon] .hljs-template-variable,[theme=base16-ros-pine-moon] .hljs-variable{color:#ecebf0}[theme=base16-ros-pine-moon] .hljs-attr,[theme=base16-ros-pine-moon] .hljs-link,[theme=base16-ros-pine-moon] .hljs-literal,[theme=base16-ros-pine-moon] .hljs-number,[theme=base16-ros-pine-moon] .hljs-symbol,[theme=base16-ros-pine-moon] .hljs-variable.constant_{color:#eb6f92}[theme=base16-ros-pine-moon] .hljs-class .hljs-title,[theme=base16-ros-pine-moon] .hljs-title,[theme=base16-ros-pine-moon] .hljs-title.class_{color:#f6c177}[theme=base16-ros-pine-moon] .hljs-strong{font-weight:700;color:#f6c177}[theme=base16-ros-pine-moon] .hljs-addition,[theme=base16-ros-pine-moon] .hljs-code,[theme=base16-ros-pine-moon] .hljs-string,[theme=base16-ros-pine-moon] .hljs-title.class_.inherited__{color:#ea9a97}[theme=base16-ros-pine-moon] .hljs-built_in,[theme=base16-ros-pine-moon] .hljs-doctag,[theme=base16-ros-pine-moon] .hljs-keyword.hljs-atrule,[theme=base16-ros-pine-moon] .hljs-quote,[theme=base16-ros-pine-moon] .hljs-regexp{color:#3e8fb0}[theme=base16-ros-pine-moon] .hljs-attribute,[theme=base16-ros-pine-moon] .hljs-function .hljs-title,[theme=base16-ros-pine-moon] .hljs-section,[theme=base16-ros-pine-moon] .hljs-title.function_,[theme=base16-ros-pine-moon] .ruby .hljs-property{color:#9ccfd8}[theme=base16-ros-pine-moon] .diff .hljs-meta,[theme=base16-ros-pine-moon] .hljs-keyword,[theme=base16-ros-pine-moon] .hljs-template-tag,[theme=base16-ros-pine-moon] .hljs-type{color:#c4a7e7}[theme=base16-ros-pine-moon] .hljs-emphasis{color:#c4a7e7;font-style:italic}[theme=base16-ros-pine-moon] .hljs-meta,[theme=base16-ros-pine-moon] .hljs-meta .hljs-keyword,[theme=base16-ros-pine-moon] .hljs-meta .hljs-string{color:#b9b9bc}[theme=base16-ros-pine-moon] .hljs-meta .hljs-keyword,[theme=base16-ros-pine-moon] .hljs-meta-keyword{font-weight:700}[theme=base16-ros-pine]{ + /*! + Theme: Rosé Pine + Author: Emilia Dunfelt + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-ros-pine] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-ros-pine] code.hljs{padding:3px 5px}[theme=base16-ros-pine] .hljs{color:#e0def4;background:#191724}[theme=base16-ros-pine] .hljs ::-moz-selection,[theme=base16-ros-pine] .hljs::-moz-selection{background-color:#26233a;color:#e0def4}[theme=base16-ros-pine] .hljs ::selection,[theme=base16-ros-pine] .hljs::selection{background-color:#26233a;color:#e0def4}[theme=base16-ros-pine] .hljs-comment{color:#555169}[theme=base16-ros-pine] .hljs-tag{color:#6e6a86}[theme=base16-ros-pine] .hljs-operator,[theme=base16-ros-pine] .hljs-punctuation,[theme=base16-ros-pine] .hljs-subst{color:#e0def4}[theme=base16-ros-pine] .hljs-operator{opacity:.7}[theme=base16-ros-pine] .hljs-bullet,[theme=base16-ros-pine] .hljs-deletion,[theme=base16-ros-pine] .hljs-name,[theme=base16-ros-pine] .hljs-selector-tag,[theme=base16-ros-pine] .hljs-template-variable,[theme=base16-ros-pine] .hljs-variable{color:#e2e1e7}[theme=base16-ros-pine] .hljs-attr,[theme=base16-ros-pine] .hljs-link,[theme=base16-ros-pine] .hljs-literal,[theme=base16-ros-pine] .hljs-number,[theme=base16-ros-pine] .hljs-symbol,[theme=base16-ros-pine] .hljs-variable.constant_{color:#eb6f92}[theme=base16-ros-pine] .hljs-class .hljs-title,[theme=base16-ros-pine] .hljs-title,[theme=base16-ros-pine] .hljs-title.class_{color:#f6c177}[theme=base16-ros-pine] .hljs-strong{font-weight:700;color:#f6c177}[theme=base16-ros-pine] .hljs-addition,[theme=base16-ros-pine] .hljs-code,[theme=base16-ros-pine] .hljs-string,[theme=base16-ros-pine] .hljs-title.class_.inherited__{color:#ebbcba}[theme=base16-ros-pine] .hljs-built_in,[theme=base16-ros-pine] .hljs-doctag,[theme=base16-ros-pine] .hljs-keyword.hljs-atrule,[theme=base16-ros-pine] .hljs-quote,[theme=base16-ros-pine] .hljs-regexp{color:#31748f}[theme=base16-ros-pine] .hljs-attribute,[theme=base16-ros-pine] .hljs-function .hljs-title,[theme=base16-ros-pine] .hljs-section,[theme=base16-ros-pine] .hljs-title.function_,[theme=base16-ros-pine] .ruby .hljs-property{color:#9ccfd8}[theme=base16-ros-pine] .diff .hljs-meta,[theme=base16-ros-pine] .hljs-keyword,[theme=base16-ros-pine] .hljs-template-tag,[theme=base16-ros-pine] .hljs-type{color:#c4a7e7}[theme=base16-ros-pine] .hljs-emphasis{color:#c4a7e7;font-style:italic}[theme=base16-ros-pine] .hljs-meta,[theme=base16-ros-pine] .hljs-meta .hljs-keyword,[theme=base16-ros-pine] .hljs-meta .hljs-string{color:#e5e5e5}[theme=base16-ros-pine] .hljs-meta .hljs-keyword,[theme=base16-ros-pine] .hljs-meta-keyword{font-weight:700}[theme=base16-sagelight]{ + /*! + Theme: Sagelight + Author: Carter Veldhuizen + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-sagelight] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-sagelight] code.hljs{padding:3px 5px}[theme=base16-sagelight] .hljs{color:#383838;background:#f8f8f8}[theme=base16-sagelight] .hljs ::-moz-selection,[theme=base16-sagelight] .hljs::-moz-selection{background-color:#d8d8d8;color:#383838}[theme=base16-sagelight] .hljs ::selection,[theme=base16-sagelight] .hljs::selection{background-color:#d8d8d8;color:#383838}[theme=base16-sagelight] .hljs-comment{color:#b8b8b8}[theme=base16-sagelight] .hljs-tag{color:#585858}[theme=base16-sagelight] .hljs-operator,[theme=base16-sagelight] .hljs-punctuation,[theme=base16-sagelight] .hljs-subst{color:#383838}[theme=base16-sagelight] .hljs-operator{opacity:.7}[theme=base16-sagelight] .hljs-bullet,[theme=base16-sagelight] .hljs-deletion,[theme=base16-sagelight] .hljs-name,[theme=base16-sagelight] .hljs-selector-tag,[theme=base16-sagelight] .hljs-template-variable,[theme=base16-sagelight] .hljs-variable{color:#fa8480}[theme=base16-sagelight] .hljs-attr,[theme=base16-sagelight] .hljs-link,[theme=base16-sagelight] .hljs-literal,[theme=base16-sagelight] .hljs-number,[theme=base16-sagelight] .hljs-symbol,[theme=base16-sagelight] .hljs-variable.constant_{color:#ffaa61}[theme=base16-sagelight] .hljs-class .hljs-title,[theme=base16-sagelight] .hljs-title,[theme=base16-sagelight] .hljs-title.class_{color:#ffdc61}[theme=base16-sagelight] .hljs-strong{font-weight:700;color:#ffdc61}[theme=base16-sagelight] .hljs-addition,[theme=base16-sagelight] .hljs-code,[theme=base16-sagelight] .hljs-string,[theme=base16-sagelight] .hljs-title.class_.inherited__{color:#a0d2c8}[theme=base16-sagelight] .hljs-built_in,[theme=base16-sagelight] .hljs-doctag,[theme=base16-sagelight] .hljs-keyword.hljs-atrule,[theme=base16-sagelight] .hljs-quote,[theme=base16-sagelight] .hljs-regexp{color:#a2d6f5}[theme=base16-sagelight] .hljs-attribute,[theme=base16-sagelight] .hljs-function .hljs-title,[theme=base16-sagelight] .hljs-section,[theme=base16-sagelight] .hljs-title.function_,[theme=base16-sagelight] .ruby .hljs-property{color:#a0a7d2}[theme=base16-sagelight] .diff .hljs-meta,[theme=base16-sagelight] .hljs-keyword,[theme=base16-sagelight] .hljs-template-tag,[theme=base16-sagelight] .hljs-type{color:#c8a0d2}[theme=base16-sagelight] .hljs-emphasis{color:#c8a0d2;font-style:italic}[theme=base16-sagelight] .hljs-meta,[theme=base16-sagelight] .hljs-meta .hljs-keyword,[theme=base16-sagelight] .hljs-meta .hljs-string{color:#d2b2a0}[theme=base16-sagelight] .hljs-meta .hljs-keyword,[theme=base16-sagelight] .hljs-meta-keyword{font-weight:700}[theme=base16-sandcastle]{ + /*! + Theme: Sandcastle + Author: George Essig (https://github.com/gessig) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-sandcastle] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-sandcastle] code.hljs{padding:3px 5px}[theme=base16-sandcastle] .hljs{color:#a89984;background:#282c34}[theme=base16-sandcastle] .hljs ::-moz-selection,[theme=base16-sandcastle] .hljs::-moz-selection{background-color:#3e4451;color:#a89984}[theme=base16-sandcastle] .hljs ::selection,[theme=base16-sandcastle] .hljs::selection{background-color:#3e4451;color:#a89984}[theme=base16-sandcastle] .hljs-comment{color:#665c54}[theme=base16-sandcastle] .hljs-tag{color:#928374}[theme=base16-sandcastle] .hljs-operator,[theme=base16-sandcastle] .hljs-punctuation,[theme=base16-sandcastle] .hljs-subst{color:#a89984}[theme=base16-sandcastle] .hljs-operator{opacity:.7}[theme=base16-sandcastle] .hljs-bullet,[theme=base16-sandcastle] .hljs-deletion,[theme=base16-sandcastle] .hljs-name,[theme=base16-sandcastle] .hljs-selector-tag,[theme=base16-sandcastle] .hljs-template-variable,[theme=base16-sandcastle] .hljs-variable{color:#83a598}[theme=base16-sandcastle] .hljs-attr,[theme=base16-sandcastle] .hljs-class .hljs-title,[theme=base16-sandcastle] .hljs-link,[theme=base16-sandcastle] .hljs-literal,[theme=base16-sandcastle] .hljs-number,[theme=base16-sandcastle] .hljs-symbol,[theme=base16-sandcastle] .hljs-title,[theme=base16-sandcastle] .hljs-title.class_,[theme=base16-sandcastle] .hljs-variable.constant_{color:#a07e3b}[theme=base16-sandcastle] .hljs-strong{font-weight:700;color:#a07e3b}[theme=base16-sandcastle] .hljs-addition,[theme=base16-sandcastle] .hljs-code,[theme=base16-sandcastle] .hljs-string,[theme=base16-sandcastle] .hljs-title.class_.inherited__{color:#528b8b}[theme=base16-sandcastle] .hljs-attribute,[theme=base16-sandcastle] .hljs-built_in,[theme=base16-sandcastle] .hljs-doctag,[theme=base16-sandcastle] .hljs-function .hljs-title,[theme=base16-sandcastle] .hljs-keyword.hljs-atrule,[theme=base16-sandcastle] .hljs-quote,[theme=base16-sandcastle] .hljs-regexp,[theme=base16-sandcastle] .hljs-section,[theme=base16-sandcastle] .hljs-title.function_,[theme=base16-sandcastle] .ruby .hljs-property{color:#83a598}[theme=base16-sandcastle] .diff .hljs-meta,[theme=base16-sandcastle] .hljs-keyword,[theme=base16-sandcastle] .hljs-template-tag,[theme=base16-sandcastle] .hljs-type{color:#d75f5f}[theme=base16-sandcastle] .hljs-emphasis{color:#d75f5f;font-style:italic}[theme=base16-sandcastle] .hljs-meta,[theme=base16-sandcastle] .hljs-meta .hljs-keyword,[theme=base16-sandcastle] .hljs-meta .hljs-string{color:#a87322}[theme=base16-sandcastle] .hljs-meta .hljs-keyword,[theme=base16-sandcastle] .hljs-meta-keyword{font-weight:700}[theme=base16-seti-ui]{ + /*! + Theme: Seti UI + Author: + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-seti-ui] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-seti-ui] code.hljs{padding:3px 5px}[theme=base16-seti-ui] .hljs{color:#d6d6d6;background:#151718}[theme=base16-seti-ui] .hljs ::-moz-selection,[theme=base16-seti-ui] .hljs::-moz-selection{background-color:#3b758c;color:#d6d6d6}[theme=base16-seti-ui] .hljs ::selection,[theme=base16-seti-ui] .hljs::selection{background-color:#3b758c;color:#d6d6d6}[theme=base16-seti-ui] .hljs-comment{color:#41535b}[theme=base16-seti-ui] .hljs-tag{color:#43a5d5}[theme=base16-seti-ui] .hljs-operator,[theme=base16-seti-ui] .hljs-punctuation,[theme=base16-seti-ui] .hljs-subst{color:#d6d6d6}[theme=base16-seti-ui] .hljs-operator{opacity:.7}[theme=base16-seti-ui] .hljs-bullet,[theme=base16-seti-ui] .hljs-deletion,[theme=base16-seti-ui] .hljs-name,[theme=base16-seti-ui] .hljs-selector-tag,[theme=base16-seti-ui] .hljs-template-variable,[theme=base16-seti-ui] .hljs-variable{color:#cd3f45}[theme=base16-seti-ui] .hljs-attr,[theme=base16-seti-ui] .hljs-link,[theme=base16-seti-ui] .hljs-literal,[theme=base16-seti-ui] .hljs-number,[theme=base16-seti-ui] .hljs-symbol,[theme=base16-seti-ui] .hljs-variable.constant_{color:#db7b55}[theme=base16-seti-ui] .hljs-class .hljs-title,[theme=base16-seti-ui] .hljs-title,[theme=base16-seti-ui] .hljs-title.class_{color:#e6cd69}[theme=base16-seti-ui] .hljs-strong{font-weight:700;color:#e6cd69}[theme=base16-seti-ui] .hljs-addition,[theme=base16-seti-ui] .hljs-code,[theme=base16-seti-ui] .hljs-string,[theme=base16-seti-ui] .hljs-title.class_.inherited__{color:#9fca56}[theme=base16-seti-ui] .hljs-built_in,[theme=base16-seti-ui] .hljs-doctag,[theme=base16-seti-ui] .hljs-keyword.hljs-atrule,[theme=base16-seti-ui] .hljs-quote,[theme=base16-seti-ui] .hljs-regexp{color:#55dbbe}[theme=base16-seti-ui] .hljs-attribute,[theme=base16-seti-ui] .hljs-function .hljs-title,[theme=base16-seti-ui] .hljs-section,[theme=base16-seti-ui] .hljs-title.function_,[theme=base16-seti-ui] .ruby .hljs-property{color:#55b5db}[theme=base16-seti-ui] .diff .hljs-meta,[theme=base16-seti-ui] .hljs-keyword,[theme=base16-seti-ui] .hljs-template-tag,[theme=base16-seti-ui] .hljs-type{color:#a074c4}[theme=base16-seti-ui] .hljs-emphasis{color:#a074c4;font-style:italic}[theme=base16-seti-ui] .hljs-meta,[theme=base16-seti-ui] .hljs-meta .hljs-keyword,[theme=base16-seti-ui] .hljs-meta .hljs-string{color:#8a553f}[theme=base16-seti-ui] .hljs-meta .hljs-keyword,[theme=base16-seti-ui] .hljs-meta-keyword{font-weight:700}[theme=base16-shapeshifter]{ + /*! + Theme: Shapeshifter + Author: Tyler Benziger (http://tybenz.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-shapeshifter] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-shapeshifter] code.hljs{padding:3px 5px}[theme=base16-shapeshifter] .hljs{color:#102015;background:#f9f9f9}[theme=base16-shapeshifter] .hljs ::-moz-selection,[theme=base16-shapeshifter] .hljs::-moz-selection{background-color:#ababab;color:#102015}[theme=base16-shapeshifter] .hljs ::selection,[theme=base16-shapeshifter] .hljs::selection{background-color:#ababab;color:#102015}[theme=base16-shapeshifter] .hljs-comment{color:#555}[theme=base16-shapeshifter] .hljs-tag{color:#343434}[theme=base16-shapeshifter] .hljs-operator,[theme=base16-shapeshifter] .hljs-punctuation,[theme=base16-shapeshifter] .hljs-subst{color:#102015}[theme=base16-shapeshifter] .hljs-operator{opacity:.7}[theme=base16-shapeshifter] .hljs-bullet,[theme=base16-shapeshifter] .hljs-deletion,[theme=base16-shapeshifter] .hljs-name,[theme=base16-shapeshifter] .hljs-selector-tag,[theme=base16-shapeshifter] .hljs-template-variable,[theme=base16-shapeshifter] .hljs-variable{color:#e92f2f}[theme=base16-shapeshifter] .hljs-attr,[theme=base16-shapeshifter] .hljs-link,[theme=base16-shapeshifter] .hljs-literal,[theme=base16-shapeshifter] .hljs-number,[theme=base16-shapeshifter] .hljs-symbol,[theme=base16-shapeshifter] .hljs-variable.constant_{color:#e09448}[theme=base16-shapeshifter] .hljs-class .hljs-title,[theme=base16-shapeshifter] .hljs-title,[theme=base16-shapeshifter] .hljs-title.class_{color:#dddd13}[theme=base16-shapeshifter] .hljs-strong{font-weight:700;color:#dddd13}[theme=base16-shapeshifter] .hljs-addition,[theme=base16-shapeshifter] .hljs-code,[theme=base16-shapeshifter] .hljs-string,[theme=base16-shapeshifter] .hljs-title.class_.inherited__{color:#0ed839}[theme=base16-shapeshifter] .hljs-built_in,[theme=base16-shapeshifter] .hljs-doctag,[theme=base16-shapeshifter] .hljs-keyword.hljs-atrule,[theme=base16-shapeshifter] .hljs-quote,[theme=base16-shapeshifter] .hljs-regexp{color:#23edda}[theme=base16-shapeshifter] .hljs-attribute,[theme=base16-shapeshifter] .hljs-function .hljs-title,[theme=base16-shapeshifter] .hljs-section,[theme=base16-shapeshifter] .hljs-title.function_,[theme=base16-shapeshifter] .ruby .hljs-property{color:#3b48e3}[theme=base16-shapeshifter] .diff .hljs-meta,[theme=base16-shapeshifter] .hljs-keyword,[theme=base16-shapeshifter] .hljs-template-tag,[theme=base16-shapeshifter] .hljs-type{color:#f996e2}[theme=base16-shapeshifter] .hljs-emphasis{color:#f996e2;font-style:italic}[theme=base16-shapeshifter] .hljs-meta,[theme=base16-shapeshifter] .hljs-meta .hljs-keyword,[theme=base16-shapeshifter] .hljs-meta .hljs-string{color:#69542d}[theme=base16-shapeshifter] .hljs-meta .hljs-keyword,[theme=base16-shapeshifter] .hljs-meta-keyword{font-weight:700}[theme=base16-silk-dark]{ + /*! + Theme: Silk Dark + Author: Gabriel Fontes (https://github.com/Misterio77) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-silk-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-silk-dark] code.hljs{padding:3px 5px}[theme=base16-silk-dark] .hljs{color:#c7dbdd;background:#0e3c46}[theme=base16-silk-dark] .hljs ::-moz-selection,[theme=base16-silk-dark] .hljs::-moz-selection{background-color:#2a5054;color:#c7dbdd}[theme=base16-silk-dark] .hljs ::selection,[theme=base16-silk-dark] .hljs::selection{background-color:#2a5054;color:#c7dbdd}[theme=base16-silk-dark] .hljs-comment{color:#587073}[theme=base16-silk-dark] .hljs-tag{color:#9dc8cd}[theme=base16-silk-dark] .hljs-operator,[theme=base16-silk-dark] .hljs-punctuation,[theme=base16-silk-dark] .hljs-subst{color:#c7dbdd}[theme=base16-silk-dark] .hljs-operator{opacity:.7}[theme=base16-silk-dark] .hljs-bullet,[theme=base16-silk-dark] .hljs-deletion,[theme=base16-silk-dark] .hljs-name,[theme=base16-silk-dark] .hljs-selector-tag,[theme=base16-silk-dark] .hljs-template-variable,[theme=base16-silk-dark] .hljs-variable{color:#fb6953}[theme=base16-silk-dark] .hljs-attr,[theme=base16-silk-dark] .hljs-link,[theme=base16-silk-dark] .hljs-literal,[theme=base16-silk-dark] .hljs-number,[theme=base16-silk-dark] .hljs-symbol,[theme=base16-silk-dark] .hljs-variable.constant_{color:#fcab74}[theme=base16-silk-dark] .hljs-class .hljs-title,[theme=base16-silk-dark] .hljs-title,[theme=base16-silk-dark] .hljs-title.class_{color:#fce380}[theme=base16-silk-dark] .hljs-strong{font-weight:700;color:#fce380}[theme=base16-silk-dark] .hljs-addition,[theme=base16-silk-dark] .hljs-code,[theme=base16-silk-dark] .hljs-string,[theme=base16-silk-dark] .hljs-title.class_.inherited__{color:#73d8ad}[theme=base16-silk-dark] .hljs-built_in,[theme=base16-silk-dark] .hljs-doctag,[theme=base16-silk-dark] .hljs-keyword.hljs-atrule,[theme=base16-silk-dark] .hljs-quote,[theme=base16-silk-dark] .hljs-regexp{color:#3fb2b9}[theme=base16-silk-dark] .hljs-attribute,[theme=base16-silk-dark] .hljs-function .hljs-title,[theme=base16-silk-dark] .hljs-section,[theme=base16-silk-dark] .hljs-title.function_,[theme=base16-silk-dark] .ruby .hljs-property{color:#46bddd}[theme=base16-silk-dark] .diff .hljs-meta,[theme=base16-silk-dark] .hljs-keyword,[theme=base16-silk-dark] .hljs-template-tag,[theme=base16-silk-dark] .hljs-type{color:#756b8a}[theme=base16-silk-dark] .hljs-emphasis{color:#756b8a;font-style:italic}[theme=base16-silk-dark] .hljs-meta,[theme=base16-silk-dark] .hljs-meta .hljs-keyword,[theme=base16-silk-dark] .hljs-meta .hljs-string{color:#9b647b}[theme=base16-silk-dark] .hljs-meta .hljs-keyword,[theme=base16-silk-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-silk-light]{ + /*! + Theme: Silk Light + Author: Gabriel Fontes (https://github.com/Misterio77) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-silk-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-silk-light] code.hljs{padding:3px 5px}[theme=base16-silk-light] .hljs{color:#385156;background:#e9f1ef}[theme=base16-silk-light] .hljs ::-moz-selection,[theme=base16-silk-light] .hljs::-moz-selection{background-color:#90b7b6;color:#385156}[theme=base16-silk-light] .hljs ::selection,[theme=base16-silk-light] .hljs::selection{background-color:#90b7b6;color:#385156}[theme=base16-silk-light] .hljs-comment{color:#5c787b}[theme=base16-silk-light] .hljs-tag{color:#4b5b5f}[theme=base16-silk-light] .hljs-operator,[theme=base16-silk-light] .hljs-punctuation,[theme=base16-silk-light] .hljs-subst{color:#385156}[theme=base16-silk-light] .hljs-operator{opacity:.7}[theme=base16-silk-light] .hljs-bullet,[theme=base16-silk-light] .hljs-deletion,[theme=base16-silk-light] .hljs-name,[theme=base16-silk-light] .hljs-selector-tag,[theme=base16-silk-light] .hljs-template-variable,[theme=base16-silk-light] .hljs-variable{color:#cf432e}[theme=base16-silk-light] .hljs-attr,[theme=base16-silk-light] .hljs-link,[theme=base16-silk-light] .hljs-literal,[theme=base16-silk-light] .hljs-number,[theme=base16-silk-light] .hljs-symbol,[theme=base16-silk-light] .hljs-variable.constant_{color:#d27f46}[theme=base16-silk-light] .hljs-class .hljs-title,[theme=base16-silk-light] .hljs-title,[theme=base16-silk-light] .hljs-title.class_{color:#cfad25}[theme=base16-silk-light] .hljs-strong{font-weight:700;color:#cfad25}[theme=base16-silk-light] .hljs-addition,[theme=base16-silk-light] .hljs-code,[theme=base16-silk-light] .hljs-string,[theme=base16-silk-light] .hljs-title.class_.inherited__{color:#6ca38c}[theme=base16-silk-light] .hljs-built_in,[theme=base16-silk-light] .hljs-doctag,[theme=base16-silk-light] .hljs-keyword.hljs-atrule,[theme=base16-silk-light] .hljs-quote,[theme=base16-silk-light] .hljs-regexp{color:#329ca2}[theme=base16-silk-light] .hljs-attribute,[theme=base16-silk-light] .hljs-function .hljs-title,[theme=base16-silk-light] .hljs-section,[theme=base16-silk-light] .hljs-title.function_,[theme=base16-silk-light] .ruby .hljs-property{color:#39aac9}[theme=base16-silk-light] .diff .hljs-meta,[theme=base16-silk-light] .hljs-keyword,[theme=base16-silk-light] .hljs-template-tag,[theme=base16-silk-light] .hljs-type{color:#6e6582}[theme=base16-silk-light] .hljs-emphasis{color:#6e6582;font-style:italic}[theme=base16-silk-light] .hljs-meta,[theme=base16-silk-light] .hljs-meta .hljs-keyword,[theme=base16-silk-light] .hljs-meta .hljs-string{color:#865369}[theme=base16-silk-light] .hljs-meta .hljs-keyword,[theme=base16-silk-light] .hljs-meta-keyword{font-weight:700}[theme=base16-snazzy]{ + /*! + Theme: Snazzy + Author: Chawye Hsu (https://github.com/chawyehsu) based on Hyper Snazzy Theme (https://github.com/sindresorhus/hyper-snazzy) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-snazzy] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-snazzy] code.hljs{padding:3px 5px}[theme=base16-snazzy] .hljs{color:#e2e4e5;background:#282a36}[theme=base16-snazzy] .hljs ::-moz-selection,[theme=base16-snazzy] .hljs::-moz-selection{background-color:#43454f;color:#e2e4e5}[theme=base16-snazzy] .hljs ::selection,[theme=base16-snazzy] .hljs::selection{background-color:#43454f;color:#e2e4e5}[theme=base16-snazzy] .hljs-comment{color:#78787e}[theme=base16-snazzy] .hljs-tag{color:#a5a5a9}[theme=base16-snazzy] .hljs-operator,[theme=base16-snazzy] .hljs-punctuation,[theme=base16-snazzy] .hljs-subst{color:#e2e4e5}[theme=base16-snazzy] .hljs-operator{opacity:.7}[theme=base16-snazzy] .hljs-bullet,[theme=base16-snazzy] .hljs-deletion,[theme=base16-snazzy] .hljs-name,[theme=base16-snazzy] .hljs-selector-tag,[theme=base16-snazzy] .hljs-template-variable,[theme=base16-snazzy] .hljs-variable{color:#ff5c57}[theme=base16-snazzy] .hljs-attr,[theme=base16-snazzy] .hljs-link,[theme=base16-snazzy] .hljs-literal,[theme=base16-snazzy] .hljs-number,[theme=base16-snazzy] .hljs-symbol,[theme=base16-snazzy] .hljs-variable.constant_{color:#ff9f43}[theme=base16-snazzy] .hljs-class .hljs-title,[theme=base16-snazzy] .hljs-title,[theme=base16-snazzy] .hljs-title.class_{color:#f3f99d}[theme=base16-snazzy] .hljs-strong{font-weight:700;color:#f3f99d}[theme=base16-snazzy] .hljs-addition,[theme=base16-snazzy] .hljs-code,[theme=base16-snazzy] .hljs-string,[theme=base16-snazzy] .hljs-title.class_.inherited__{color:#5af78e}[theme=base16-snazzy] .hljs-built_in,[theme=base16-snazzy] .hljs-doctag,[theme=base16-snazzy] .hljs-keyword.hljs-atrule,[theme=base16-snazzy] .hljs-quote,[theme=base16-snazzy] .hljs-regexp{color:#9aedfe}[theme=base16-snazzy] .hljs-attribute,[theme=base16-snazzy] .hljs-function .hljs-title,[theme=base16-snazzy] .hljs-section,[theme=base16-snazzy] .hljs-title.function_,[theme=base16-snazzy] .ruby .hljs-property{color:#57c7ff}[theme=base16-snazzy] .diff .hljs-meta,[theme=base16-snazzy] .hljs-keyword,[theme=base16-snazzy] .hljs-template-tag,[theme=base16-snazzy] .hljs-type{color:#ff6ac1}[theme=base16-snazzy] .hljs-emphasis{color:#ff6ac1;font-style:italic}[theme=base16-snazzy] .hljs-meta,[theme=base16-snazzy] .hljs-meta .hljs-keyword,[theme=base16-snazzy] .hljs-meta .hljs-string{color:#b2643c}[theme=base16-snazzy] .hljs-meta .hljs-keyword,[theme=base16-snazzy] .hljs-meta-keyword{font-weight:700}[theme=base16-solar-flare-light]{ + /*! + Theme: Solar Flare Light + Author: Chuck Harmston (https://chuck.harmston.ch) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-solar-flare-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-solar-flare-light] code.hljs{padding:3px 5px}[theme=base16-solar-flare-light] .hljs{color:#586875;background:#f5f7fa}[theme=base16-solar-flare-light] .hljs ::-moz-selection,[theme=base16-solar-flare-light] .hljs::-moz-selection{background-color:#a6afb8;color:#586875}[theme=base16-solar-flare-light] .hljs ::selection,[theme=base16-solar-flare-light] .hljs::selection{background-color:#a6afb8;color:#586875}[theme=base16-solar-flare-light] .hljs-comment{color:#85939e}[theme=base16-solar-flare-light] .hljs-tag{color:#667581}[theme=base16-solar-flare-light] .hljs-operator,[theme=base16-solar-flare-light] .hljs-punctuation,[theme=base16-solar-flare-light] .hljs-subst{color:#586875}[theme=base16-solar-flare-light] .hljs-operator{opacity:.7}[theme=base16-solar-flare-light] .hljs-bullet,[theme=base16-solar-flare-light] .hljs-deletion,[theme=base16-solar-flare-light] .hljs-name,[theme=base16-solar-flare-light] .hljs-selector-tag,[theme=base16-solar-flare-light] .hljs-template-variable,[theme=base16-solar-flare-light] .hljs-variable{color:#ef5253}[theme=base16-solar-flare-light] .hljs-attr,[theme=base16-solar-flare-light] .hljs-link,[theme=base16-solar-flare-light] .hljs-literal,[theme=base16-solar-flare-light] .hljs-number,[theme=base16-solar-flare-light] .hljs-symbol,[theme=base16-solar-flare-light] .hljs-variable.constant_{color:#e66b2b}[theme=base16-solar-flare-light] .hljs-class .hljs-title,[theme=base16-solar-flare-light] .hljs-title,[theme=base16-solar-flare-light] .hljs-title.class_{color:#e4b51c}[theme=base16-solar-flare-light] .hljs-strong{font-weight:700;color:#e4b51c}[theme=base16-solar-flare-light] .hljs-addition,[theme=base16-solar-flare-light] .hljs-code,[theme=base16-solar-flare-light] .hljs-string,[theme=base16-solar-flare-light] .hljs-title.class_.inherited__{color:#7cc844}[theme=base16-solar-flare-light] .hljs-built_in,[theme=base16-solar-flare-light] .hljs-doctag,[theme=base16-solar-flare-light] .hljs-keyword.hljs-atrule,[theme=base16-solar-flare-light] .hljs-quote,[theme=base16-solar-flare-light] .hljs-regexp{color:#52cbb0}[theme=base16-solar-flare-light] .hljs-attribute,[theme=base16-solar-flare-light] .hljs-function .hljs-title,[theme=base16-solar-flare-light] .hljs-section,[theme=base16-solar-flare-light] .hljs-title.function_,[theme=base16-solar-flare-light] .ruby .hljs-property{color:#33b5e1}[theme=base16-solar-flare-light] .diff .hljs-meta,[theme=base16-solar-flare-light] .hljs-keyword,[theme=base16-solar-flare-light] .hljs-template-tag,[theme=base16-solar-flare-light] .hljs-type{color:#a363d5}[theme=base16-solar-flare-light] .hljs-emphasis{color:#a363d5;font-style:italic}[theme=base16-solar-flare-light] .hljs-meta,[theme=base16-solar-flare-light] .hljs-meta .hljs-keyword,[theme=base16-solar-flare-light] .hljs-meta .hljs-string{color:#d73c9a}[theme=base16-solar-flare-light] .hljs-meta .hljs-keyword,[theme=base16-solar-flare-light] .hljs-meta-keyword{font-weight:700}[theme=base16-solar-flare]{ + /*! + Theme: Solar Flare + Author: Chuck Harmston (https://chuck.harmston.ch) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-solar-flare] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-solar-flare] code.hljs{padding:3px 5px}[theme=base16-solar-flare] .hljs{color:#a6afb8;background:#18262f}[theme=base16-solar-flare] .hljs ::-moz-selection,[theme=base16-solar-flare] .hljs::-moz-selection{background-color:#586875;color:#a6afb8}[theme=base16-solar-flare] .hljs ::selection,[theme=base16-solar-flare] .hljs::selection{background-color:#586875;color:#a6afb8}[theme=base16-solar-flare] .hljs-comment{color:#667581}[theme=base16-solar-flare] .hljs-tag{color:#85939e}[theme=base16-solar-flare] .hljs-operator,[theme=base16-solar-flare] .hljs-punctuation,[theme=base16-solar-flare] .hljs-subst{color:#a6afb8}[theme=base16-solar-flare] .hljs-operator{opacity:.7}[theme=base16-solar-flare] .hljs-bullet,[theme=base16-solar-flare] .hljs-deletion,[theme=base16-solar-flare] .hljs-name,[theme=base16-solar-flare] .hljs-selector-tag,[theme=base16-solar-flare] .hljs-template-variable,[theme=base16-solar-flare] .hljs-variable{color:#ef5253}[theme=base16-solar-flare] .hljs-attr,[theme=base16-solar-flare] .hljs-link,[theme=base16-solar-flare] .hljs-literal,[theme=base16-solar-flare] .hljs-number,[theme=base16-solar-flare] .hljs-symbol,[theme=base16-solar-flare] .hljs-variable.constant_{color:#e66b2b}[theme=base16-solar-flare] .hljs-class .hljs-title,[theme=base16-solar-flare] .hljs-title,[theme=base16-solar-flare] .hljs-title.class_{color:#e4b51c}[theme=base16-solar-flare] .hljs-strong{font-weight:700;color:#e4b51c}[theme=base16-solar-flare] .hljs-addition,[theme=base16-solar-flare] .hljs-code,[theme=base16-solar-flare] .hljs-string,[theme=base16-solar-flare] .hljs-title.class_.inherited__{color:#7cc844}[theme=base16-solar-flare] .hljs-built_in,[theme=base16-solar-flare] .hljs-doctag,[theme=base16-solar-flare] .hljs-keyword.hljs-atrule,[theme=base16-solar-flare] .hljs-quote,[theme=base16-solar-flare] .hljs-regexp{color:#52cbb0}[theme=base16-solar-flare] .hljs-attribute,[theme=base16-solar-flare] .hljs-function .hljs-title,[theme=base16-solar-flare] .hljs-section,[theme=base16-solar-flare] .hljs-title.function_,[theme=base16-solar-flare] .ruby .hljs-property{color:#33b5e1}[theme=base16-solar-flare] .diff .hljs-meta,[theme=base16-solar-flare] .hljs-keyword,[theme=base16-solar-flare] .hljs-template-tag,[theme=base16-solar-flare] .hljs-type{color:#a363d5}[theme=base16-solar-flare] .hljs-emphasis{color:#a363d5;font-style:italic}[theme=base16-solar-flare] .hljs-meta,[theme=base16-solar-flare] .hljs-meta .hljs-keyword,[theme=base16-solar-flare] .hljs-meta .hljs-string{color:#d73c9a}[theme=base16-solar-flare] .hljs-meta .hljs-keyword,[theme=base16-solar-flare] .hljs-meta-keyword{font-weight:700}[theme=base16-solarized-dark]{ + /*! + Theme: Solarized Dark + Author: Ethan Schoonover (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-solarized-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-solarized-dark] code.hljs{padding:3px 5px}[theme=base16-solarized-dark] .hljs{color:#93a1a1;background:#002b36}[theme=base16-solarized-dark] .hljs ::-moz-selection,[theme=base16-solarized-dark] .hljs::-moz-selection{background-color:#586e75;color:#93a1a1}[theme=base16-solarized-dark] .hljs ::selection,[theme=base16-solarized-dark] .hljs::selection{background-color:#586e75;color:#93a1a1}[theme=base16-solarized-dark] .hljs-comment{color:#657b83}[theme=base16-solarized-dark] .hljs-tag{color:#839496}[theme=base16-solarized-dark] .hljs-operator,[theme=base16-solarized-dark] .hljs-punctuation,[theme=base16-solarized-dark] .hljs-subst{color:#93a1a1}[theme=base16-solarized-dark] .hljs-operator{opacity:.7}[theme=base16-solarized-dark] .hljs-bullet,[theme=base16-solarized-dark] .hljs-deletion,[theme=base16-solarized-dark] .hljs-name,[theme=base16-solarized-dark] .hljs-selector-tag,[theme=base16-solarized-dark] .hljs-template-variable,[theme=base16-solarized-dark] .hljs-variable{color:#dc322f}[theme=base16-solarized-dark] .hljs-attr,[theme=base16-solarized-dark] .hljs-link,[theme=base16-solarized-dark] .hljs-literal,[theme=base16-solarized-dark] .hljs-number,[theme=base16-solarized-dark] .hljs-symbol,[theme=base16-solarized-dark] .hljs-variable.constant_{color:#cb4b16}[theme=base16-solarized-dark] .hljs-class .hljs-title,[theme=base16-solarized-dark] .hljs-title,[theme=base16-solarized-dark] .hljs-title.class_{color:#b58900}[theme=base16-solarized-dark] .hljs-strong{font-weight:700;color:#b58900}[theme=base16-solarized-dark] .hljs-addition,[theme=base16-solarized-dark] .hljs-code,[theme=base16-solarized-dark] .hljs-string,[theme=base16-solarized-dark] .hljs-title.class_.inherited__{color:#859900}[theme=base16-solarized-dark] .hljs-built_in,[theme=base16-solarized-dark] .hljs-doctag,[theme=base16-solarized-dark] .hljs-keyword.hljs-atrule,[theme=base16-solarized-dark] .hljs-quote,[theme=base16-solarized-dark] .hljs-regexp{color:#2aa198}[theme=base16-solarized-dark] .hljs-attribute,[theme=base16-solarized-dark] .hljs-function .hljs-title,[theme=base16-solarized-dark] .hljs-section,[theme=base16-solarized-dark] .hljs-title.function_,[theme=base16-solarized-dark] .ruby .hljs-property{color:#268bd2}[theme=base16-solarized-dark] .diff .hljs-meta,[theme=base16-solarized-dark] .hljs-keyword,[theme=base16-solarized-dark] .hljs-template-tag,[theme=base16-solarized-dark] .hljs-type{color:#6c71c4}[theme=base16-solarized-dark] .hljs-emphasis{color:#6c71c4;font-style:italic}[theme=base16-solarized-dark] .hljs-meta,[theme=base16-solarized-dark] .hljs-meta .hljs-keyword,[theme=base16-solarized-dark] .hljs-meta .hljs-string{color:#d33682}[theme=base16-solarized-dark] .hljs-meta .hljs-keyword,[theme=base16-solarized-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-solarized-light]{ + /*! + Theme: Solarized Light + Author: Ethan Schoonover (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-solarized-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-solarized-light] code.hljs{padding:3px 5px}[theme=base16-solarized-light] .hljs{color:#586e75;background:#fdf6e3}[theme=base16-solarized-light] .hljs ::-moz-selection,[theme=base16-solarized-light] .hljs::-moz-selection{background-color:#93a1a1;color:#586e75}[theme=base16-solarized-light] .hljs ::selection,[theme=base16-solarized-light] .hljs::selection{background-color:#93a1a1;color:#586e75}[theme=base16-solarized-light] .hljs-comment{color:#839496}[theme=base16-solarized-light] .hljs-tag{color:#657b83}[theme=base16-solarized-light] .hljs-operator,[theme=base16-solarized-light] .hljs-punctuation,[theme=base16-solarized-light] .hljs-subst{color:#586e75}[theme=base16-solarized-light] .hljs-operator{opacity:.7}[theme=base16-solarized-light] .hljs-bullet,[theme=base16-solarized-light] .hljs-deletion,[theme=base16-solarized-light] .hljs-name,[theme=base16-solarized-light] .hljs-selector-tag,[theme=base16-solarized-light] .hljs-template-variable,[theme=base16-solarized-light] .hljs-variable{color:#dc322f}[theme=base16-solarized-light] .hljs-attr,[theme=base16-solarized-light] .hljs-link,[theme=base16-solarized-light] .hljs-literal,[theme=base16-solarized-light] .hljs-number,[theme=base16-solarized-light] .hljs-symbol,[theme=base16-solarized-light] .hljs-variable.constant_{color:#cb4b16}[theme=base16-solarized-light] .hljs-class .hljs-title,[theme=base16-solarized-light] .hljs-title,[theme=base16-solarized-light] .hljs-title.class_{color:#b58900}[theme=base16-solarized-light] .hljs-strong{font-weight:700;color:#b58900}[theme=base16-solarized-light] .hljs-addition,[theme=base16-solarized-light] .hljs-code,[theme=base16-solarized-light] .hljs-string,[theme=base16-solarized-light] .hljs-title.class_.inherited__{color:#859900}[theme=base16-solarized-light] .hljs-built_in,[theme=base16-solarized-light] .hljs-doctag,[theme=base16-solarized-light] .hljs-keyword.hljs-atrule,[theme=base16-solarized-light] .hljs-quote,[theme=base16-solarized-light] .hljs-regexp{color:#2aa198}[theme=base16-solarized-light] .hljs-attribute,[theme=base16-solarized-light] .hljs-function .hljs-title,[theme=base16-solarized-light] .hljs-section,[theme=base16-solarized-light] .hljs-title.function_,[theme=base16-solarized-light] .ruby .hljs-property{color:#268bd2}[theme=base16-solarized-light] .diff .hljs-meta,[theme=base16-solarized-light] .hljs-keyword,[theme=base16-solarized-light] .hljs-template-tag,[theme=base16-solarized-light] .hljs-type{color:#6c71c4}[theme=base16-solarized-light] .hljs-emphasis{color:#6c71c4;font-style:italic}[theme=base16-solarized-light] .hljs-meta,[theme=base16-solarized-light] .hljs-meta .hljs-keyword,[theme=base16-solarized-light] .hljs-meta .hljs-string{color:#d33682}[theme=base16-solarized-light] .hljs-meta .hljs-keyword,[theme=base16-solarized-light] .hljs-meta-keyword{font-weight:700}[theme=base16-spacemacs]{ + /*! + Theme: Spacemacs + Author: Nasser Alshammari (https://github.com/nashamri/spacemacs-theme) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-spacemacs] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-spacemacs] code.hljs{padding:3px 5px}[theme=base16-spacemacs] .hljs{color:#a3a3a3;background:#1f2022}[theme=base16-spacemacs] .hljs ::-moz-selection,[theme=base16-spacemacs] .hljs::-moz-selection{background-color:#444155;color:#a3a3a3}[theme=base16-spacemacs] .hljs ::selection,[theme=base16-spacemacs] .hljs::selection{background-color:#444155;color:#a3a3a3}[theme=base16-spacemacs] .hljs-comment{color:#585858}[theme=base16-spacemacs] .hljs-tag{color:#b8b8b8}[theme=base16-spacemacs] .hljs-operator,[theme=base16-spacemacs] .hljs-punctuation,[theme=base16-spacemacs] .hljs-subst{color:#a3a3a3}[theme=base16-spacemacs] .hljs-operator{opacity:.7}[theme=base16-spacemacs] .hljs-bullet,[theme=base16-spacemacs] .hljs-deletion,[theme=base16-spacemacs] .hljs-name,[theme=base16-spacemacs] .hljs-selector-tag,[theme=base16-spacemacs] .hljs-template-variable,[theme=base16-spacemacs] .hljs-variable{color:#f2241f}[theme=base16-spacemacs] .hljs-attr,[theme=base16-spacemacs] .hljs-link,[theme=base16-spacemacs] .hljs-literal,[theme=base16-spacemacs] .hljs-number,[theme=base16-spacemacs] .hljs-symbol,[theme=base16-spacemacs] .hljs-variable.constant_{color:orange}[theme=base16-spacemacs] .hljs-class .hljs-title,[theme=base16-spacemacs] .hljs-title,[theme=base16-spacemacs] .hljs-title.class_{color:#b1951d}[theme=base16-spacemacs] .hljs-strong{font-weight:700;color:#b1951d}[theme=base16-spacemacs] .hljs-addition,[theme=base16-spacemacs] .hljs-code,[theme=base16-spacemacs] .hljs-string,[theme=base16-spacemacs] .hljs-title.class_.inherited__{color:#67b11d}[theme=base16-spacemacs] .hljs-built_in,[theme=base16-spacemacs] .hljs-doctag,[theme=base16-spacemacs] .hljs-keyword.hljs-atrule,[theme=base16-spacemacs] .hljs-quote,[theme=base16-spacemacs] .hljs-regexp{color:#2d9574}[theme=base16-spacemacs] .hljs-attribute,[theme=base16-spacemacs] .hljs-function .hljs-title,[theme=base16-spacemacs] .hljs-section,[theme=base16-spacemacs] .hljs-title.function_,[theme=base16-spacemacs] .ruby .hljs-property{color:#4f97d7}[theme=base16-spacemacs] .diff .hljs-meta,[theme=base16-spacemacs] .hljs-keyword,[theme=base16-spacemacs] .hljs-template-tag,[theme=base16-spacemacs] .hljs-type{color:#a31db1}[theme=base16-spacemacs] .hljs-emphasis{color:#a31db1;font-style:italic}[theme=base16-spacemacs] .hljs-meta,[theme=base16-spacemacs] .hljs-meta .hljs-keyword,[theme=base16-spacemacs] .hljs-meta .hljs-string{color:#b03060}[theme=base16-spacemacs] .hljs-meta .hljs-keyword,[theme=base16-spacemacs] .hljs-meta-keyword{font-weight:700}[theme=base16-summercamp]{ + /*! + Theme: summercamp + Author: zoe firi (zoefiri.github.io) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-summercamp] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-summercamp] code.hljs{padding:3px 5px}[theme=base16-summercamp] .hljs{color:#736e55;background:#1c1810}[theme=base16-summercamp] .hljs ::-moz-selection,[theme=base16-summercamp] .hljs::-moz-selection{background-color:#3a3527;color:#736e55}[theme=base16-summercamp] .hljs ::selection,[theme=base16-summercamp] .hljs::selection{background-color:#3a3527;color:#736e55}[theme=base16-summercamp] .hljs-comment{color:#504b38}[theme=base16-summercamp] .hljs-tag{color:#5f5b45}[theme=base16-summercamp] .hljs-operator,[theme=base16-summercamp] .hljs-punctuation,[theme=base16-summercamp] .hljs-subst{color:#736e55}[theme=base16-summercamp] .hljs-operator{opacity:.7}[theme=base16-summercamp] .hljs-bullet,[theme=base16-summercamp] .hljs-deletion,[theme=base16-summercamp] .hljs-name,[theme=base16-summercamp] .hljs-selector-tag,[theme=base16-summercamp] .hljs-template-variable,[theme=base16-summercamp] .hljs-variable{color:#e35142}[theme=base16-summercamp] .hljs-attr,[theme=base16-summercamp] .hljs-link,[theme=base16-summercamp] .hljs-literal,[theme=base16-summercamp] .hljs-number,[theme=base16-summercamp] .hljs-symbol,[theme=base16-summercamp] .hljs-variable.constant_{color:#fba11b}[theme=base16-summercamp] .hljs-class .hljs-title,[theme=base16-summercamp] .hljs-title,[theme=base16-summercamp] .hljs-title.class_{color:#f2ff27}[theme=base16-summercamp] .hljs-strong{font-weight:700;color:#f2ff27}[theme=base16-summercamp] .hljs-addition,[theme=base16-summercamp] .hljs-code,[theme=base16-summercamp] .hljs-string,[theme=base16-summercamp] .hljs-title.class_.inherited__{color:#5ceb5a}[theme=base16-summercamp] .hljs-built_in,[theme=base16-summercamp] .hljs-doctag,[theme=base16-summercamp] .hljs-keyword.hljs-atrule,[theme=base16-summercamp] .hljs-quote,[theme=base16-summercamp] .hljs-regexp{color:#5aebbc}[theme=base16-summercamp] .hljs-attribute,[theme=base16-summercamp] .hljs-function .hljs-title,[theme=base16-summercamp] .hljs-section,[theme=base16-summercamp] .hljs-title.function_,[theme=base16-summercamp] .ruby .hljs-property{color:#489bf0}[theme=base16-summercamp] .diff .hljs-meta,[theme=base16-summercamp] .hljs-keyword,[theme=base16-summercamp] .hljs-template-tag,[theme=base16-summercamp] .hljs-type{color:#ff8080}[theme=base16-summercamp] .hljs-emphasis{color:#ff8080;font-style:italic}[theme=base16-summercamp] .hljs-meta,[theme=base16-summercamp] .hljs-meta .hljs-keyword,[theme=base16-summercamp] .hljs-meta .hljs-string{color:#f69be7}[theme=base16-summercamp] .hljs-meta .hljs-keyword,[theme=base16-summercamp] .hljs-meta-keyword{font-weight:700}[theme=base16-summerfruit-dark]{ + /*! + Theme: Summerfruit Dark + Author: Christopher Corley (http://christop.club/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-summerfruit-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-summerfruit-dark] code.hljs{padding:3px 5px}[theme=base16-summerfruit-dark] .hljs{color:#d0d0d0;background:#151515}[theme=base16-summerfruit-dark] .hljs ::-moz-selection,[theme=base16-summerfruit-dark] .hljs::-moz-selection{background-color:#303030;color:#d0d0d0}[theme=base16-summerfruit-dark] .hljs ::selection,[theme=base16-summerfruit-dark] .hljs::selection{background-color:#303030;color:#d0d0d0}[theme=base16-summerfruit-dark] .hljs-comment{color:#505050}[theme=base16-summerfruit-dark] .hljs-tag{color:#b0b0b0}[theme=base16-summerfruit-dark] .hljs-operator,[theme=base16-summerfruit-dark] .hljs-punctuation,[theme=base16-summerfruit-dark] .hljs-subst{color:#d0d0d0}[theme=base16-summerfruit-dark] .hljs-operator{opacity:.7}[theme=base16-summerfruit-dark] .hljs-bullet,[theme=base16-summerfruit-dark] .hljs-deletion,[theme=base16-summerfruit-dark] .hljs-name,[theme=base16-summerfruit-dark] .hljs-selector-tag,[theme=base16-summerfruit-dark] .hljs-template-variable,[theme=base16-summerfruit-dark] .hljs-variable{color:#ff0086}[theme=base16-summerfruit-dark] .hljs-attr,[theme=base16-summerfruit-dark] .hljs-link,[theme=base16-summerfruit-dark] .hljs-literal,[theme=base16-summerfruit-dark] .hljs-number,[theme=base16-summerfruit-dark] .hljs-symbol,[theme=base16-summerfruit-dark] .hljs-variable.constant_{color:#fd8900}[theme=base16-summerfruit-dark] .hljs-class .hljs-title,[theme=base16-summerfruit-dark] .hljs-title,[theme=base16-summerfruit-dark] .hljs-title.class_{color:#aba800}[theme=base16-summerfruit-dark] .hljs-strong{font-weight:700;color:#aba800}[theme=base16-summerfruit-dark] .hljs-addition,[theme=base16-summerfruit-dark] .hljs-code,[theme=base16-summerfruit-dark] .hljs-string,[theme=base16-summerfruit-dark] .hljs-title.class_.inherited__{color:#00c918}[theme=base16-summerfruit-dark] .hljs-built_in,[theme=base16-summerfruit-dark] .hljs-doctag,[theme=base16-summerfruit-dark] .hljs-keyword.hljs-atrule,[theme=base16-summerfruit-dark] .hljs-quote,[theme=base16-summerfruit-dark] .hljs-regexp{color:#1faaaa}[theme=base16-summerfruit-dark] .hljs-attribute,[theme=base16-summerfruit-dark] .hljs-function .hljs-title,[theme=base16-summerfruit-dark] .hljs-section,[theme=base16-summerfruit-dark] .hljs-title.function_,[theme=base16-summerfruit-dark] .ruby .hljs-property{color:#3777e6}[theme=base16-summerfruit-dark] .diff .hljs-meta,[theme=base16-summerfruit-dark] .hljs-keyword,[theme=base16-summerfruit-dark] .hljs-template-tag,[theme=base16-summerfruit-dark] .hljs-type{color:#ad00a1}[theme=base16-summerfruit-dark] .hljs-emphasis{color:#ad00a1;font-style:italic}[theme=base16-summerfruit-dark] .hljs-meta,[theme=base16-summerfruit-dark] .hljs-meta .hljs-keyword,[theme=base16-summerfruit-dark] .hljs-meta .hljs-string{color:#c63}[theme=base16-summerfruit-dark] .hljs-meta .hljs-keyword,[theme=base16-summerfruit-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-summerfruit-light]{ + /*! + Theme: Summerfruit Light + Author: Christopher Corley (http://christop.club/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-summerfruit-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-summerfruit-light] code.hljs{padding:3px 5px}[theme=base16-summerfruit-light] .hljs{color:#101010;background:#fff}[theme=base16-summerfruit-light] .hljs ::-moz-selection,[theme=base16-summerfruit-light] .hljs::-moz-selection{background-color:#d0d0d0;color:#101010}[theme=base16-summerfruit-light] .hljs ::selection,[theme=base16-summerfruit-light] .hljs::selection{background-color:#d0d0d0;color:#101010}[theme=base16-summerfruit-light] .hljs-comment{color:#b0b0b0}[theme=base16-summerfruit-light] .hljs-tag{color:#000}[theme=base16-summerfruit-light] .hljs-operator,[theme=base16-summerfruit-light] .hljs-punctuation,[theme=base16-summerfruit-light] .hljs-subst{color:#101010}[theme=base16-summerfruit-light] .hljs-operator{opacity:.7}[theme=base16-summerfruit-light] .hljs-bullet,[theme=base16-summerfruit-light] .hljs-deletion,[theme=base16-summerfruit-light] .hljs-name,[theme=base16-summerfruit-light] .hljs-selector-tag,[theme=base16-summerfruit-light] .hljs-template-variable,[theme=base16-summerfruit-light] .hljs-variable{color:#ff0086}[theme=base16-summerfruit-light] .hljs-attr,[theme=base16-summerfruit-light] .hljs-link,[theme=base16-summerfruit-light] .hljs-literal,[theme=base16-summerfruit-light] .hljs-number,[theme=base16-summerfruit-light] .hljs-symbol,[theme=base16-summerfruit-light] .hljs-variable.constant_{color:#fd8900}[theme=base16-summerfruit-light] .hljs-class .hljs-title,[theme=base16-summerfruit-light] .hljs-title,[theme=base16-summerfruit-light] .hljs-title.class_{color:#aba800}[theme=base16-summerfruit-light] .hljs-strong{font-weight:700;color:#aba800}[theme=base16-summerfruit-light] .hljs-addition,[theme=base16-summerfruit-light] .hljs-code,[theme=base16-summerfruit-light] .hljs-string,[theme=base16-summerfruit-light] .hljs-title.class_.inherited__{color:#00c918}[theme=base16-summerfruit-light] .hljs-built_in,[theme=base16-summerfruit-light] .hljs-doctag,[theme=base16-summerfruit-light] .hljs-keyword.hljs-atrule,[theme=base16-summerfruit-light] .hljs-quote,[theme=base16-summerfruit-light] .hljs-regexp{color:#1faaaa}[theme=base16-summerfruit-light] .hljs-attribute,[theme=base16-summerfruit-light] .hljs-function .hljs-title,[theme=base16-summerfruit-light] .hljs-section,[theme=base16-summerfruit-light] .hljs-title.function_,[theme=base16-summerfruit-light] .ruby .hljs-property{color:#3777e6}[theme=base16-summerfruit-light] .diff .hljs-meta,[theme=base16-summerfruit-light] .hljs-keyword,[theme=base16-summerfruit-light] .hljs-template-tag,[theme=base16-summerfruit-light] .hljs-type{color:#ad00a1}[theme=base16-summerfruit-light] .hljs-emphasis{color:#ad00a1;font-style:italic}[theme=base16-summerfruit-light] .hljs-meta,[theme=base16-summerfruit-light] .hljs-meta .hljs-keyword,[theme=base16-summerfruit-light] .hljs-meta .hljs-string{color:#c63}[theme=base16-summerfruit-light] .hljs-meta .hljs-keyword,[theme=base16-summerfruit-light] .hljs-meta-keyword{font-weight:700}[theme=base16-synth-midnight-terminal-dark]{ + /*! + Theme: Synth Midnight Terminal Dark + Author: Michaël Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-synth-midnight-terminal-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-synth-midnight-terminal-dark] code.hljs{padding:3px 5px}[theme=base16-synth-midnight-terminal-dark] .hljs{color:#c1c3c4;background:#050608}[theme=base16-synth-midnight-terminal-dark] .hljs ::-moz-selection,[theme=base16-synth-midnight-terminal-dark] .hljs::-moz-selection{background-color:#28292a;color:#c1c3c4}[theme=base16-synth-midnight-terminal-dark] .hljs ::selection,[theme=base16-synth-midnight-terminal-dark] .hljs::selection{background-color:#28292a;color:#c1c3c4}[theme=base16-synth-midnight-terminal-dark] .hljs-comment{color:#474849}[theme=base16-synth-midnight-terminal-dark] .hljs-tag{color:#a3a5a6}[theme=base16-synth-midnight-terminal-dark] .hljs-operator,[theme=base16-synth-midnight-terminal-dark] .hljs-punctuation,[theme=base16-synth-midnight-terminal-dark] .hljs-subst{color:#c1c3c4}[theme=base16-synth-midnight-terminal-dark] .hljs-operator{opacity:.7}[theme=base16-synth-midnight-terminal-dark] .hljs-bullet,[theme=base16-synth-midnight-terminal-dark] .hljs-deletion,[theme=base16-synth-midnight-terminal-dark] .hljs-name,[theme=base16-synth-midnight-terminal-dark] .hljs-selector-tag,[theme=base16-synth-midnight-terminal-dark] .hljs-template-variable,[theme=base16-synth-midnight-terminal-dark] .hljs-variable{color:#b53b50}[theme=base16-synth-midnight-terminal-dark] .hljs-attr,[theme=base16-synth-midnight-terminal-dark] .hljs-link,[theme=base16-synth-midnight-terminal-dark] .hljs-literal,[theme=base16-synth-midnight-terminal-dark] .hljs-number,[theme=base16-synth-midnight-terminal-dark] .hljs-symbol,[theme=base16-synth-midnight-terminal-dark] .hljs-variable.constant_{color:#ea770d}[theme=base16-synth-midnight-terminal-dark] .hljs-class .hljs-title,[theme=base16-synth-midnight-terminal-dark] .hljs-title,[theme=base16-synth-midnight-terminal-dark] .hljs-title.class_{color:#c9d364}[theme=base16-synth-midnight-terminal-dark] .hljs-strong{font-weight:700;color:#c9d364}[theme=base16-synth-midnight-terminal-dark] .hljs-addition,[theme=base16-synth-midnight-terminal-dark] .hljs-code,[theme=base16-synth-midnight-terminal-dark] .hljs-string,[theme=base16-synth-midnight-terminal-dark] .hljs-title.class_.inherited__{color:#06ea61}[theme=base16-synth-midnight-terminal-dark] .hljs-built_in,[theme=base16-synth-midnight-terminal-dark] .hljs-doctag,[theme=base16-synth-midnight-terminal-dark] .hljs-keyword.hljs-atrule,[theme=base16-synth-midnight-terminal-dark] .hljs-quote,[theme=base16-synth-midnight-terminal-dark] .hljs-regexp{color:#42fff9}[theme=base16-synth-midnight-terminal-dark] .hljs-attribute,[theme=base16-synth-midnight-terminal-dark] .hljs-function .hljs-title,[theme=base16-synth-midnight-terminal-dark] .hljs-section,[theme=base16-synth-midnight-terminal-dark] .hljs-title.function_,[theme=base16-synth-midnight-terminal-dark] .ruby .hljs-property{color:#03aeff}[theme=base16-synth-midnight-terminal-dark] .diff .hljs-meta,[theme=base16-synth-midnight-terminal-dark] .hljs-keyword,[theme=base16-synth-midnight-terminal-dark] .hljs-template-tag,[theme=base16-synth-midnight-terminal-dark] .hljs-type{color:#ea5ce2}[theme=base16-synth-midnight-terminal-dark] .hljs-emphasis{color:#ea5ce2;font-style:italic}[theme=base16-synth-midnight-terminal-dark] .hljs-meta,[theme=base16-synth-midnight-terminal-dark] .hljs-meta .hljs-keyword,[theme=base16-synth-midnight-terminal-dark] .hljs-meta .hljs-string{color:#cd6320}[theme=base16-synth-midnight-terminal-dark] .hljs-meta .hljs-keyword,[theme=base16-synth-midnight-terminal-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-synth-midnight-terminal-light]{ + /*! + Theme: Synth Midnight Terminal Light + Author: Michaël Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-synth-midnight-terminal-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-synth-midnight-terminal-light] code.hljs{padding:3px 5px}[theme=base16-synth-midnight-terminal-light] .hljs{color:#28292a;background:#dddfe0}[theme=base16-synth-midnight-terminal-light] .hljs ::-moz-selection,[theme=base16-synth-midnight-terminal-light] .hljs::-moz-selection{background-color:#c1c3c4;color:#28292a}[theme=base16-synth-midnight-terminal-light] .hljs ::selection,[theme=base16-synth-midnight-terminal-light] .hljs::selection{background-color:#c1c3c4;color:#28292a}[theme=base16-synth-midnight-terminal-light] .hljs-comment{color:#a3a5a6}[theme=base16-synth-midnight-terminal-light] .hljs-tag{color:#474849}[theme=base16-synth-midnight-terminal-light] .hljs-operator,[theme=base16-synth-midnight-terminal-light] .hljs-punctuation,[theme=base16-synth-midnight-terminal-light] .hljs-subst{color:#28292a}[theme=base16-synth-midnight-terminal-light] .hljs-operator{opacity:.7}[theme=base16-synth-midnight-terminal-light] .hljs-bullet,[theme=base16-synth-midnight-terminal-light] .hljs-deletion,[theme=base16-synth-midnight-terminal-light] .hljs-name,[theme=base16-synth-midnight-terminal-light] .hljs-selector-tag,[theme=base16-synth-midnight-terminal-light] .hljs-template-variable,[theme=base16-synth-midnight-terminal-light] .hljs-variable{color:#b53b50}[theme=base16-synth-midnight-terminal-light] .hljs-attr,[theme=base16-synth-midnight-terminal-light] .hljs-link,[theme=base16-synth-midnight-terminal-light] .hljs-literal,[theme=base16-synth-midnight-terminal-light] .hljs-number,[theme=base16-synth-midnight-terminal-light] .hljs-symbol,[theme=base16-synth-midnight-terminal-light] .hljs-variable.constant_{color:#ea770d}[theme=base16-synth-midnight-terminal-light] .hljs-class .hljs-title,[theme=base16-synth-midnight-terminal-light] .hljs-title,[theme=base16-synth-midnight-terminal-light] .hljs-title.class_{color:#c9d364}[theme=base16-synth-midnight-terminal-light] .hljs-strong{font-weight:700;color:#c9d364}[theme=base16-synth-midnight-terminal-light] .hljs-addition,[theme=base16-synth-midnight-terminal-light] .hljs-code,[theme=base16-synth-midnight-terminal-light] .hljs-string,[theme=base16-synth-midnight-terminal-light] .hljs-title.class_.inherited__{color:#06ea61}[theme=base16-synth-midnight-terminal-light] .hljs-built_in,[theme=base16-synth-midnight-terminal-light] .hljs-doctag,[theme=base16-synth-midnight-terminal-light] .hljs-keyword.hljs-atrule,[theme=base16-synth-midnight-terminal-light] .hljs-quote,[theme=base16-synth-midnight-terminal-light] .hljs-regexp{color:#42fff9}[theme=base16-synth-midnight-terminal-light] .hljs-attribute,[theme=base16-synth-midnight-terminal-light] .hljs-function .hljs-title,[theme=base16-synth-midnight-terminal-light] .hljs-section,[theme=base16-synth-midnight-terminal-light] .hljs-title.function_,[theme=base16-synth-midnight-terminal-light] .ruby .hljs-property{color:#03aeff}[theme=base16-synth-midnight-terminal-light] .diff .hljs-meta,[theme=base16-synth-midnight-terminal-light] .hljs-keyword,[theme=base16-synth-midnight-terminal-light] .hljs-template-tag,[theme=base16-synth-midnight-terminal-light] .hljs-type{color:#ea5ce2}[theme=base16-synth-midnight-terminal-light] .hljs-emphasis{color:#ea5ce2;font-style:italic}[theme=base16-synth-midnight-terminal-light] .hljs-meta,[theme=base16-synth-midnight-terminal-light] .hljs-meta .hljs-keyword,[theme=base16-synth-midnight-terminal-light] .hljs-meta .hljs-string{color:#cd6320}[theme=base16-synth-midnight-terminal-light] .hljs-meta .hljs-keyword,[theme=base16-synth-midnight-terminal-light] .hljs-meta-keyword{font-weight:700}[theme=base16-tango]{ + /*! + Theme: Tango + Author: @Schnouki, based on the Tango Desktop Project + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-tango] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-tango] code.hljs{padding:3px 5px}[theme=base16-tango] .hljs{color:#d3d7cf;background:#2e3436}[theme=base16-tango] .hljs ::-moz-selection,[theme=base16-tango] .hljs::-moz-selection{background-color:#fce94f;color:#d3d7cf}[theme=base16-tango] .hljs ::selection,[theme=base16-tango] .hljs::selection{background-color:#fce94f;color:#d3d7cf}[theme=base16-tango] .hljs-comment{color:#555753}[theme=base16-tango] .hljs-tag{color:#729fcf}[theme=base16-tango] .hljs-operator,[theme=base16-tango] .hljs-punctuation,[theme=base16-tango] .hljs-subst{color:#d3d7cf}[theme=base16-tango] .hljs-operator{opacity:.7}[theme=base16-tango] .hljs-bullet,[theme=base16-tango] .hljs-deletion,[theme=base16-tango] .hljs-name,[theme=base16-tango] .hljs-selector-tag,[theme=base16-tango] .hljs-template-variable,[theme=base16-tango] .hljs-variable{color:#c00}[theme=base16-tango] .hljs-attr,[theme=base16-tango] .hljs-link,[theme=base16-tango] .hljs-literal,[theme=base16-tango] .hljs-number,[theme=base16-tango] .hljs-symbol,[theme=base16-tango] .hljs-variable.constant_{color:#ef2929}[theme=base16-tango] .hljs-class .hljs-title,[theme=base16-tango] .hljs-title,[theme=base16-tango] .hljs-title.class_{color:#c4a000}[theme=base16-tango] .hljs-strong{font-weight:700;color:#c4a000}[theme=base16-tango] .hljs-addition,[theme=base16-tango] .hljs-code,[theme=base16-tango] .hljs-string,[theme=base16-tango] .hljs-title.class_.inherited__{color:#4e9a06}[theme=base16-tango] .hljs-built_in,[theme=base16-tango] .hljs-doctag,[theme=base16-tango] .hljs-keyword.hljs-atrule,[theme=base16-tango] .hljs-quote,[theme=base16-tango] .hljs-regexp{color:#06989a}[theme=base16-tango] .hljs-attribute,[theme=base16-tango] .hljs-function .hljs-title,[theme=base16-tango] .hljs-section,[theme=base16-tango] .hljs-title.function_,[theme=base16-tango] .ruby .hljs-property{color:#3465a4}[theme=base16-tango] .diff .hljs-meta,[theme=base16-tango] .hljs-keyword,[theme=base16-tango] .hljs-template-tag,[theme=base16-tango] .hljs-type{color:#75507b}[theme=base16-tango] .hljs-emphasis{color:#75507b;font-style:italic}[theme=base16-tango] .hljs-meta,[theme=base16-tango] .hljs-meta .hljs-keyword,[theme=base16-tango] .hljs-meta .hljs-string{color:#34e2e2}[theme=base16-tango] .hljs-meta .hljs-keyword,[theme=base16-tango] .hljs-meta-keyword{font-weight:700}[theme=base16-tender]{ + /*! + Theme: tender + Author: Jacobo Tabernero (https://github/com/jacoborus/tender.vim) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-tender] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-tender] code.hljs{padding:3px 5px}[theme=base16-tender] .hljs{color:#eee;background:#282828}[theme=base16-tender] .hljs ::-moz-selection,[theme=base16-tender] .hljs::-moz-selection{background-color:#484848;color:#eee}[theme=base16-tender] .hljs ::selection,[theme=base16-tender] .hljs::selection{background-color:#484848;color:#eee}[theme=base16-tender] .hljs-comment{color:#4c4c4c}[theme=base16-tender] .hljs-tag{color:#b8b8b8}[theme=base16-tender] .hljs-operator,[theme=base16-tender] .hljs-punctuation,[theme=base16-tender] .hljs-subst{color:#eee}[theme=base16-tender] .hljs-operator{opacity:.7}[theme=base16-tender] .hljs-bullet,[theme=base16-tender] .hljs-deletion,[theme=base16-tender] .hljs-name,[theme=base16-tender] .hljs-selector-tag,[theme=base16-tender] .hljs-template-variable,[theme=base16-tender] .hljs-variable{color:#f43753}[theme=base16-tender] .hljs-attr,[theme=base16-tender] .hljs-link,[theme=base16-tender] .hljs-literal,[theme=base16-tender] .hljs-number,[theme=base16-tender] .hljs-symbol,[theme=base16-tender] .hljs-variable.constant_{color:#dc9656}[theme=base16-tender] .hljs-class .hljs-title,[theme=base16-tender] .hljs-title,[theme=base16-tender] .hljs-title.class_{color:#ffc24b}[theme=base16-tender] .hljs-strong{font-weight:700;color:#ffc24b}[theme=base16-tender] .hljs-addition,[theme=base16-tender] .hljs-code,[theme=base16-tender] .hljs-string,[theme=base16-tender] .hljs-title.class_.inherited__{color:#c9d05c}[theme=base16-tender] .hljs-built_in,[theme=base16-tender] .hljs-doctag,[theme=base16-tender] .hljs-keyword.hljs-atrule,[theme=base16-tender] .hljs-quote,[theme=base16-tender] .hljs-regexp{color:#73cef4}[theme=base16-tender] .hljs-attribute,[theme=base16-tender] .hljs-function .hljs-title,[theme=base16-tender] .hljs-section,[theme=base16-tender] .hljs-title.function_,[theme=base16-tender] .ruby .hljs-property{color:#b3deef}[theme=base16-tender] .diff .hljs-meta,[theme=base16-tender] .hljs-keyword,[theme=base16-tender] .hljs-template-tag,[theme=base16-tender] .hljs-type{color:#d3b987}[theme=base16-tender] .hljs-emphasis{color:#d3b987;font-style:italic}[theme=base16-tender] .hljs-meta,[theme=base16-tender] .hljs-meta .hljs-keyword,[theme=base16-tender] .hljs-meta .hljs-string{color:#a16946}[theme=base16-tender] .hljs-meta .hljs-keyword,[theme=base16-tender] .hljs-meta-keyword{font-weight:700}[theme=base16-tomorrow-night]{ + /*! + Theme: Tomorrow Night + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-tomorrow-night] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-tomorrow-night] code.hljs{padding:3px 5px}[theme=base16-tomorrow-night] .hljs{color:#ccc;background:#2d2d2d}[theme=base16-tomorrow-night] .hljs ::-moz-selection,[theme=base16-tomorrow-night] .hljs::-moz-selection{background-color:#515151;color:#ccc}[theme=base16-tomorrow-night] .hljs ::selection,[theme=base16-tomorrow-night] .hljs::selection{background-color:#515151;color:#ccc}[theme=base16-tomorrow-night] .hljs-comment{color:#999}[theme=base16-tomorrow-night] .hljs-tag{color:#b4b7b4}[theme=base16-tomorrow-night] .hljs-operator,[theme=base16-tomorrow-night] .hljs-punctuation,[theme=base16-tomorrow-night] .hljs-subst{color:#ccc}[theme=base16-tomorrow-night] .hljs-operator{opacity:.7}[theme=base16-tomorrow-night] .hljs-bullet,[theme=base16-tomorrow-night] .hljs-deletion,[theme=base16-tomorrow-night] .hljs-name,[theme=base16-tomorrow-night] .hljs-selector-tag,[theme=base16-tomorrow-night] .hljs-template-variable,[theme=base16-tomorrow-night] .hljs-variable{color:#f2777a}[theme=base16-tomorrow-night] .hljs-attr,[theme=base16-tomorrow-night] .hljs-link,[theme=base16-tomorrow-night] .hljs-literal,[theme=base16-tomorrow-night] .hljs-number,[theme=base16-tomorrow-night] .hljs-symbol,[theme=base16-tomorrow-night] .hljs-variable.constant_{color:#f99157}[theme=base16-tomorrow-night] .hljs-class .hljs-title,[theme=base16-tomorrow-night] .hljs-title,[theme=base16-tomorrow-night] .hljs-title.class_{color:#fc6}[theme=base16-tomorrow-night] .hljs-strong{font-weight:700;color:#fc6}[theme=base16-tomorrow-night] .hljs-addition,[theme=base16-tomorrow-night] .hljs-code,[theme=base16-tomorrow-night] .hljs-string,[theme=base16-tomorrow-night] .hljs-title.class_.inherited__{color:#9c9}[theme=base16-tomorrow-night] .hljs-built_in,[theme=base16-tomorrow-night] .hljs-doctag,[theme=base16-tomorrow-night] .hljs-keyword.hljs-atrule,[theme=base16-tomorrow-night] .hljs-quote,[theme=base16-tomorrow-night] .hljs-regexp{color:#6cc}[theme=base16-tomorrow-night] .hljs-attribute,[theme=base16-tomorrow-night] .hljs-function .hljs-title,[theme=base16-tomorrow-night] .hljs-section,[theme=base16-tomorrow-night] .hljs-title.function_,[theme=base16-tomorrow-night] .ruby .hljs-property{color:#69c}[theme=base16-tomorrow-night] .diff .hljs-meta,[theme=base16-tomorrow-night] .hljs-keyword,[theme=base16-tomorrow-night] .hljs-template-tag,[theme=base16-tomorrow-night] .hljs-type{color:#c9c}[theme=base16-tomorrow-night] .hljs-emphasis{color:#c9c;font-style:italic}[theme=base16-tomorrow-night] .hljs-meta,[theme=base16-tomorrow-night] .hljs-meta .hljs-keyword,[theme=base16-tomorrow-night] .hljs-meta .hljs-string{color:#a3685a}[theme=base16-tomorrow-night] .hljs-meta .hljs-keyword,[theme=base16-tomorrow-night] .hljs-meta-keyword{font-weight:700}[theme=base16-tomorrow]{ + /*! + Theme: Tomorrow + Author: Chris Kempson (http://chriskempson.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-tomorrow] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-tomorrow] code.hljs{padding:3px 5px}[theme=base16-tomorrow] .hljs{color:#4d4d4c;background:#fff}[theme=base16-tomorrow] .hljs ::-moz-selection,[theme=base16-tomorrow] .hljs::-moz-selection{background-color:#d6d6d6;color:#4d4d4c}[theme=base16-tomorrow] .hljs ::selection,[theme=base16-tomorrow] .hljs::selection{background-color:#d6d6d6;color:#4d4d4c}[theme=base16-tomorrow] .hljs-comment{color:#8e908c}[theme=base16-tomorrow] .hljs-tag{color:#969896}[theme=base16-tomorrow] .hljs-operator,[theme=base16-tomorrow] .hljs-punctuation,[theme=base16-tomorrow] .hljs-subst{color:#4d4d4c}[theme=base16-tomorrow] .hljs-operator{opacity:.7}[theme=base16-tomorrow] .hljs-bullet,[theme=base16-tomorrow] .hljs-deletion,[theme=base16-tomorrow] .hljs-name,[theme=base16-tomorrow] .hljs-selector-tag,[theme=base16-tomorrow] .hljs-template-variable,[theme=base16-tomorrow] .hljs-variable{color:#c82829}[theme=base16-tomorrow] .hljs-attr,[theme=base16-tomorrow] .hljs-link,[theme=base16-tomorrow] .hljs-literal,[theme=base16-tomorrow] .hljs-number,[theme=base16-tomorrow] .hljs-symbol,[theme=base16-tomorrow] .hljs-variable.constant_{color:#f5871f}[theme=base16-tomorrow] .hljs-class .hljs-title,[theme=base16-tomorrow] .hljs-title,[theme=base16-tomorrow] .hljs-title.class_{color:#eab700}[theme=base16-tomorrow] .hljs-strong{font-weight:700;color:#eab700}[theme=base16-tomorrow] .hljs-addition,[theme=base16-tomorrow] .hljs-code,[theme=base16-tomorrow] .hljs-string,[theme=base16-tomorrow] .hljs-title.class_.inherited__{color:#718c00}[theme=base16-tomorrow] .hljs-built_in,[theme=base16-tomorrow] .hljs-doctag,[theme=base16-tomorrow] .hljs-keyword.hljs-atrule,[theme=base16-tomorrow] .hljs-quote,[theme=base16-tomorrow] .hljs-regexp{color:#3e999f}[theme=base16-tomorrow] .hljs-attribute,[theme=base16-tomorrow] .hljs-function .hljs-title,[theme=base16-tomorrow] .hljs-section,[theme=base16-tomorrow] .hljs-title.function_,[theme=base16-tomorrow] .ruby .hljs-property{color:#4271ae}[theme=base16-tomorrow] .diff .hljs-meta,[theme=base16-tomorrow] .hljs-keyword,[theme=base16-tomorrow] .hljs-template-tag,[theme=base16-tomorrow] .hljs-type{color:#8959a8}[theme=base16-tomorrow] .hljs-emphasis{color:#8959a8;font-style:italic}[theme=base16-tomorrow] .hljs-meta,[theme=base16-tomorrow] .hljs-meta .hljs-keyword,[theme=base16-tomorrow] .hljs-meta .hljs-string{color:#a3685a}[theme=base16-tomorrow] .hljs-meta .hljs-keyword,[theme=base16-tomorrow] .hljs-meta-keyword{font-weight:700}[theme=base16-twilight]{ + /*! + Theme: Twilight + Author: David Hart (https://github.com/hartbit) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-twilight] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-twilight] code.hljs{padding:3px 5px}[theme=base16-twilight] .hljs{color:#a7a7a7;background:#1e1e1e}[theme=base16-twilight] .hljs ::-moz-selection,[theme=base16-twilight] .hljs::-moz-selection{background-color:#464b50;color:#a7a7a7}[theme=base16-twilight] .hljs ::selection,[theme=base16-twilight] .hljs::selection{background-color:#464b50;color:#a7a7a7}[theme=base16-twilight] .hljs-comment{color:#5f5a60}[theme=base16-twilight] .hljs-tag{color:#838184}[theme=base16-twilight] .hljs-operator,[theme=base16-twilight] .hljs-punctuation,[theme=base16-twilight] .hljs-subst{color:#a7a7a7}[theme=base16-twilight] .hljs-operator{opacity:.7}[theme=base16-twilight] .hljs-bullet,[theme=base16-twilight] .hljs-deletion,[theme=base16-twilight] .hljs-name,[theme=base16-twilight] .hljs-selector-tag,[theme=base16-twilight] .hljs-template-variable,[theme=base16-twilight] .hljs-variable{color:#cf6a4c}[theme=base16-twilight] .hljs-attr,[theme=base16-twilight] .hljs-link,[theme=base16-twilight] .hljs-literal,[theme=base16-twilight] .hljs-number,[theme=base16-twilight] .hljs-symbol,[theme=base16-twilight] .hljs-variable.constant_{color:#cda869}[theme=base16-twilight] .hljs-class .hljs-title,[theme=base16-twilight] .hljs-title,[theme=base16-twilight] .hljs-title.class_{color:#f9ee98}[theme=base16-twilight] .hljs-strong{font-weight:700;color:#f9ee98}[theme=base16-twilight] .hljs-addition,[theme=base16-twilight] .hljs-code,[theme=base16-twilight] .hljs-string,[theme=base16-twilight] .hljs-title.class_.inherited__{color:#8f9d6a}[theme=base16-twilight] .hljs-built_in,[theme=base16-twilight] .hljs-doctag,[theme=base16-twilight] .hljs-keyword.hljs-atrule,[theme=base16-twilight] .hljs-quote,[theme=base16-twilight] .hljs-regexp{color:#afc4db}[theme=base16-twilight] .hljs-attribute,[theme=base16-twilight] .hljs-function .hljs-title,[theme=base16-twilight] .hljs-section,[theme=base16-twilight] .hljs-title.function_,[theme=base16-twilight] .ruby .hljs-property{color:#7587a6}[theme=base16-twilight] .diff .hljs-meta,[theme=base16-twilight] .hljs-keyword,[theme=base16-twilight] .hljs-template-tag,[theme=base16-twilight] .hljs-type{color:#9b859d}[theme=base16-twilight] .hljs-emphasis{color:#9b859d;font-style:italic}[theme=base16-twilight] .hljs-meta,[theme=base16-twilight] .hljs-meta .hljs-keyword,[theme=base16-twilight] .hljs-meta .hljs-string{color:#9b703f}[theme=base16-twilight] .hljs-meta .hljs-keyword,[theme=base16-twilight] .hljs-meta-keyword{font-weight:700}[theme=base16-unikitty-dark]{ + /*! + Theme: Unikitty Dark + Author: Josh W Lewis (@joshwlewis) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-unikitty-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-unikitty-dark] code.hljs{padding:3px 5px}[theme=base16-unikitty-dark] .hljs{color:#bcbabe;background:#2e2a31}[theme=base16-unikitty-dark] .hljs ::-moz-selection,[theme=base16-unikitty-dark] .hljs::-moz-selection{background-color:#666369;color:#bcbabe}[theme=base16-unikitty-dark] .hljs ::selection,[theme=base16-unikitty-dark] .hljs::selection{background-color:#666369;color:#bcbabe}[theme=base16-unikitty-dark] .hljs-comment{color:#838085}[theme=base16-unikitty-dark] .hljs-tag{color:#9f9da2}[theme=base16-unikitty-dark] .hljs-operator,[theme=base16-unikitty-dark] .hljs-punctuation,[theme=base16-unikitty-dark] .hljs-subst{color:#bcbabe}[theme=base16-unikitty-dark] .hljs-operator{opacity:.7}[theme=base16-unikitty-dark] .hljs-bullet,[theme=base16-unikitty-dark] .hljs-deletion,[theme=base16-unikitty-dark] .hljs-name,[theme=base16-unikitty-dark] .hljs-selector-tag,[theme=base16-unikitty-dark] .hljs-template-variable,[theme=base16-unikitty-dark] .hljs-variable{color:#d8137f}[theme=base16-unikitty-dark] .hljs-attr,[theme=base16-unikitty-dark] .hljs-link,[theme=base16-unikitty-dark] .hljs-literal,[theme=base16-unikitty-dark] .hljs-number,[theme=base16-unikitty-dark] .hljs-symbol,[theme=base16-unikitty-dark] .hljs-variable.constant_{color:#d65407}[theme=base16-unikitty-dark] .hljs-class .hljs-title,[theme=base16-unikitty-dark] .hljs-title,[theme=base16-unikitty-dark] .hljs-title.class_{color:#dc8a0e}[theme=base16-unikitty-dark] .hljs-strong{font-weight:700;color:#dc8a0e}[theme=base16-unikitty-dark] .hljs-addition,[theme=base16-unikitty-dark] .hljs-code,[theme=base16-unikitty-dark] .hljs-string,[theme=base16-unikitty-dark] .hljs-title.class_.inherited__{color:#17ad98}[theme=base16-unikitty-dark] .hljs-built_in,[theme=base16-unikitty-dark] .hljs-doctag,[theme=base16-unikitty-dark] .hljs-keyword.hljs-atrule,[theme=base16-unikitty-dark] .hljs-quote,[theme=base16-unikitty-dark] .hljs-regexp{color:#149bda}[theme=base16-unikitty-dark] .hljs-attribute,[theme=base16-unikitty-dark] .hljs-function .hljs-title,[theme=base16-unikitty-dark] .hljs-section,[theme=base16-unikitty-dark] .hljs-title.function_,[theme=base16-unikitty-dark] .ruby .hljs-property{color:#796af5}[theme=base16-unikitty-dark] .diff .hljs-meta,[theme=base16-unikitty-dark] .hljs-keyword,[theme=base16-unikitty-dark] .hljs-template-tag,[theme=base16-unikitty-dark] .hljs-type{color:#bb60ea}[theme=base16-unikitty-dark] .hljs-emphasis{color:#bb60ea;font-style:italic}[theme=base16-unikitty-dark] .hljs-meta,[theme=base16-unikitty-dark] .hljs-meta .hljs-keyword,[theme=base16-unikitty-dark] .hljs-meta .hljs-string{color:#c720ca}[theme=base16-unikitty-dark] .hljs-meta .hljs-keyword,[theme=base16-unikitty-dark] .hljs-meta-keyword{font-weight:700}[theme=base16-unikitty-light]{ + /*! + Theme: Unikitty Light + Author: Josh W Lewis (@joshwlewis) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-unikitty-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-unikitty-light] code.hljs{padding:3px 5px}[theme=base16-unikitty-light] .hljs{color:#6c696e;background:#fff}[theme=base16-unikitty-light] .hljs ::-moz-selection,[theme=base16-unikitty-light] .hljs::-moz-selection{background-color:#c4c3c5;color:#6c696e}[theme=base16-unikitty-light] .hljs ::selection,[theme=base16-unikitty-light] .hljs::selection{background-color:#c4c3c5;color:#6c696e}[theme=base16-unikitty-light] .hljs-comment{color:#a7a5a8}[theme=base16-unikitty-light] .hljs-tag{color:#89878b}[theme=base16-unikitty-light] .hljs-operator,[theme=base16-unikitty-light] .hljs-punctuation,[theme=base16-unikitty-light] .hljs-subst{color:#6c696e}[theme=base16-unikitty-light] .hljs-operator{opacity:.7}[theme=base16-unikitty-light] .hljs-bullet,[theme=base16-unikitty-light] .hljs-deletion,[theme=base16-unikitty-light] .hljs-name,[theme=base16-unikitty-light] .hljs-selector-tag,[theme=base16-unikitty-light] .hljs-template-variable,[theme=base16-unikitty-light] .hljs-variable{color:#d8137f}[theme=base16-unikitty-light] .hljs-attr,[theme=base16-unikitty-light] .hljs-link,[theme=base16-unikitty-light] .hljs-literal,[theme=base16-unikitty-light] .hljs-number,[theme=base16-unikitty-light] .hljs-symbol,[theme=base16-unikitty-light] .hljs-variable.constant_{color:#d65407}[theme=base16-unikitty-light] .hljs-class .hljs-title,[theme=base16-unikitty-light] .hljs-title,[theme=base16-unikitty-light] .hljs-title.class_{color:#dc8a0e}[theme=base16-unikitty-light] .hljs-strong{font-weight:700;color:#dc8a0e}[theme=base16-unikitty-light] .hljs-addition,[theme=base16-unikitty-light] .hljs-code,[theme=base16-unikitty-light] .hljs-string,[theme=base16-unikitty-light] .hljs-title.class_.inherited__{color:#17ad98}[theme=base16-unikitty-light] .hljs-built_in,[theme=base16-unikitty-light] .hljs-doctag,[theme=base16-unikitty-light] .hljs-keyword.hljs-atrule,[theme=base16-unikitty-light] .hljs-quote,[theme=base16-unikitty-light] .hljs-regexp{color:#149bda}[theme=base16-unikitty-light] .hljs-attribute,[theme=base16-unikitty-light] .hljs-function .hljs-title,[theme=base16-unikitty-light] .hljs-section,[theme=base16-unikitty-light] .hljs-title.function_,[theme=base16-unikitty-light] .ruby .hljs-property{color:#775dff}[theme=base16-unikitty-light] .diff .hljs-meta,[theme=base16-unikitty-light] .hljs-keyword,[theme=base16-unikitty-light] .hljs-template-tag,[theme=base16-unikitty-light] .hljs-type{color:#aa17e6}[theme=base16-unikitty-light] .hljs-emphasis{color:#aa17e6;font-style:italic}[theme=base16-unikitty-light] .hljs-meta,[theme=base16-unikitty-light] .hljs-meta .hljs-keyword,[theme=base16-unikitty-light] .hljs-meta .hljs-string{color:#e013d0}[theme=base16-unikitty-light] .hljs-meta .hljs-keyword,[theme=base16-unikitty-light] .hljs-meta-keyword{font-weight:700}[theme=base16-vulcan]{ + /*! + Theme: vulcan + Author: Andrey Varfolomeev + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-vulcan] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-vulcan] code.hljs{padding:3px 5px}[theme=base16-vulcan] .hljs{color:#5b778c;background:#041523}[theme=base16-vulcan] .hljs ::-moz-selection,[theme=base16-vulcan] .hljs::-moz-selection{background-color:#003552;color:#5b778c}[theme=base16-vulcan] .hljs ::selection,[theme=base16-vulcan] .hljs::selection{background-color:#003552;color:#5b778c}[theme=base16-vulcan] .hljs-comment{color:#7a5759}[theme=base16-vulcan] .hljs-tag{color:#6b6977}[theme=base16-vulcan] .hljs-operator,[theme=base16-vulcan] .hljs-punctuation,[theme=base16-vulcan] .hljs-subst{color:#5b778c}[theme=base16-vulcan] .hljs-operator{opacity:.7}[theme=base16-vulcan] .hljs-bullet,[theme=base16-vulcan] .hljs-deletion,[theme=base16-vulcan] .hljs-name,[theme=base16-vulcan] .hljs-selector-tag,[theme=base16-vulcan] .hljs-template-variable,[theme=base16-vulcan] .hljs-variable{color:#818591}[theme=base16-vulcan] .hljs-attr,[theme=base16-vulcan] .hljs-link,[theme=base16-vulcan] .hljs-literal,[theme=base16-vulcan] .hljs-number,[theme=base16-vulcan] .hljs-symbol,[theme=base16-vulcan] .hljs-variable.constant_{color:#9198a3}[theme=base16-vulcan] .hljs-class .hljs-title,[theme=base16-vulcan] .hljs-title,[theme=base16-vulcan] .hljs-title.class_{color:#adb4b9}[theme=base16-vulcan] .hljs-strong{font-weight:700;color:#adb4b9}[theme=base16-vulcan] .hljs-addition,[theme=base16-vulcan] .hljs-attribute,[theme=base16-vulcan] .hljs-built_in,[theme=base16-vulcan] .hljs-code,[theme=base16-vulcan] .hljs-doctag,[theme=base16-vulcan] .hljs-function .hljs-title,[theme=base16-vulcan] .hljs-keyword.hljs-atrule,[theme=base16-vulcan] .hljs-quote,[theme=base16-vulcan] .hljs-regexp,[theme=base16-vulcan] .hljs-section,[theme=base16-vulcan] .hljs-string,[theme=base16-vulcan] .hljs-title.class_.inherited__,[theme=base16-vulcan] .hljs-title.function_,[theme=base16-vulcan] .ruby .hljs-property{color:#977d7c}[theme=base16-vulcan] .diff .hljs-meta,[theme=base16-vulcan] .hljs-keyword,[theme=base16-vulcan] .hljs-template-tag,[theme=base16-vulcan] .hljs-type{color:#9198a3}[theme=base16-vulcan] .hljs-emphasis{color:#9198a3;font-style:italic}[theme=base16-vulcan] .hljs-meta,[theme=base16-vulcan] .hljs-meta .hljs-keyword,[theme=base16-vulcan] .hljs-meta .hljs-string{color:#977d7c}[theme=base16-vulcan] .hljs-meta .hljs-keyword,[theme=base16-vulcan] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-10-light]{ + /*! + Theme: Windows 10 Light + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-10-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-10-light] code.hljs{padding:3px 5px}[theme=base16-windows-10-light] .hljs{color:#767676;background:#f2f2f2}[theme=base16-windows-10-light] .hljs ::-moz-selection,[theme=base16-windows-10-light] .hljs::-moz-selection{background-color:#d9d9d9;color:#767676}[theme=base16-windows-10-light] .hljs ::selection,[theme=base16-windows-10-light] .hljs::selection{background-color:#d9d9d9;color:#767676}[theme=base16-windows-10-light] .hljs-comment{color:#ccc}[theme=base16-windows-10-light] .hljs-tag{color:#ababab}[theme=base16-windows-10-light] .hljs-operator,[theme=base16-windows-10-light] .hljs-punctuation,[theme=base16-windows-10-light] .hljs-subst{color:#767676}[theme=base16-windows-10-light] .hljs-operator{opacity:.7}[theme=base16-windows-10-light] .hljs-bullet,[theme=base16-windows-10-light] .hljs-deletion,[theme=base16-windows-10-light] .hljs-name,[theme=base16-windows-10-light] .hljs-selector-tag,[theme=base16-windows-10-light] .hljs-template-variable,[theme=base16-windows-10-light] .hljs-variable{color:#c50f1f}[theme=base16-windows-10-light] .hljs-attr,[theme=base16-windows-10-light] .hljs-link,[theme=base16-windows-10-light] .hljs-literal,[theme=base16-windows-10-light] .hljs-number,[theme=base16-windows-10-light] .hljs-symbol,[theme=base16-windows-10-light] .hljs-variable.constant_{color:#f9f1a5}[theme=base16-windows-10-light] .hljs-class .hljs-title,[theme=base16-windows-10-light] .hljs-title,[theme=base16-windows-10-light] .hljs-title.class_{color:#c19c00}[theme=base16-windows-10-light] .hljs-strong{font-weight:700;color:#c19c00}[theme=base16-windows-10-light] .hljs-addition,[theme=base16-windows-10-light] .hljs-code,[theme=base16-windows-10-light] .hljs-string,[theme=base16-windows-10-light] .hljs-title.class_.inherited__{color:#13a10e}[theme=base16-windows-10-light] .hljs-built_in,[theme=base16-windows-10-light] .hljs-doctag,[theme=base16-windows-10-light] .hljs-keyword.hljs-atrule,[theme=base16-windows-10-light] .hljs-quote,[theme=base16-windows-10-light] .hljs-regexp{color:#3a96dd}[theme=base16-windows-10-light] .hljs-attribute,[theme=base16-windows-10-light] .hljs-function .hljs-title,[theme=base16-windows-10-light] .hljs-section,[theme=base16-windows-10-light] .hljs-title.function_,[theme=base16-windows-10-light] .ruby .hljs-property{color:#0037da}[theme=base16-windows-10-light] .diff .hljs-meta,[theme=base16-windows-10-light] .hljs-keyword,[theme=base16-windows-10-light] .hljs-template-tag,[theme=base16-windows-10-light] .hljs-type{color:#881798}[theme=base16-windows-10-light] .hljs-emphasis{color:#881798;font-style:italic}[theme=base16-windows-10-light] .hljs-meta,[theme=base16-windows-10-light] .hljs-meta .hljs-keyword,[theme=base16-windows-10-light] .hljs-meta .hljs-string{color:#16c60c}[theme=base16-windows-10-light] .hljs-meta .hljs-keyword,[theme=base16-windows-10-light] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-10]{ + /*! + Theme: Windows 10 + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-10] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-10] code.hljs{padding:3px 5px}[theme=base16-windows-10] .hljs{color:#ccc;background:#0c0c0c}[theme=base16-windows-10] .hljs ::-moz-selection,[theme=base16-windows-10] .hljs::-moz-selection{background-color:#535353;color:#ccc}[theme=base16-windows-10] .hljs ::selection,[theme=base16-windows-10] .hljs::selection{background-color:#535353;color:#ccc}[theme=base16-windows-10] .hljs-comment{color:#767676}[theme=base16-windows-10] .hljs-tag{color:#b9b9b9}[theme=base16-windows-10] .hljs-operator,[theme=base16-windows-10] .hljs-punctuation,[theme=base16-windows-10] .hljs-subst{color:#ccc}[theme=base16-windows-10] .hljs-operator{opacity:.7}[theme=base16-windows-10] .hljs-bullet,[theme=base16-windows-10] .hljs-deletion,[theme=base16-windows-10] .hljs-name,[theme=base16-windows-10] .hljs-selector-tag,[theme=base16-windows-10] .hljs-template-variable,[theme=base16-windows-10] .hljs-variable{color:#e74856}[theme=base16-windows-10] .hljs-attr,[theme=base16-windows-10] .hljs-link,[theme=base16-windows-10] .hljs-literal,[theme=base16-windows-10] .hljs-number,[theme=base16-windows-10] .hljs-symbol,[theme=base16-windows-10] .hljs-variable.constant_{color:#c19c00}[theme=base16-windows-10] .hljs-class .hljs-title,[theme=base16-windows-10] .hljs-title,[theme=base16-windows-10] .hljs-title.class_{color:#f9f1a5}[theme=base16-windows-10] .hljs-strong{font-weight:700;color:#f9f1a5}[theme=base16-windows-10] .hljs-addition,[theme=base16-windows-10] .hljs-code,[theme=base16-windows-10] .hljs-string,[theme=base16-windows-10] .hljs-title.class_.inherited__{color:#16c60c}[theme=base16-windows-10] .hljs-built_in,[theme=base16-windows-10] .hljs-doctag,[theme=base16-windows-10] .hljs-keyword.hljs-atrule,[theme=base16-windows-10] .hljs-quote,[theme=base16-windows-10] .hljs-regexp{color:#61d6d6}[theme=base16-windows-10] .hljs-attribute,[theme=base16-windows-10] .hljs-function .hljs-title,[theme=base16-windows-10] .hljs-section,[theme=base16-windows-10] .hljs-title.function_,[theme=base16-windows-10] .ruby .hljs-property{color:#3b78ff}[theme=base16-windows-10] .diff .hljs-meta,[theme=base16-windows-10] .hljs-keyword,[theme=base16-windows-10] .hljs-template-tag,[theme=base16-windows-10] .hljs-type{color:#b4009e}[theme=base16-windows-10] .hljs-emphasis{color:#b4009e;font-style:italic}[theme=base16-windows-10] .hljs-meta,[theme=base16-windows-10] .hljs-meta .hljs-keyword,[theme=base16-windows-10] .hljs-meta .hljs-string{color:#13a10e}[theme=base16-windows-10] .hljs-meta .hljs-keyword,[theme=base16-windows-10] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-95-light]{ + /*! + Theme: Windows 95 Light + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-95-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-95-light] code.hljs{padding:3px 5px}[theme=base16-windows-95-light] .hljs{color:#545454;background:#fcfcfc}[theme=base16-windows-95-light] .hljs ::-moz-selection,[theme=base16-windows-95-light] .hljs::-moz-selection{background-color:#c4c4c4;color:#545454}[theme=base16-windows-95-light] .hljs ::selection,[theme=base16-windows-95-light] .hljs::selection{background-color:#c4c4c4;color:#545454}[theme=base16-windows-95-light] .hljs-comment{color:#a8a8a8}[theme=base16-windows-95-light] .hljs-tag{color:#7e7e7e}[theme=base16-windows-95-light] .hljs-operator,[theme=base16-windows-95-light] .hljs-punctuation,[theme=base16-windows-95-light] .hljs-subst{color:#545454}[theme=base16-windows-95-light] .hljs-operator{opacity:.7}[theme=base16-windows-95-light] .hljs-bullet,[theme=base16-windows-95-light] .hljs-deletion,[theme=base16-windows-95-light] .hljs-name,[theme=base16-windows-95-light] .hljs-selector-tag,[theme=base16-windows-95-light] .hljs-template-variable,[theme=base16-windows-95-light] .hljs-variable{color:#a80000}[theme=base16-windows-95-light] .hljs-attr,[theme=base16-windows-95-light] .hljs-link,[theme=base16-windows-95-light] .hljs-literal,[theme=base16-windows-95-light] .hljs-number,[theme=base16-windows-95-light] .hljs-symbol,[theme=base16-windows-95-light] .hljs-variable.constant_{color:#fcfc54}[theme=base16-windows-95-light] .hljs-class .hljs-title,[theme=base16-windows-95-light] .hljs-title,[theme=base16-windows-95-light] .hljs-title.class_{color:#a85400}[theme=base16-windows-95-light] .hljs-strong{font-weight:700;color:#a85400}[theme=base16-windows-95-light] .hljs-addition,[theme=base16-windows-95-light] .hljs-code,[theme=base16-windows-95-light] .hljs-string,[theme=base16-windows-95-light] .hljs-title.class_.inherited__{color:#00a800}[theme=base16-windows-95-light] .hljs-built_in,[theme=base16-windows-95-light] .hljs-doctag,[theme=base16-windows-95-light] .hljs-keyword.hljs-atrule,[theme=base16-windows-95-light] .hljs-quote,[theme=base16-windows-95-light] .hljs-regexp{color:#00a8a8}[theme=base16-windows-95-light] .hljs-attribute,[theme=base16-windows-95-light] .hljs-function .hljs-title,[theme=base16-windows-95-light] .hljs-section,[theme=base16-windows-95-light] .hljs-title.function_,[theme=base16-windows-95-light] .ruby .hljs-property{color:#0000a8}[theme=base16-windows-95-light] .diff .hljs-meta,[theme=base16-windows-95-light] .hljs-keyword,[theme=base16-windows-95-light] .hljs-template-tag,[theme=base16-windows-95-light] .hljs-type{color:#a800a8}[theme=base16-windows-95-light] .hljs-emphasis{color:#a800a8;font-style:italic}[theme=base16-windows-95-light] .hljs-meta,[theme=base16-windows-95-light] .hljs-meta .hljs-keyword,[theme=base16-windows-95-light] .hljs-meta .hljs-string{color:#54fc54}[theme=base16-windows-95-light] .hljs-meta .hljs-keyword,[theme=base16-windows-95-light] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-95]{ + /*! + Theme: Windows 95 + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-95] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-95] code.hljs{padding:3px 5px}[theme=base16-windows-95] .hljs{color:#a8a8a8;background:#000}[theme=base16-windows-95] .hljs ::-moz-selection,[theme=base16-windows-95] .hljs::-moz-selection{background-color:#383838;color:#a8a8a8}[theme=base16-windows-95] .hljs ::selection,[theme=base16-windows-95] .hljs::selection{background-color:#383838;color:#a8a8a8}[theme=base16-windows-95] .hljs-comment{color:#545454}[theme=base16-windows-95] .hljs-tag{color:#7e7e7e}[theme=base16-windows-95] .hljs-operator,[theme=base16-windows-95] .hljs-punctuation,[theme=base16-windows-95] .hljs-subst{color:#a8a8a8}[theme=base16-windows-95] .hljs-operator{opacity:.7}[theme=base16-windows-95] .hljs-bullet,[theme=base16-windows-95] .hljs-deletion,[theme=base16-windows-95] .hljs-name,[theme=base16-windows-95] .hljs-selector-tag,[theme=base16-windows-95] .hljs-template-variable,[theme=base16-windows-95] .hljs-variable{color:#fc5454}[theme=base16-windows-95] .hljs-attr,[theme=base16-windows-95] .hljs-link,[theme=base16-windows-95] .hljs-literal,[theme=base16-windows-95] .hljs-number,[theme=base16-windows-95] .hljs-symbol,[theme=base16-windows-95] .hljs-variable.constant_{color:#a85400}[theme=base16-windows-95] .hljs-class .hljs-title,[theme=base16-windows-95] .hljs-title,[theme=base16-windows-95] .hljs-title.class_{color:#fcfc54}[theme=base16-windows-95] .hljs-strong{font-weight:700;color:#fcfc54}[theme=base16-windows-95] .hljs-addition,[theme=base16-windows-95] .hljs-code,[theme=base16-windows-95] .hljs-string,[theme=base16-windows-95] .hljs-title.class_.inherited__{color:#54fc54}[theme=base16-windows-95] .hljs-built_in,[theme=base16-windows-95] .hljs-doctag,[theme=base16-windows-95] .hljs-keyword.hljs-atrule,[theme=base16-windows-95] .hljs-quote,[theme=base16-windows-95] .hljs-regexp{color:#54fcfc}[theme=base16-windows-95] .hljs-attribute,[theme=base16-windows-95] .hljs-function .hljs-title,[theme=base16-windows-95] .hljs-section,[theme=base16-windows-95] .hljs-title.function_,[theme=base16-windows-95] .ruby .hljs-property{color:#5454fc}[theme=base16-windows-95] .diff .hljs-meta,[theme=base16-windows-95] .hljs-keyword,[theme=base16-windows-95] .hljs-template-tag,[theme=base16-windows-95] .hljs-type{color:#fc54fc}[theme=base16-windows-95] .hljs-emphasis{color:#fc54fc;font-style:italic}[theme=base16-windows-95] .hljs-meta,[theme=base16-windows-95] .hljs-meta .hljs-keyword,[theme=base16-windows-95] .hljs-meta .hljs-string{color:#00a800}[theme=base16-windows-95] .hljs-meta .hljs-keyword,[theme=base16-windows-95] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-high-contrast-light]{ + /*! + Theme: Windows High Contrast Light + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-high-contrast-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-high-contrast-light] code.hljs{padding:3px 5px}[theme=base16-windows-high-contrast-light] .hljs{color:#545454;background:#fcfcfc}[theme=base16-windows-high-contrast-light] .hljs ::-moz-selection,[theme=base16-windows-high-contrast-light] .hljs::-moz-selection{background-color:#d4d4d4;color:#545454}[theme=base16-windows-high-contrast-light] .hljs ::selection,[theme=base16-windows-high-contrast-light] .hljs::selection{background-color:#d4d4d4;color:#545454}[theme=base16-windows-high-contrast-light] .hljs-comment{color:silver}[theme=base16-windows-high-contrast-light] .hljs-tag{color:#7e7e7e}[theme=base16-windows-high-contrast-light] .hljs-operator,[theme=base16-windows-high-contrast-light] .hljs-punctuation,[theme=base16-windows-high-contrast-light] .hljs-subst{color:#545454}[theme=base16-windows-high-contrast-light] .hljs-operator{opacity:.7}[theme=base16-windows-high-contrast-light] .hljs-bullet,[theme=base16-windows-high-contrast-light] .hljs-deletion,[theme=base16-windows-high-contrast-light] .hljs-name,[theme=base16-windows-high-contrast-light] .hljs-selector-tag,[theme=base16-windows-high-contrast-light] .hljs-template-variable,[theme=base16-windows-high-contrast-light] .hljs-variable{color:maroon}[theme=base16-windows-high-contrast-light] .hljs-attr,[theme=base16-windows-high-contrast-light] .hljs-link,[theme=base16-windows-high-contrast-light] .hljs-literal,[theme=base16-windows-high-contrast-light] .hljs-number,[theme=base16-windows-high-contrast-light] .hljs-symbol,[theme=base16-windows-high-contrast-light] .hljs-variable.constant_{color:#fcfc54}[theme=base16-windows-high-contrast-light] .hljs-class .hljs-title,[theme=base16-windows-high-contrast-light] .hljs-title,[theme=base16-windows-high-contrast-light] .hljs-title.class_{color:olive}[theme=base16-windows-high-contrast-light] .hljs-strong{font-weight:700;color:olive}[theme=base16-windows-high-contrast-light] .hljs-addition,[theme=base16-windows-high-contrast-light] .hljs-code,[theme=base16-windows-high-contrast-light] .hljs-string,[theme=base16-windows-high-contrast-light] .hljs-title.class_.inherited__{color:green}[theme=base16-windows-high-contrast-light] .hljs-built_in,[theme=base16-windows-high-contrast-light] .hljs-doctag,[theme=base16-windows-high-contrast-light] .hljs-keyword.hljs-atrule,[theme=base16-windows-high-contrast-light] .hljs-quote,[theme=base16-windows-high-contrast-light] .hljs-regexp{color:teal}[theme=base16-windows-high-contrast-light] .hljs-attribute,[theme=base16-windows-high-contrast-light] .hljs-function .hljs-title,[theme=base16-windows-high-contrast-light] .hljs-section,[theme=base16-windows-high-contrast-light] .hljs-title.function_,[theme=base16-windows-high-contrast-light] .ruby .hljs-property{color:navy}[theme=base16-windows-high-contrast-light] .diff .hljs-meta,[theme=base16-windows-high-contrast-light] .hljs-keyword,[theme=base16-windows-high-contrast-light] .hljs-template-tag,[theme=base16-windows-high-contrast-light] .hljs-type{color:purple}[theme=base16-windows-high-contrast-light] .hljs-emphasis{color:purple;font-style:italic}[theme=base16-windows-high-contrast-light] .hljs-meta,[theme=base16-windows-high-contrast-light] .hljs-meta .hljs-keyword,[theme=base16-windows-high-contrast-light] .hljs-meta .hljs-string{color:#54fc54}[theme=base16-windows-high-contrast-light] .hljs-meta .hljs-keyword,[theme=base16-windows-high-contrast-light] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-high-contrast]{ + /*! + Theme: Windows High Contrast + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-high-contrast] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-high-contrast] code.hljs{padding:3px 5px}[theme=base16-windows-high-contrast] .hljs{color:silver;background:#000}[theme=base16-windows-high-contrast] .hljs ::-moz-selection,[theme=base16-windows-high-contrast] .hljs::-moz-selection{background-color:#383838;color:silver}[theme=base16-windows-high-contrast] .hljs ::selection,[theme=base16-windows-high-contrast] .hljs::selection{background-color:#383838;color:silver}[theme=base16-windows-high-contrast] .hljs-comment{color:#545454}[theme=base16-windows-high-contrast] .hljs-tag{color:#a2a2a2}[theme=base16-windows-high-contrast] .hljs-operator,[theme=base16-windows-high-contrast] .hljs-punctuation,[theme=base16-windows-high-contrast] .hljs-subst{color:silver}[theme=base16-windows-high-contrast] .hljs-operator{opacity:.7}[theme=base16-windows-high-contrast] .hljs-bullet,[theme=base16-windows-high-contrast] .hljs-deletion,[theme=base16-windows-high-contrast] .hljs-name,[theme=base16-windows-high-contrast] .hljs-selector-tag,[theme=base16-windows-high-contrast] .hljs-template-variable,[theme=base16-windows-high-contrast] .hljs-variable{color:#fc5454}[theme=base16-windows-high-contrast] .hljs-attr,[theme=base16-windows-high-contrast] .hljs-link,[theme=base16-windows-high-contrast] .hljs-literal,[theme=base16-windows-high-contrast] .hljs-number,[theme=base16-windows-high-contrast] .hljs-symbol,[theme=base16-windows-high-contrast] .hljs-variable.constant_{color:olive}[theme=base16-windows-high-contrast] .hljs-class .hljs-title,[theme=base16-windows-high-contrast] .hljs-title,[theme=base16-windows-high-contrast] .hljs-title.class_{color:#fcfc54}[theme=base16-windows-high-contrast] .hljs-strong{font-weight:700;color:#fcfc54}[theme=base16-windows-high-contrast] .hljs-addition,[theme=base16-windows-high-contrast] .hljs-code,[theme=base16-windows-high-contrast] .hljs-string,[theme=base16-windows-high-contrast] .hljs-title.class_.inherited__{color:#54fc54}[theme=base16-windows-high-contrast] .hljs-built_in,[theme=base16-windows-high-contrast] .hljs-doctag,[theme=base16-windows-high-contrast] .hljs-keyword.hljs-atrule,[theme=base16-windows-high-contrast] .hljs-quote,[theme=base16-windows-high-contrast] .hljs-regexp{color:#54fcfc}[theme=base16-windows-high-contrast] .hljs-attribute,[theme=base16-windows-high-contrast] .hljs-function .hljs-title,[theme=base16-windows-high-contrast] .hljs-section,[theme=base16-windows-high-contrast] .hljs-title.function_,[theme=base16-windows-high-contrast] .ruby .hljs-property{color:#5454fc}[theme=base16-windows-high-contrast] .diff .hljs-meta,[theme=base16-windows-high-contrast] .hljs-keyword,[theme=base16-windows-high-contrast] .hljs-template-tag,[theme=base16-windows-high-contrast] .hljs-type{color:#fc54fc}[theme=base16-windows-high-contrast] .hljs-emphasis{color:#fc54fc;font-style:italic}[theme=base16-windows-high-contrast] .hljs-meta,[theme=base16-windows-high-contrast] .hljs-meta .hljs-keyword,[theme=base16-windows-high-contrast] .hljs-meta .hljs-string{color:green}[theme=base16-windows-high-contrast] .hljs-meta .hljs-keyword,[theme=base16-windows-high-contrast] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-nt-light]{ + /*! + Theme: Windows NT Light + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-nt-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-nt-light] code.hljs{padding:3px 5px}[theme=base16-windows-nt-light] .hljs{color:grey;background:#fff}[theme=base16-windows-nt-light] .hljs ::-moz-selection,[theme=base16-windows-nt-light] .hljs::-moz-selection{background-color:#d5d5d5;color:grey}[theme=base16-windows-nt-light] .hljs ::selection,[theme=base16-windows-nt-light] .hljs::selection{background-color:#d5d5d5;color:grey}[theme=base16-windows-nt-light] .hljs-comment{color:silver}[theme=base16-windows-nt-light] .hljs-tag{color:#a0a0a0}[theme=base16-windows-nt-light] .hljs-operator,[theme=base16-windows-nt-light] .hljs-punctuation,[theme=base16-windows-nt-light] .hljs-subst{color:grey}[theme=base16-windows-nt-light] .hljs-operator{opacity:.7}[theme=base16-windows-nt-light] .hljs-bullet,[theme=base16-windows-nt-light] .hljs-deletion,[theme=base16-windows-nt-light] .hljs-name,[theme=base16-windows-nt-light] .hljs-selector-tag,[theme=base16-windows-nt-light] .hljs-template-variable,[theme=base16-windows-nt-light] .hljs-variable{color:maroon}[theme=base16-windows-nt-light] .hljs-attr,[theme=base16-windows-nt-light] .hljs-link,[theme=base16-windows-nt-light] .hljs-literal,[theme=base16-windows-nt-light] .hljs-number,[theme=base16-windows-nt-light] .hljs-symbol,[theme=base16-windows-nt-light] .hljs-variable.constant_{color:#ff0}[theme=base16-windows-nt-light] .hljs-class .hljs-title,[theme=base16-windows-nt-light] .hljs-title,[theme=base16-windows-nt-light] .hljs-title.class_{color:olive}[theme=base16-windows-nt-light] .hljs-strong{font-weight:700;color:olive}[theme=base16-windows-nt-light] .hljs-addition,[theme=base16-windows-nt-light] .hljs-code,[theme=base16-windows-nt-light] .hljs-string,[theme=base16-windows-nt-light] .hljs-title.class_.inherited__{color:green}[theme=base16-windows-nt-light] .hljs-built_in,[theme=base16-windows-nt-light] .hljs-doctag,[theme=base16-windows-nt-light] .hljs-keyword.hljs-atrule,[theme=base16-windows-nt-light] .hljs-quote,[theme=base16-windows-nt-light] .hljs-regexp{color:teal}[theme=base16-windows-nt-light] .hljs-attribute,[theme=base16-windows-nt-light] .hljs-function .hljs-title,[theme=base16-windows-nt-light] .hljs-section,[theme=base16-windows-nt-light] .hljs-title.function_,[theme=base16-windows-nt-light] .ruby .hljs-property{color:navy}[theme=base16-windows-nt-light] .diff .hljs-meta,[theme=base16-windows-nt-light] .hljs-keyword,[theme=base16-windows-nt-light] .hljs-template-tag,[theme=base16-windows-nt-light] .hljs-type{color:purple}[theme=base16-windows-nt-light] .hljs-emphasis{color:purple;font-style:italic}[theme=base16-windows-nt-light] .hljs-meta,[theme=base16-windows-nt-light] .hljs-meta .hljs-keyword,[theme=base16-windows-nt-light] .hljs-meta .hljs-string{color:#0f0}[theme=base16-windows-nt-light] .hljs-meta .hljs-keyword,[theme=base16-windows-nt-light] .hljs-meta-keyword{font-weight:700}[theme=base16-windows-nt]{ + /*! + Theme: Windows NT + Author: Fergus Collins (https://github.com/C-Fergus) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-windows-nt] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-windows-nt] code.hljs{padding:3px 5px}[theme=base16-windows-nt] .hljs{color:silver;background:#000}[theme=base16-windows-nt] .hljs ::-moz-selection,[theme=base16-windows-nt] .hljs::-moz-selection{background-color:#555;color:silver}[theme=base16-windows-nt] .hljs ::selection,[theme=base16-windows-nt] .hljs::selection{background-color:#555;color:silver}[theme=base16-windows-nt] .hljs-comment{color:grey}[theme=base16-windows-nt] .hljs-tag{color:#a1a1a1}[theme=base16-windows-nt] .hljs-operator,[theme=base16-windows-nt] .hljs-punctuation,[theme=base16-windows-nt] .hljs-subst{color:silver}[theme=base16-windows-nt] .hljs-operator{opacity:.7}[theme=base16-windows-nt] .hljs-bullet,[theme=base16-windows-nt] .hljs-deletion,[theme=base16-windows-nt] .hljs-name,[theme=base16-windows-nt] .hljs-selector-tag,[theme=base16-windows-nt] .hljs-template-variable,[theme=base16-windows-nt] .hljs-variable{color:red}[theme=base16-windows-nt] .hljs-attr,[theme=base16-windows-nt] .hljs-link,[theme=base16-windows-nt] .hljs-literal,[theme=base16-windows-nt] .hljs-number,[theme=base16-windows-nt] .hljs-symbol,[theme=base16-windows-nt] .hljs-variable.constant_{color:olive}[theme=base16-windows-nt] .hljs-class .hljs-title,[theme=base16-windows-nt] .hljs-title,[theme=base16-windows-nt] .hljs-title.class_{color:#ff0}[theme=base16-windows-nt] .hljs-strong{font-weight:700;color:#ff0}[theme=base16-windows-nt] .hljs-addition,[theme=base16-windows-nt] .hljs-code,[theme=base16-windows-nt] .hljs-string,[theme=base16-windows-nt] .hljs-title.class_.inherited__{color:#0f0}[theme=base16-windows-nt] .hljs-built_in,[theme=base16-windows-nt] .hljs-doctag,[theme=base16-windows-nt] .hljs-keyword.hljs-atrule,[theme=base16-windows-nt] .hljs-quote,[theme=base16-windows-nt] .hljs-regexp{color:#0ff}[theme=base16-windows-nt] .hljs-attribute,[theme=base16-windows-nt] .hljs-function .hljs-title,[theme=base16-windows-nt] .hljs-section,[theme=base16-windows-nt] .hljs-title.function_,[theme=base16-windows-nt] .ruby .hljs-property{color:#00f}[theme=base16-windows-nt] .diff .hljs-meta,[theme=base16-windows-nt] .hljs-keyword,[theme=base16-windows-nt] .hljs-template-tag,[theme=base16-windows-nt] .hljs-type{color:#f0f}[theme=base16-windows-nt] .hljs-emphasis{color:#f0f;font-style:italic}[theme=base16-windows-nt] .hljs-meta,[theme=base16-windows-nt] .hljs-meta .hljs-keyword,[theme=base16-windows-nt] .hljs-meta .hljs-string{color:green}[theme=base16-windows-nt] .hljs-meta .hljs-keyword,[theme=base16-windows-nt] .hljs-meta-keyword{font-weight:700}[theme=base16-woodland]{ + /*! + Theme: Woodland + Author: Jay Cornwall (https://jcornwall.com) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-woodland] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-woodland] code.hljs{padding:3px 5px}[theme=base16-woodland] .hljs{color:#cabcb1;background:#231e18}[theme=base16-woodland] .hljs ::-moz-selection,[theme=base16-woodland] .hljs::-moz-selection{background-color:#48413a;color:#cabcb1}[theme=base16-woodland] .hljs ::selection,[theme=base16-woodland] .hljs::selection{background-color:#48413a;color:#cabcb1}[theme=base16-woodland] .hljs-comment{color:#9d8b70}[theme=base16-woodland] .hljs-tag{color:#b4a490}[theme=base16-woodland] .hljs-operator,[theme=base16-woodland] .hljs-punctuation,[theme=base16-woodland] .hljs-subst{color:#cabcb1}[theme=base16-woodland] .hljs-operator{opacity:.7}[theme=base16-woodland] .hljs-bullet,[theme=base16-woodland] .hljs-deletion,[theme=base16-woodland] .hljs-name,[theme=base16-woodland] .hljs-selector-tag,[theme=base16-woodland] .hljs-template-variable,[theme=base16-woodland] .hljs-variable{color:#d35c5c}[theme=base16-woodland] .hljs-attr,[theme=base16-woodland] .hljs-link,[theme=base16-woodland] .hljs-literal,[theme=base16-woodland] .hljs-number,[theme=base16-woodland] .hljs-symbol,[theme=base16-woodland] .hljs-variable.constant_{color:#ca7f32}[theme=base16-woodland] .hljs-class .hljs-title,[theme=base16-woodland] .hljs-title,[theme=base16-woodland] .hljs-title.class_{color:#e0ac16}[theme=base16-woodland] .hljs-strong{font-weight:700;color:#e0ac16}[theme=base16-woodland] .hljs-addition,[theme=base16-woodland] .hljs-code,[theme=base16-woodland] .hljs-string,[theme=base16-woodland] .hljs-title.class_.inherited__{color:#b7ba53}[theme=base16-woodland] .hljs-built_in,[theme=base16-woodland] .hljs-doctag,[theme=base16-woodland] .hljs-keyword.hljs-atrule,[theme=base16-woodland] .hljs-quote,[theme=base16-woodland] .hljs-regexp{color:#6eb958}[theme=base16-woodland] .hljs-attribute,[theme=base16-woodland] .hljs-function .hljs-title,[theme=base16-woodland] .hljs-section,[theme=base16-woodland] .hljs-title.function_,[theme=base16-woodland] .ruby .hljs-property{color:#88a4d3}[theme=base16-woodland] .diff .hljs-meta,[theme=base16-woodland] .hljs-keyword,[theme=base16-woodland] .hljs-template-tag,[theme=base16-woodland] .hljs-type{color:#bb90e2}[theme=base16-woodland] .hljs-emphasis{color:#bb90e2;font-style:italic}[theme=base16-woodland] .hljs-meta,[theme=base16-woodland] .hljs-meta .hljs-keyword,[theme=base16-woodland] .hljs-meta .hljs-string{color:#b49368}[theme=base16-woodland] .hljs-meta .hljs-keyword,[theme=base16-woodland] .hljs-meta-keyword{font-weight:700}[theme=base16-xcode-dusk]{ + /*! + Theme: XCode Dusk + Author: Elsa Gonsiorowski (https://github.com/gonsie) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-xcode-dusk] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-xcode-dusk] code.hljs{padding:3px 5px}[theme=base16-xcode-dusk] .hljs{color:#939599;background:#282b35}[theme=base16-xcode-dusk] .hljs ::-moz-selection,[theme=base16-xcode-dusk] .hljs::-moz-selection{background-color:#53555d;color:#939599}[theme=base16-xcode-dusk] .hljs ::selection,[theme=base16-xcode-dusk] .hljs::selection{background-color:#53555d;color:#939599}[theme=base16-xcode-dusk] .hljs-comment{color:#686a71}[theme=base16-xcode-dusk] .hljs-tag{color:#7e8086}[theme=base16-xcode-dusk] .hljs-operator,[theme=base16-xcode-dusk] .hljs-punctuation,[theme=base16-xcode-dusk] .hljs-subst{color:#939599}[theme=base16-xcode-dusk] .hljs-operator{opacity:.7}[theme=base16-xcode-dusk] .hljs-bullet,[theme=base16-xcode-dusk] .hljs-deletion,[theme=base16-xcode-dusk] .hljs-name,[theme=base16-xcode-dusk] .hljs-selector-tag,[theme=base16-xcode-dusk] .hljs-template-variable,[theme=base16-xcode-dusk] .hljs-variable{color:#b21889}[theme=base16-xcode-dusk] .hljs-attr,[theme=base16-xcode-dusk] .hljs-link,[theme=base16-xcode-dusk] .hljs-literal,[theme=base16-xcode-dusk] .hljs-number,[theme=base16-xcode-dusk] .hljs-symbol,[theme=base16-xcode-dusk] .hljs-variable.constant_{color:#786dc5}[theme=base16-xcode-dusk] .hljs-class .hljs-title,[theme=base16-xcode-dusk] .hljs-title,[theme=base16-xcode-dusk] .hljs-title.class_{color:#438288}[theme=base16-xcode-dusk] .hljs-strong{font-weight:700;color:#438288}[theme=base16-xcode-dusk] .hljs-addition,[theme=base16-xcode-dusk] .hljs-code,[theme=base16-xcode-dusk] .hljs-string,[theme=base16-xcode-dusk] .hljs-title.class_.inherited__{color:#df0002}[theme=base16-xcode-dusk] .hljs-built_in,[theme=base16-xcode-dusk] .hljs-doctag,[theme=base16-xcode-dusk] .hljs-keyword.hljs-atrule,[theme=base16-xcode-dusk] .hljs-quote,[theme=base16-xcode-dusk] .hljs-regexp{color:#00a0be}[theme=base16-xcode-dusk] .hljs-attribute,[theme=base16-xcode-dusk] .hljs-function .hljs-title,[theme=base16-xcode-dusk] .hljs-section,[theme=base16-xcode-dusk] .hljs-title.function_,[theme=base16-xcode-dusk] .ruby .hljs-property{color:#790ead}[theme=base16-xcode-dusk] .diff .hljs-meta,[theme=base16-xcode-dusk] .hljs-keyword,[theme=base16-xcode-dusk] .hljs-template-tag,[theme=base16-xcode-dusk] .hljs-type{color:#b21889}[theme=base16-xcode-dusk] .hljs-emphasis{color:#b21889;font-style:italic}[theme=base16-xcode-dusk] .hljs-meta,[theme=base16-xcode-dusk] .hljs-meta .hljs-keyword,[theme=base16-xcode-dusk] .hljs-meta .hljs-string{color:#c77c48}[theme=base16-xcode-dusk] .hljs-meta .hljs-keyword,[theme=base16-xcode-dusk] .hljs-meta-keyword{font-weight:700}[theme=base16-zenburn]{ + /*! + Theme: Zenburn + Author: elnawe + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 + */}[theme=base16-zenburn] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=base16-zenburn] code.hljs{padding:3px 5px}[theme=base16-zenburn] .hljs{color:#dcdccc;background:#383838}[theme=base16-zenburn] .hljs ::-moz-selection,[theme=base16-zenburn] .hljs::-moz-selection{background-color:#606060;color:#dcdccc}[theme=base16-zenburn] .hljs ::selection,[theme=base16-zenburn] .hljs::selection{background-color:#606060;color:#dcdccc}[theme=base16-zenburn] .hljs-comment{color:#6f6f6f}[theme=base16-zenburn] .hljs-tag{color:grey}[theme=base16-zenburn] .hljs-operator,[theme=base16-zenburn] .hljs-punctuation,[theme=base16-zenburn] .hljs-subst{color:#dcdccc}[theme=base16-zenburn] .hljs-operator{opacity:.7}[theme=base16-zenburn] .hljs-bullet,[theme=base16-zenburn] .hljs-deletion,[theme=base16-zenburn] .hljs-name,[theme=base16-zenburn] .hljs-selector-tag,[theme=base16-zenburn] .hljs-template-variable,[theme=base16-zenburn] .hljs-variable{color:#dca3a3}[theme=base16-zenburn] .hljs-attr,[theme=base16-zenburn] .hljs-link,[theme=base16-zenburn] .hljs-literal,[theme=base16-zenburn] .hljs-number,[theme=base16-zenburn] .hljs-symbol,[theme=base16-zenburn] .hljs-variable.constant_{color:#dfaf8f}[theme=base16-zenburn] .hljs-class .hljs-title,[theme=base16-zenburn] .hljs-title,[theme=base16-zenburn] .hljs-title.class_{color:#e0cf9f}[theme=base16-zenburn] .hljs-strong{font-weight:700;color:#e0cf9f}[theme=base16-zenburn] .hljs-addition,[theme=base16-zenburn] .hljs-code,[theme=base16-zenburn] .hljs-string,[theme=base16-zenburn] .hljs-title.class_.inherited__{color:#5f7f5f}[theme=base16-zenburn] .hljs-built_in,[theme=base16-zenburn] .hljs-doctag,[theme=base16-zenburn] .hljs-keyword.hljs-atrule,[theme=base16-zenburn] .hljs-quote,[theme=base16-zenburn] .hljs-regexp{color:#93e0e3}[theme=base16-zenburn] .hljs-attribute,[theme=base16-zenburn] .hljs-function .hljs-title,[theme=base16-zenburn] .hljs-section,[theme=base16-zenburn] .hljs-title.function_,[theme=base16-zenburn] .ruby .hljs-property{color:#7cb8bb}[theme=base16-zenburn] .diff .hljs-meta,[theme=base16-zenburn] .hljs-keyword,[theme=base16-zenburn] .hljs-template-tag,[theme=base16-zenburn] .hljs-type{color:#dc8cc3}[theme=base16-zenburn] .hljs-emphasis{color:#dc8cc3;font-style:italic}[theme=base16-zenburn] .hljs-meta,[theme=base16-zenburn] .hljs-meta .hljs-keyword,[theme=base16-zenburn] .hljs-meta .hljs-string{color:#000}[theme=base16-zenburn] .hljs-meta .hljs-keyword,[theme=base16-zenburn] .hljs-meta-keyword{font-weight:700}[theme=a11y-dark]{ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css + */}[theme=a11y-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=a11y-dark] code.hljs{padding:3px 5px}[theme=a11y-dark] .hljs{background:#2b2b2b;color:#f8f8f2}[theme=a11y-dark] .hljs-comment,[theme=a11y-dark] .hljs-quote{color:#d4d0ab}[theme=a11y-dark] .hljs-deletion,[theme=a11y-dark] .hljs-name,[theme=a11y-dark] .hljs-regexp,[theme=a11y-dark] .hljs-selector-class,[theme=a11y-dark] .hljs-selector-id,[theme=a11y-dark] .hljs-tag,[theme=a11y-dark] .hljs-template-variable,[theme=a11y-dark] .hljs-variable{color:#ffa07a}[theme=a11y-dark] .hljs-built_in,[theme=a11y-dark] .hljs-link,[theme=a11y-dark] .hljs-literal,[theme=a11y-dark] .hljs-meta,[theme=a11y-dark] .hljs-number,[theme=a11y-dark] .hljs-params,[theme=a11y-dark] .hljs-type{color:#f5ab35}[theme=a11y-dark] .hljs-attribute{color:gold}[theme=a11y-dark] .hljs-addition,[theme=a11y-dark] .hljs-bullet,[theme=a11y-dark] .hljs-string,[theme=a11y-dark] .hljs-symbol{color:#abe338}[theme=a11y-dark] .hljs-section,[theme=a11y-dark] .hljs-title{color:#00e0e0}[theme=a11y-dark] .hljs-keyword,[theme=a11y-dark] .hljs-selector-tag{color:#dcc6e0}[theme=a11y-dark] .hljs-emphasis{font-style:italic}[theme=a11y-dark] .hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){[theme=a11y-dark] .hljs-addition,[theme=a11y-dark] .hljs-attribute,[theme=a11y-dark] .hljs-built_in,[theme=a11y-dark] .hljs-bullet,[theme=a11y-dark] .hljs-comment,[theme=a11y-dark] .hljs-link,[theme=a11y-dark] .hljs-literal,[theme=a11y-dark] .hljs-meta,[theme=a11y-dark] .hljs-number,[theme=a11y-dark] .hljs-params,[theme=a11y-dark] .hljs-quote,[theme=a11y-dark] .hljs-string,[theme=a11y-dark] .hljs-symbol,[theme=a11y-dark] .hljs-type{color:highlight}[theme=a11y-dark] .hljs-keyword,[theme=a11y-dark] .hljs-selector-tag{font-weight:700}}[theme=a11y-light]{ + /*! + Theme: a11y-light + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css + */}[theme=a11y-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=a11y-light] code.hljs{padding:3px 5px}[theme=a11y-light] .hljs{background:#fefefe;color:#545454}[theme=a11y-light] .hljs-comment,[theme=a11y-light] .hljs-quote{color:#696969}[theme=a11y-light] .hljs-deletion,[theme=a11y-light] .hljs-name,[theme=a11y-light] .hljs-regexp,[theme=a11y-light] .hljs-selector-class,[theme=a11y-light] .hljs-selector-id,[theme=a11y-light] .hljs-tag,[theme=a11y-light] .hljs-template-variable,[theme=a11y-light] .hljs-variable{color:#d91e18}[theme=a11y-light] .hljs-attribute,[theme=a11y-light] .hljs-built_in,[theme=a11y-light] .hljs-link,[theme=a11y-light] .hljs-literal,[theme=a11y-light] .hljs-meta,[theme=a11y-light] .hljs-number,[theme=a11y-light] .hljs-params,[theme=a11y-light] .hljs-type{color:#aa5d00}[theme=a11y-light] .hljs-addition,[theme=a11y-light] .hljs-bullet,[theme=a11y-light] .hljs-string,[theme=a11y-light] .hljs-symbol{color:green}[theme=a11y-light] .hljs-section,[theme=a11y-light] .hljs-title{color:#007faa}[theme=a11y-light] .hljs-keyword,[theme=a11y-light] .hljs-selector-tag{color:#7928a1}[theme=a11y-light] .hljs-emphasis{font-style:italic}[theme=a11y-light] .hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){[theme=a11y-light] .hljs-addition,[theme=a11y-light] .hljs-attribute,[theme=a11y-light] .hljs-built_in,[theme=a11y-light] .hljs-bullet,[theme=a11y-light] .hljs-comment,[theme=a11y-light] .hljs-link,[theme=a11y-light] .hljs-literal,[theme=a11y-light] .hljs-meta,[theme=a11y-light] .hljs-number,[theme=a11y-light] .hljs-params,[theme=a11y-light] .hljs-quote,[theme=a11y-light] .hljs-string,[theme=a11y-light] .hljs-symbol,[theme=a11y-light] .hljs-type{color:highlight}[theme=a11y-light] .hljs-keyword,[theme=a11y-light] .hljs-selector-tag{font-weight:700}}[theme=agate]{ + /*! + Theme: Agate + Author: (c) Taufik Nurrohman + Maintainer: @taufik-nurrohman + Updated: 2021-04-24 + + #333 + #62c8f3 + #7bd694 + #888 + #a2fca2 + #ade5fc + #b8d8a2 + #c6b4f0 + #d36363 + #fc9b9b + #fcc28c + #ffa + #fff + */}[theme=agate] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=agate] code.hljs{padding:3px 5px}[theme=agate] .hljs{background:#333;color:#fff}[theme=agate] .hljs-doctag,[theme=agate] .hljs-meta-keyword,[theme=agate] .hljs-name,[theme=agate] .hljs-strong{font-weight:700}[theme=agate] .hljs-code,[theme=agate] .hljs-emphasis{font-style:italic}[theme=agate] .hljs-section,[theme=agate] .hljs-tag{color:#62c8f3}[theme=agate] .hljs-selector-class,[theme=agate] .hljs-selector-id,[theme=agate] .hljs-template-variable,[theme=agate] .hljs-variable{color:#ade5fc}[theme=agate] .hljs-meta-string,[theme=agate] .hljs-string{color:#a2fca2}[theme=agate] .hljs-attr,[theme=agate] .hljs-quote,[theme=agate] .hljs-selector-attr{color:#7bd694}[theme=agate] .hljs-tag .hljs-attr{color:inherit}[theme=agate] .hljs-attribute,[theme=agate] .hljs-title,[theme=agate] .hljs-type{color:#ffa}[theme=agate] .hljs-number,[theme=agate] .hljs-symbol{color:#d36363}[theme=agate] .hljs-bullet,[theme=agate] .hljs-template-tag{color:#b8d8a2}[theme=agate] .hljs-built_in,[theme=agate] .hljs-keyword,[theme=agate] .hljs-literal,[theme=agate] .hljs-selector-tag{color:#fcc28c}[theme=agate] .hljs-code,[theme=agate] .hljs-comment,[theme=agate] .hljs-formula{color:#888}[theme=agate] .hljs-link,[theme=agate] .hljs-regexp,[theme=agate] .hljs-selector-pseudo{color:#c6b4f0}[theme=agate] .hljs-meta{color:#fc9b9b}[theme=agate] .hljs-deletion{background:#fc9b9b;color:#333}[theme=agate] .hljs-addition{background:#a2fca2;color:#333}[theme=agate] .hljs-subst{color:#fff}[theme=agate] .hljs a{color:inherit}[theme=agate] .hljs a:focus,[theme=agate] .hljs a:hover{color:inherit;text-decoration:underline}[theme=agate] .hljs mark{background:#555;color:inherit}[theme=an-old-hope]{ + /*! + Theme: An Old Hope – Star Wars Syntax + Author: (c) Gustavo Costa + Maintainer: @gusbemacbe + + Original theme - Ocean Dark Theme – by https://github.com/gavsiu + Based on Jesse Leite's Atom syntax theme 'An Old Hope' + https://github.com/JesseLeite/an-old-hope-syntax-atom + */}[theme=an-old-hope] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=an-old-hope] code.hljs{padding:3px 5px}[theme=an-old-hope] .hljs{background:#1c1d21;color:#c0c5ce}[theme=an-old-hope] .hljs-comment,[theme=an-old-hope] .hljs-quote{color:#b6b18b}[theme=an-old-hope] .hljs-deletion,[theme=an-old-hope] .hljs-name,[theme=an-old-hope] .hljs-regexp,[theme=an-old-hope] .hljs-selector-class,[theme=an-old-hope] .hljs-selector-id,[theme=an-old-hope] .hljs-tag,[theme=an-old-hope] .hljs-template-variable,[theme=an-old-hope] .hljs-variable{color:#eb3c54}[theme=an-old-hope] .hljs-built_in,[theme=an-old-hope] .hljs-link,[theme=an-old-hope] .hljs-literal,[theme=an-old-hope] .hljs-meta,[theme=an-old-hope] .hljs-number,[theme=an-old-hope] .hljs-params,[theme=an-old-hope] .hljs-type{color:#e7ce56}[theme=an-old-hope] .hljs-attribute{color:#ee7c2b}[theme=an-old-hope] .hljs-addition,[theme=an-old-hope] .hljs-bullet,[theme=an-old-hope] .hljs-string,[theme=an-old-hope] .hljs-symbol{color:#4fb4d7}[theme=an-old-hope] .hljs-section,[theme=an-old-hope] .hljs-title{color:#78bb65}[theme=an-old-hope] .hljs-keyword,[theme=an-old-hope] .hljs-selector-tag{color:#b45ea4}[theme=an-old-hope] .hljs-emphasis{font-style:italic}[theme=an-old-hope] .hljs-strong{font-weight:700}[theme=androidstudio] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=androidstudio] code.hljs{padding:3px 5px}[theme=androidstudio] .hljs{color:#a9b7c6;background:#282b2e}[theme=androidstudio] .hljs-bullet,[theme=androidstudio] .hljs-literal,[theme=androidstudio] .hljs-number,[theme=androidstudio] .hljs-symbol{color:#6897bb}[theme=androidstudio] .hljs-deletion,[theme=androidstudio] .hljs-keyword,[theme=androidstudio] .hljs-selector-tag{color:#cc7832}[theme=androidstudio] .hljs-link,[theme=androidstudio] .hljs-template-variable,[theme=androidstudio] .hljs-variable{color:#629755}[theme=androidstudio] .hljs-comment,[theme=androidstudio] .hljs-quote{color:grey}[theme=androidstudio] .hljs-meta{color:#bbb529}[theme=androidstudio] .hljs-addition,[theme=androidstudio] .hljs-attribute,[theme=androidstudio] .hljs-string{color:#6a8759}[theme=androidstudio] .hljs-section,[theme=androidstudio] .hljs-title,[theme=androidstudio] .hljs-type{color:#ffc66d}[theme=androidstudio] .hljs-name,[theme=androidstudio] .hljs-selector-class,[theme=androidstudio] .hljs-selector-id{color:#e8bf6a}[theme=androidstudio] .hljs-emphasis{font-style:italic}[theme=androidstudio] .hljs-strong{font-weight:700}[theme=arduino-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=arduino-light] code.hljs{padding:3px 5px}[theme=arduino-light] .hljs{background:#fff;color:#434f54}[theme=arduino-light] .hljs-subst{color:#434f54}[theme=arduino-light] .hljs-attribute,[theme=arduino-light] .hljs-doctag,[theme=arduino-light] .hljs-keyword,[theme=arduino-light] .hljs-name,[theme=arduino-light] .hljs-selector-tag{color:#00979d}[theme=arduino-light] .hljs-addition,[theme=arduino-light] .hljs-built_in,[theme=arduino-light] .hljs-bullet,[theme=arduino-light] .hljs-code,[theme=arduino-light] .hljs-literal{color:#d35400}[theme=arduino-light] .hljs-link,[theme=arduino-light] .hljs-regexp,[theme=arduino-light] .hljs-selector-attr,[theme=arduino-light] .hljs-selector-pseudo,[theme=arduino-light] .hljs-symbol,[theme=arduino-light] .hljs-template-variable,[theme=arduino-light] .hljs-variable{color:#00979d}[theme=arduino-light] .hljs-deletion,[theme=arduino-light] .hljs-quote,[theme=arduino-light] .hljs-selector-class,[theme=arduino-light] .hljs-selector-id,[theme=arduino-light] .hljs-string,[theme=arduino-light] .hljs-template-tag,[theme=arduino-light] .hljs-type{color:#005c5f}[theme=arduino-light] .hljs-comment{color:hsla(184,9%,62%,.8)}[theme=arduino-light] .hljs-meta .hljs-keyword{color:#728e00}[theme=arduino-light] .hljs-meta{color:#434f54}[theme=arduino-light] .hljs-emphasis{font-style:italic}[theme=arduino-light] .hljs-strong{font-weight:700}[theme=arduino-light] .hljs-function{color:#728e00}[theme=arduino-light] .hljs-section,[theme=arduino-light] .hljs-title{color:#800;font-weight:700}[theme=arduino-light] .hljs-number{color:#8a7b52}[theme=arta] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=arta] code.hljs{padding:3px 5px}[theme=arta] .hljs{background:#222;color:#aaa}[theme=arta] .hljs-subst{color:#aaa}[theme=arta] .hljs-section{color:#fff}[theme=arta] .hljs-comment,[theme=arta] .hljs-meta,[theme=arta] .hljs-quote{color:#444}[theme=arta] .hljs-bullet,[theme=arta] .hljs-regexp,[theme=arta] .hljs-string,[theme=arta] .hljs-symbol{color:#fc3}[theme=arta] .hljs-addition,[theme=arta] .hljs-number{color:#0c6}[theme=arta] .hljs-attribute,[theme=arta] .hljs-built_in,[theme=arta] .hljs-link,[theme=arta] .hljs-literal,[theme=arta] .hljs-template-variable,[theme=arta] .hljs-type{color:#32aaee}[theme=arta] .hljs-keyword,[theme=arta] .hljs-name,[theme=arta] .hljs-selector-class,[theme=arta] .hljs-selector-id,[theme=arta] .hljs-selector-tag{color:#64a}[theme=arta] .hljs-deletion,[theme=arta] .hljs-template-tag,[theme=arta] .hljs-title,[theme=arta] .hljs-variable{color:#b16}[theme=arta] .hljs-doctag,[theme=arta] .hljs-section,[theme=arta] .hljs-strong{font-weight:700}[theme=arta] .hljs-emphasis{font-style:italic}[theme=ascetic] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=ascetic] code.hljs{padding:3px 5px}[theme=ascetic] .hljs{background:#fff;color:#000}[theme=ascetic] .hljs-addition,[theme=ascetic] .hljs-attribute,[theme=ascetic] .hljs-bullet,[theme=ascetic] .hljs-link,[theme=ascetic] .hljs-section,[theme=ascetic] .hljs-string,[theme=ascetic] .hljs-symbol,[theme=ascetic] .hljs-template-variable,[theme=ascetic] .hljs-variable{color:#888}[theme=ascetic] .hljs-comment,[theme=ascetic] .hljs-deletion,[theme=ascetic] .hljs-meta,[theme=ascetic] .hljs-quote{color:#ccc}[theme=ascetic] .hljs-keyword,[theme=ascetic] .hljs-name,[theme=ascetic] .hljs-section,[theme=ascetic] .hljs-selector-tag,[theme=ascetic] .hljs-strong,[theme=ascetic] .hljs-type{font-weight:700}[theme=ascetic] .hljs-emphasis{font-style:italic}[theme=atom-one-dark-reasonable] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=atom-one-dark-reasonable] code.hljs{padding:3px 5px}[theme=atom-one-dark-reasonable] .hljs{color:#abb2bf;background:#282c34}[theme=atom-one-dark-reasonable] .hljs-keyword,[theme=atom-one-dark-reasonable] .hljs-operator,[theme=atom-one-dark-reasonable] .hljs-pattern-match{color:#f92672}[theme=atom-one-dark-reasonable] .hljs-function,[theme=atom-one-dark-reasonable] .hljs-pattern-match .hljs-constructor{color:#61aeee}[theme=atom-one-dark-reasonable] .hljs-function .hljs-params{color:#a6e22e}[theme=atom-one-dark-reasonable] .hljs-function .hljs-params .hljs-typing{color:#fd971f}[theme=atom-one-dark-reasonable] .hljs-module-access .hljs-module{color:#7e57c2}[theme=atom-one-dark-reasonable] .hljs-constructor{color:#e2b93d}[theme=atom-one-dark-reasonable] .hljs-constructor .hljs-string{color:#9ccc65}[theme=atom-one-dark-reasonable] .hljs-comment,[theme=atom-one-dark-reasonable] .hljs-quote{color:#b18eb1;font-style:italic}[theme=atom-one-dark-reasonable] .hljs-doctag,[theme=atom-one-dark-reasonable] .hljs-formula{color:#c678dd}[theme=atom-one-dark-reasonable] .hljs-deletion,[theme=atom-one-dark-reasonable] .hljs-name,[theme=atom-one-dark-reasonable] .hljs-section,[theme=atom-one-dark-reasonable] .hljs-selector-tag,[theme=atom-one-dark-reasonable] .hljs-subst{color:#e06c75}[theme=atom-one-dark-reasonable] .hljs-literal{color:#56b6c2}[theme=atom-one-dark-reasonable] .hljs-addition,[theme=atom-one-dark-reasonable] .hljs-attribute,[theme=atom-one-dark-reasonable] .hljs-meta .hljs-string,[theme=atom-one-dark-reasonable] .hljs-regexp,[theme=atom-one-dark-reasonable] .hljs-string{color:#98c379}[theme=atom-one-dark-reasonable] .hljs-built_in,[theme=atom-one-dark-reasonable] .hljs-class .hljs-title,[theme=atom-one-dark-reasonable] .hljs-title.class_{color:#e6c07b}[theme=atom-one-dark-reasonable] .hljs-attr,[theme=atom-one-dark-reasonable] .hljs-number,[theme=atom-one-dark-reasonable] .hljs-selector-attr,[theme=atom-one-dark-reasonable] .hljs-selector-class,[theme=atom-one-dark-reasonable] .hljs-selector-pseudo,[theme=atom-one-dark-reasonable] .hljs-template-variable,[theme=atom-one-dark-reasonable] .hljs-type,[theme=atom-one-dark-reasonable] .hljs-variable{color:#d19a66}[theme=atom-one-dark-reasonable] .hljs-bullet,[theme=atom-one-dark-reasonable] .hljs-link,[theme=atom-one-dark-reasonable] .hljs-meta,[theme=atom-one-dark-reasonable] .hljs-selector-id,[theme=atom-one-dark-reasonable] .hljs-symbol,[theme=atom-one-dark-reasonable] .hljs-title{color:#61aeee}[theme=atom-one-dark-reasonable] .hljs-emphasis{font-style:italic}[theme=atom-one-dark-reasonable] .hljs-strong{font-weight:700}[theme=atom-one-dark-reasonable] .hljs-link{text-decoration:underline}[theme=atom-one-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=atom-one-dark] code.hljs{padding:3px 5px}[theme=atom-one-dark] .hljs{color:#abb2bf;background:#282c34}[theme=atom-one-dark] .hljs-comment,[theme=atom-one-dark] .hljs-quote{color:#5c6370;font-style:italic}[theme=atom-one-dark] .hljs-doctag,[theme=atom-one-dark] .hljs-formula,[theme=atom-one-dark] .hljs-keyword{color:#c678dd}[theme=atom-one-dark] .hljs-deletion,[theme=atom-one-dark] .hljs-name,[theme=atom-one-dark] .hljs-section,[theme=atom-one-dark] .hljs-selector-tag,[theme=atom-one-dark] .hljs-subst{color:#e06c75}[theme=atom-one-dark] .hljs-literal{color:#56b6c2}[theme=atom-one-dark] .hljs-addition,[theme=atom-one-dark] .hljs-attribute,[theme=atom-one-dark] .hljs-meta .hljs-string,[theme=atom-one-dark] .hljs-regexp,[theme=atom-one-dark] .hljs-string{color:#98c379}[theme=atom-one-dark] .hljs-attr,[theme=atom-one-dark] .hljs-number,[theme=atom-one-dark] .hljs-selector-attr,[theme=atom-one-dark] .hljs-selector-class,[theme=atom-one-dark] .hljs-selector-pseudo,[theme=atom-one-dark] .hljs-template-variable,[theme=atom-one-dark] .hljs-type,[theme=atom-one-dark] .hljs-variable{color:#d19a66}[theme=atom-one-dark] .hljs-bullet,[theme=atom-one-dark] .hljs-link,[theme=atom-one-dark] .hljs-meta,[theme=atom-one-dark] .hljs-selector-id,[theme=atom-one-dark] .hljs-symbol,[theme=atom-one-dark] .hljs-title{color:#61aeee}[theme=atom-one-dark] .hljs-built_in,[theme=atom-one-dark] .hljs-class .hljs-title,[theme=atom-one-dark] .hljs-title.class_{color:#e6c07b}[theme=atom-one-dark] .hljs-emphasis{font-style:italic}[theme=atom-one-dark] .hljs-strong{font-weight:700}[theme=atom-one-dark] .hljs-link{text-decoration:underline}[theme=atom-one-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=atom-one-light] code.hljs{padding:3px 5px}[theme=atom-one-light] .hljs{color:#383a42;background:#fafafa}[theme=atom-one-light] .hljs-comment,[theme=atom-one-light] .hljs-quote{color:#a0a1a7;font-style:italic}[theme=atom-one-light] .hljs-doctag,[theme=atom-one-light] .hljs-formula,[theme=atom-one-light] .hljs-keyword{color:#a626a4}[theme=atom-one-light] .hljs-deletion,[theme=atom-one-light] .hljs-name,[theme=atom-one-light] .hljs-section,[theme=atom-one-light] .hljs-selector-tag,[theme=atom-one-light] .hljs-subst{color:#e45649}[theme=atom-one-light] .hljs-literal{color:#0184bb}[theme=atom-one-light] .hljs-addition,[theme=atom-one-light] .hljs-attribute,[theme=atom-one-light] .hljs-meta .hljs-string,[theme=atom-one-light] .hljs-regexp,[theme=atom-one-light] .hljs-string{color:#50a14f}[theme=atom-one-light] .hljs-attr,[theme=atom-one-light] .hljs-number,[theme=atom-one-light] .hljs-selector-attr,[theme=atom-one-light] .hljs-selector-class,[theme=atom-one-light] .hljs-selector-pseudo,[theme=atom-one-light] .hljs-template-variable,[theme=atom-one-light] .hljs-type,[theme=atom-one-light] .hljs-variable{color:#986801}[theme=atom-one-light] .hljs-bullet,[theme=atom-one-light] .hljs-link,[theme=atom-one-light] .hljs-meta,[theme=atom-one-light] .hljs-selector-id,[theme=atom-one-light] .hljs-symbol,[theme=atom-one-light] .hljs-title{color:#4078f2}[theme=atom-one-light] .hljs-built_in,[theme=atom-one-light] .hljs-class .hljs-title,[theme=atom-one-light] .hljs-title.class_{color:#c18401}[theme=atom-one-light] .hljs-emphasis{font-style:italic}[theme=atom-one-light] .hljs-strong{font-weight:700}[theme=atom-one-light] .hljs-link{text-decoration:underline}[theme=brown-paper] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=brown-paper] code.hljs{padding:3px 5px}[theme=brown-paper] .hljs{color:#363c69;background:url(/static/img/brown-papersq.png) #b7a68e}[theme=brown-paper] .hljs-keyword,[theme=brown-paper] .hljs-literal,[theme=brown-paper] .hljs-selector-tag{color:#059}[theme=brown-paper] .hljs-addition,[theme=brown-paper] .hljs-attribute,[theme=brown-paper] .hljs-built_in,[theme=brown-paper] .hljs-bullet,[theme=brown-paper] .hljs-link,[theme=brown-paper] .hljs-name,[theme=brown-paper] .hljs-section,[theme=brown-paper] .hljs-string,[theme=brown-paper] .hljs-symbol,[theme=brown-paper] .hljs-template-tag,[theme=brown-paper] .hljs-template-variable,[theme=brown-paper] .hljs-title,[theme=brown-paper] .hljs-type,[theme=brown-paper] .hljs-variable{color:#2c009f}[theme=brown-paper] .hljs-comment,[theme=brown-paper] .hljs-deletion,[theme=brown-paper] .hljs-meta,[theme=brown-paper] .hljs-quote{color:#802022}[theme=brown-paper] .hljs-doctag,[theme=brown-paper] .hljs-keyword,[theme=brown-paper] .hljs-literal,[theme=brown-paper] .hljs-name,[theme=brown-paper] .hljs-section,[theme=brown-paper] .hljs-selector-tag,[theme=brown-paper] .hljs-strong,[theme=brown-paper] .hljs-title,[theme=brown-paper] .hljs-type{font-weight:700}[theme=brown-paper] .hljs-emphasis{font-style:italic}[theme=codepen-embed] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=codepen-embed] code.hljs{padding:3px 5px}[theme=codepen-embed] .hljs{background:#222;color:#fff}[theme=codepen-embed] .hljs-comment,[theme=codepen-embed] .hljs-quote{color:#777}[theme=codepen-embed] .hljs-built_in,[theme=codepen-embed] .hljs-bullet,[theme=codepen-embed] .hljs-deletion,[theme=codepen-embed] .hljs-link,[theme=codepen-embed] .hljs-literal,[theme=codepen-embed] .hljs-meta,[theme=codepen-embed] .hljs-number,[theme=codepen-embed] .hljs-params,[theme=codepen-embed] .hljs-regexp,[theme=codepen-embed] .hljs-symbol,[theme=codepen-embed] .hljs-tag,[theme=codepen-embed] .hljs-template-variable,[theme=codepen-embed] .hljs-variable{color:#ab875d}[theme=codepen-embed] .hljs-attribute,[theme=codepen-embed] .hljs-name,[theme=codepen-embed] .hljs-section,[theme=codepen-embed] .hljs-selector-class,[theme=codepen-embed] .hljs-selector-id,[theme=codepen-embed] .hljs-title,[theme=codepen-embed] .hljs-type{color:#9b869b}[theme=codepen-embed] .hljs-addition,[theme=codepen-embed] .hljs-keyword,[theme=codepen-embed] .hljs-selector-tag,[theme=codepen-embed] .hljs-string{color:#8f9c6c}[theme=codepen-embed] .hljs-emphasis{font-style:italic}[theme=codepen-embed] .hljs-strong{font-weight:700}[theme=color-brewer] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=color-brewer] code.hljs{padding:3px 5px}[theme=color-brewer] .hljs{color:#000;background:#fff}[theme=color-brewer] .hljs-addition,[theme=color-brewer] .hljs-meta,[theme=color-brewer] .hljs-string,[theme=color-brewer] .hljs-symbol,[theme=color-brewer] .hljs-template-tag,[theme=color-brewer] .hljs-template-variable{color:#756bb1}[theme=color-brewer] .hljs-comment,[theme=color-brewer] .hljs-quote{color:#636363}[theme=color-brewer] .hljs-bullet,[theme=color-brewer] .hljs-link,[theme=color-brewer] .hljs-literal,[theme=color-brewer] .hljs-number,[theme=color-brewer] .hljs-regexp{color:#31a354}[theme=color-brewer] .hljs-deletion,[theme=color-brewer] .hljs-variable{color:#88f}[theme=color-brewer] .hljs-built_in,[theme=color-brewer] .hljs-doctag,[theme=color-brewer] .hljs-keyword,[theme=color-brewer] .hljs-name,[theme=color-brewer] .hljs-section,[theme=color-brewer] .hljs-selector-class,[theme=color-brewer] .hljs-selector-id,[theme=color-brewer] .hljs-selector-tag,[theme=color-brewer] .hljs-strong,[theme=color-brewer] .hljs-tag,[theme=color-brewer] .hljs-title,[theme=color-brewer] .hljs-type{color:#3182bd}[theme=color-brewer] .hljs-emphasis{font-style:italic}[theme=color-brewer] .hljs-attribute{color:#e6550d}[theme=dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=dark] code.hljs{padding:3px 5px}[theme=dark] .hljs{color:#ddd;background:#303030}[theme=dark] .hljs-keyword,[theme=dark] .hljs-link,[theme=dark] .hljs-literal,[theme=dark] .hljs-section,[theme=dark] .hljs-selector-tag{color:#fff}[theme=dark] .hljs-addition,[theme=dark] .hljs-attribute,[theme=dark] .hljs-built_in,[theme=dark] .hljs-bullet,[theme=dark] .hljs-name,[theme=dark] .hljs-string,[theme=dark] .hljs-symbol,[theme=dark] .hljs-template-tag,[theme=dark] .hljs-template-variable,[theme=dark] .hljs-title,[theme=dark] .hljs-type,[theme=dark] .hljs-variable{color:#d88}[theme=dark] .hljs-comment,[theme=dark] .hljs-deletion,[theme=dark] .hljs-meta,[theme=dark] .hljs-quote{color:#979797}[theme=dark] .hljs-doctag,[theme=dark] .hljs-keyword,[theme=dark] .hljs-literal,[theme=dark] .hljs-name,[theme=dark] .hljs-section,[theme=dark] .hljs-selector-tag,[theme=dark] .hljs-strong,[theme=dark] .hljs-title,[theme=dark] .hljs-type{font-weight:700}[theme=dark] .hljs-emphasis{font-style:italic}[theme=default]{ + /*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 + */}[theme=default] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=default] code.hljs{padding:3px 5px}[theme=default] .hljs{background:#f3f3f3;color:#444}[theme=default] .hljs-comment{color:#697070}[theme=default] .hljs-punctuation,[theme=default] .hljs-tag{color:#444a}[theme=default] .hljs-tag .hljs-attr,[theme=default] .hljs-tag .hljs-name{color:#444}[theme=default] .hljs-attribute,[theme=default] .hljs-doctag,[theme=default] .hljs-keyword,[theme=default] .hljs-meta .hljs-keyword,[theme=default] .hljs-name,[theme=default] .hljs-selector-tag{font-weight:700}[theme=default] .hljs-deletion,[theme=default] .hljs-number,[theme=default] .hljs-quote,[theme=default] .hljs-selector-class,[theme=default] .hljs-selector-id,[theme=default] .hljs-string,[theme=default] .hljs-template-tag,[theme=default] .hljs-type{color:#800}[theme=default] .hljs-section,[theme=default] .hljs-title{color:#800;font-weight:700}[theme=default] .hljs-link,[theme=default] .hljs-operator,[theme=default] .hljs-regexp,[theme=default] .hljs-selector-attr,[theme=default] .hljs-selector-pseudo,[theme=default] .hljs-symbol,[theme=default] .hljs-template-variable,[theme=default] .hljs-variable{color:#ab5656}[theme=default] .hljs-literal{color:#695}[theme=default] .hljs-addition,[theme=default] .hljs-built_in,[theme=default] .hljs-bullet,[theme=default] .hljs-code{color:#397300}[theme=default] .hljs-meta{color:#1f7199}[theme=default] .hljs-meta .hljs-string{color:#38a}[theme=default] .hljs-emphasis{font-style:italic}[theme=default] .hljs-strong{font-weight:700}[theme=devibeans]{ + /*! + Theme: devibeans (dark) + Author: @terminaldweller + Maintainer: @terminaldweller + + Inspired by vim's jellybeans theme (https://github.com/nanotech/jellybeans.vim) + */}[theme=devibeans] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=devibeans] code.hljs{padding:3px 5px}[theme=devibeans] .hljs{background:#000;color:#a39e9b}[theme=devibeans] .hljs-attr,[theme=devibeans] .hljs-template-tag{color:#8787d7}[theme=devibeans] .hljs-comment,[theme=devibeans] .hljs-doctag,[theme=devibeans] .hljs-quote{color:#396}[theme=devibeans] .hljs-params{color:#a39e9b}[theme=devibeans] .hljs-regexp{color:#d700ff}[theme=devibeans] .hljs-literal,[theme=devibeans] .hljs-number,[theme=devibeans] .hljs-selector-id,[theme=devibeans] .hljs-tag{color:#ef5350}[theme=devibeans] .hljs-meta,[theme=devibeans] .hljs-meta .hljs-keyword{color:#0087ff}[theme=devibeans] .hljs-code,[theme=devibeans] .hljs-formula,[theme=devibeans] .hljs-keyword,[theme=devibeans] .hljs-link,[theme=devibeans] .hljs-selector-attr,[theme=devibeans] .hljs-selector-class,[theme=devibeans] .hljs-selector-pseudo,[theme=devibeans] .hljs-template-variable,[theme=devibeans] .hljs-variable{color:#64b5f6}[theme=devibeans] .hljs-built_in,[theme=devibeans] .hljs-deletion,[theme=devibeans] .hljs-title{color:#ff8700}[theme=devibeans] .hljs-attribute,[theme=devibeans] .hljs-function,[theme=devibeans] .hljs-name,[theme=devibeans] .hljs-property,[theme=devibeans] .hljs-section,[theme=devibeans] .hljs-type{color:#ffd75f}[theme=devibeans] .hljs-addition,[theme=devibeans] .hljs-bullet,[theme=devibeans] .hljs-meta .hljs-string,[theme=devibeans] .hljs-string,[theme=devibeans] .hljs-subst,[theme=devibeans] .hljs-symbol{color:#558b2f}[theme=devibeans] .hljs-selector-tag{color:#96f}[theme=devibeans] .hljs-emphasis{font-style:italic}[theme=devibeans] .hljs-strong{font-weight:700}[theme=docco] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=docco] code.hljs{padding:3px 5px}[theme=docco] .hljs{color:#000;background:#f8f8ff}[theme=docco] .hljs-comment,[theme=docco] .hljs-quote{color:#408080;font-style:italic}[theme=docco] .hljs-keyword,[theme=docco] .hljs-literal,[theme=docco] .hljs-selector-tag,[theme=docco] .hljs-subst{color:#954121}[theme=docco] .hljs-number{color:#40a070}[theme=docco] .hljs-doctag,[theme=docco] .hljs-string{color:#219161}[theme=docco] .hljs-section,[theme=docco] .hljs-selector-class,[theme=docco] .hljs-selector-id,[theme=docco] .hljs-type{color:#19469d}[theme=docco] .hljs-params{color:#00f}[theme=docco] .hljs-title{color:#458;font-weight:700}[theme=docco] .hljs-attribute,[theme=docco] .hljs-name,[theme=docco] .hljs-tag{color:navy;font-weight:400}[theme=docco] .hljs-template-variable,[theme=docco] .hljs-variable{color:teal}[theme=docco] .hljs-link,[theme=docco] .hljs-regexp{color:#b68}[theme=docco] .hljs-bullet,[theme=docco] .hljs-symbol{color:#990073}[theme=docco] .hljs-built_in{color:#0086b3}[theme=docco] .hljs-meta{color:#999;font-weight:700}[theme=docco] .hljs-deletion{background:#fdd}[theme=docco] .hljs-addition{background:#dfd}[theme=docco] .hljs-emphasis{font-style:italic}[theme=docco] .hljs-strong{font-weight:700}[theme=far] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=far] code.hljs{padding:3px 5px}[theme=far] .hljs{color:#0ff;background:navy}[theme=far] .hljs-addition,[theme=far] .hljs-attribute,[theme=far] .hljs-built_in,[theme=far] .hljs-bullet,[theme=far] .hljs-string,[theme=far] .hljs-symbol,[theme=far] .hljs-template-tag,[theme=far] .hljs-template-variable{color:#ff0}[theme=far] .hljs-keyword,[theme=far] .hljs-name,[theme=far] .hljs-section,[theme=far] .hljs-selector-class,[theme=far] .hljs-selector-id,[theme=far] .hljs-selector-tag,[theme=far] .hljs-type,[theme=far] .hljs-variable{color:#fff}[theme=far] .hljs-comment,[theme=far] .hljs-deletion,[theme=far] .hljs-doctag,[theme=far] .hljs-quote{color:#888}[theme=far] .hljs-link,[theme=far] .hljs-literal,[theme=far] .hljs-number,[theme=far] .hljs-regexp{color:#0f0}[theme=far] .hljs-meta{color:teal}[theme=far] .hljs-keyword,[theme=far] .hljs-name,[theme=far] .hljs-section,[theme=far] .hljs-selector-tag,[theme=far] .hljs-strong,[theme=far] .hljs-title{font-weight:700}[theme=far] .hljs-emphasis{font-style:italic}[theme=felipec]{ + /*! + * Theme: FelipeC + * Author: (c) 2021 Felipe Contreras + * Website: https://github.com/felipec/vim-felipec + * + * Autogenerated with vim-felipec's generator. + */}[theme=felipec] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=felipec] code.hljs{padding:3px 5px}[theme=felipec] .hljs{color:#dddde1;background:#1e1e22}[theme=felipec] .hljs ::-moz-selection,[theme=felipec] .hljs::-moz-selection{color:#1e1e22;background:#bf8fef}[theme=felipec] .hljs ::selection,[theme=felipec] .hljs::selection{color:#1e1e22;background:#bf8fef}[theme=felipec] .hljs-code,[theme=felipec] .hljs-comment,[theme=felipec] .hljs-quote{color:#888896}[theme=felipec] .hljs-deletion,[theme=felipec] .hljs-literal,[theme=felipec] .hljs-number{color:#ef8f8f}[theme=felipec] .hljs-doctag,[theme=felipec] .hljs-meta,[theme=felipec] .hljs-operator,[theme=felipec] .hljs-punctuation,[theme=felipec] .hljs-selector-attr,[theme=felipec] .hljs-subst,[theme=felipec] .hljs-template-variable{color:#efbf8f}[theme=felipec] .hljs-type{color:#efef8f}[theme=felipec] .hljs-selector-class,[theme=felipec] .hljs-selector-id,[theme=felipec] .hljs-tag,[theme=felipec] .hljs-title{color:#bfef8f}[theme=felipec] .hljs-addition,[theme=felipec] .hljs-regexp,[theme=felipec] .hljs-string{color:#8fef8f}[theme=felipec] .hljs-class,[theme=felipec] .hljs-property{color:#8fefbf}[theme=felipec] .hljs-name,[theme=felipec] .hljs-selector-tag{color:#8fefef}[theme=felipec] .hljs-built_in,[theme=felipec] .hljs-keyword{color:#8fbfef}[theme=felipec] .hljs-bullet,[theme=felipec] .hljs-section{color:#8f8fef}[theme=felipec] .hljs-selector-pseudo{color:#bf8fef}[theme=felipec] .hljs-attr,[theme=felipec] .hljs-attribute,[theme=felipec] .hljs-params,[theme=felipec] .hljs-variable{color:#ef8fef}[theme=felipec] .hljs-link,[theme=felipec] .hljs-symbol{color:#ef8fbf}[theme=felipec] .hljs-literal,[theme=felipec] .hljs-strong,[theme=felipec] .hljs-title{font-weight:700}[theme=felipec] .hljs-emphasis{font-style:italic}[theme=foundation] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=foundation] code.hljs{padding:3px 5px}[theme=foundation] .hljs{background:#eee;color:#000}[theme=foundation] .hljs-addition,[theme=foundation] .hljs-attribute,[theme=foundation] .hljs-emphasis,[theme=foundation] .hljs-link{color:#070}[theme=foundation] .hljs-emphasis{font-style:italic}[theme=foundation] .hljs-deletion,[theme=foundation] .hljs-string,[theme=foundation] .hljs-strong{color:#d14}[theme=foundation] .hljs-strong{font-weight:700}[theme=foundation] .hljs-comment,[theme=foundation] .hljs-quote{color:#998;font-style:italic}[theme=foundation] .hljs-section,[theme=foundation] .hljs-title{color:#900}[theme=foundation] .hljs-class .hljs-title,[theme=foundation] .hljs-title.class_,[theme=foundation] .hljs-type{color:#458}[theme=foundation] .hljs-template-variable,[theme=foundation] .hljs-variable{color:#369}[theme=foundation] .hljs-bullet{color:#970}[theme=foundation] .hljs-meta{color:#34b}[theme=foundation] .hljs-code,[theme=foundation] .hljs-keyword,[theme=foundation] .hljs-literal,[theme=foundation] .hljs-number,[theme=foundation] .hljs-selector-tag{color:#099}[theme=foundation] .hljs-regexp{background-color:#fff0ff;color:#808}[theme=foundation] .hljs-symbol{color:#990073}[theme=foundation] .hljs-name,[theme=foundation] .hljs-selector-class,[theme=foundation] .hljs-selector-id,[theme=foundation] .hljs-tag{color:#070}[theme=github-dark-dimmed]{ + /*! + Theme: GitHub Dark Dimmed + Description: Dark dimmed theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Colors taken from GitHub's CSS + */}[theme=github-dark-dimmed] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=github-dark-dimmed] code.hljs{padding:3px 5px}[theme=github-dark-dimmed] .hljs{color:#adbac7;background:#22272e}[theme=github-dark-dimmed] .hljs-doctag,[theme=github-dark-dimmed] .hljs-keyword,[theme=github-dark-dimmed] .hljs-meta .hljs-keyword,[theme=github-dark-dimmed] .hljs-template-tag,[theme=github-dark-dimmed] .hljs-template-variable,[theme=github-dark-dimmed] .hljs-type,[theme=github-dark-dimmed] .hljs-variable.language_{color:#f47067}[theme=github-dark-dimmed] .hljs-title,[theme=github-dark-dimmed] .hljs-title.class_,[theme=github-dark-dimmed] .hljs-title.class_.inherited__,[theme=github-dark-dimmed] .hljs-title.function_{color:#dcbdfb}[theme=github-dark-dimmed] .hljs-attr,[theme=github-dark-dimmed] .hljs-attribute,[theme=github-dark-dimmed] .hljs-literal,[theme=github-dark-dimmed] .hljs-meta,[theme=github-dark-dimmed] .hljs-number,[theme=github-dark-dimmed] .hljs-operator,[theme=github-dark-dimmed] .hljs-selector-attr,[theme=github-dark-dimmed] .hljs-selector-class,[theme=github-dark-dimmed] .hljs-selector-id,[theme=github-dark-dimmed] .hljs-variable{color:#6cb6ff}[theme=github-dark-dimmed] .hljs-meta .hljs-string,[theme=github-dark-dimmed] .hljs-regexp,[theme=github-dark-dimmed] .hljs-string{color:#96d0ff}[theme=github-dark-dimmed] .hljs-built_in,[theme=github-dark-dimmed] .hljs-symbol{color:#f69d50}[theme=github-dark-dimmed] .hljs-code,[theme=github-dark-dimmed] .hljs-comment,[theme=github-dark-dimmed] .hljs-formula{color:#768390}[theme=github-dark-dimmed] .hljs-name,[theme=github-dark-dimmed] .hljs-quote,[theme=github-dark-dimmed] .hljs-selector-pseudo,[theme=github-dark-dimmed] .hljs-selector-tag{color:#8ddb8c}[theme=github-dark-dimmed] .hljs-subst{color:#adbac7}[theme=github-dark-dimmed] .hljs-section{color:#316dca;font-weight:700}[theme=github-dark-dimmed] .hljs-bullet{color:#eac55f}[theme=github-dark-dimmed] .hljs-emphasis{color:#adbac7;font-style:italic}[theme=github-dark-dimmed] .hljs-strong{color:#adbac7;font-weight:700}[theme=github-dark-dimmed] .hljs-addition{color:#b4f1b4;background-color:#1b4721}[theme=github-dark-dimmed] .hljs-deletion{color:#ffd8d3;background-color:#78191b}[theme=github-dark]{ + /*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS + */}[theme=github-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=github-dark] code.hljs{padding:3px 5px}[theme=github-dark] .hljs{color:#c9d1d9;background:#0d1117}[theme=github-dark] .hljs-doctag,[theme=github-dark] .hljs-keyword,[theme=github-dark] .hljs-meta .hljs-keyword,[theme=github-dark] .hljs-template-tag,[theme=github-dark] .hljs-template-variable,[theme=github-dark] .hljs-type,[theme=github-dark] .hljs-variable.language_{color:#ff7b72}[theme=github-dark] .hljs-title,[theme=github-dark] .hljs-title.class_,[theme=github-dark] .hljs-title.class_.inherited__,[theme=github-dark] .hljs-title.function_{color:#d2a8ff}[theme=github-dark] .hljs-attr,[theme=github-dark] .hljs-attribute,[theme=github-dark] .hljs-literal,[theme=github-dark] .hljs-meta,[theme=github-dark] .hljs-number,[theme=github-dark] .hljs-operator,[theme=github-dark] .hljs-selector-attr,[theme=github-dark] .hljs-selector-class,[theme=github-dark] .hljs-selector-id,[theme=github-dark] .hljs-variable{color:#79c0ff}[theme=github-dark] .hljs-meta .hljs-string,[theme=github-dark] .hljs-regexp,[theme=github-dark] .hljs-string{color:#a5d6ff}[theme=github-dark] .hljs-built_in,[theme=github-dark] .hljs-symbol{color:#ffa657}[theme=github-dark] .hljs-code,[theme=github-dark] .hljs-comment,[theme=github-dark] .hljs-formula{color:#8b949e}[theme=github-dark] .hljs-name,[theme=github-dark] .hljs-quote,[theme=github-dark] .hljs-selector-pseudo,[theme=github-dark] .hljs-selector-tag{color:#7ee787}[theme=github-dark] .hljs-subst{color:#c9d1d9}[theme=github-dark] .hljs-section{color:#1f6feb;font-weight:700}[theme=github-dark] .hljs-bullet{color:#f2cc60}[theme=github-dark] .hljs-emphasis{color:#c9d1d9;font-style:italic}[theme=github-dark] .hljs-strong{color:#c9d1d9;font-weight:700}[theme=github-dark] .hljs-addition{color:#aff5b4;background-color:#033a16}[theme=github-dark] .hljs-deletion{color:#ffdcd7;background-color:#67060c}[theme=github]{ + /*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS + */}[theme=github] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=github] code.hljs{padding:3px 5px}[theme=github] .hljs{color:#24292e;background:#fff}[theme=github] .hljs-doctag,[theme=github] .hljs-keyword,[theme=github] .hljs-meta .hljs-keyword,[theme=github] .hljs-template-tag,[theme=github] .hljs-template-variable,[theme=github] .hljs-type,[theme=github] .hljs-variable.language_{color:#d73a49}[theme=github] .hljs-title,[theme=github] .hljs-title.class_,[theme=github] .hljs-title.class_.inherited__,[theme=github] .hljs-title.function_{color:#6f42c1}[theme=github] .hljs-attr,[theme=github] .hljs-attribute,[theme=github] .hljs-literal,[theme=github] .hljs-meta,[theme=github] .hljs-number,[theme=github] .hljs-operator,[theme=github] .hljs-selector-attr,[theme=github] .hljs-selector-class,[theme=github] .hljs-selector-id,[theme=github] .hljs-variable{color:#005cc5}[theme=github] .hljs-meta .hljs-string,[theme=github] .hljs-regexp,[theme=github] .hljs-string{color:#032f62}[theme=github] .hljs-built_in,[theme=github] .hljs-symbol{color:#e36209}[theme=github] .hljs-code,[theme=github] .hljs-comment,[theme=github] .hljs-formula{color:#6a737d}[theme=github] .hljs-name,[theme=github] .hljs-quote,[theme=github] .hljs-selector-pseudo,[theme=github] .hljs-selector-tag{color:#22863a}[theme=github] .hljs-subst{color:#24292e}[theme=github] .hljs-section{color:#005cc5;font-weight:700}[theme=github] .hljs-bullet{color:#735c0f}[theme=github] .hljs-emphasis{color:#24292e;font-style:italic}[theme=github] .hljs-strong{color:#24292e;font-weight:700}[theme=github] .hljs-addition{color:#22863a;background-color:#f0fff4}[theme=github] .hljs-deletion{color:#b31d28;background-color:#ffeef0}[theme=gml] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=gml] code.hljs{padding:3px 5px}[theme=gml] .hljs{background:#222;color:silver}[theme=gml] .hljs-keyword{color:#ffb871;font-weight:700}[theme=gml] .hljs-built_in{color:#ffb871}[theme=gml] .hljs-literal{color:#ff8080}[theme=gml] .hljs-symbol{color:#58e55a}[theme=gml] .hljs-comment{color:#5b995b}[theme=gml] .hljs-string{color:#ff0}[theme=gml] .hljs-number{color:#ff8080}[theme=gml] .hljs-addition,[theme=gml] .hljs-attribute,[theme=gml] .hljs-bullet,[theme=gml] .hljs-code,[theme=gml] .hljs-deletion,[theme=gml] .hljs-doctag,[theme=gml] .hljs-function,[theme=gml] .hljs-link,[theme=gml] .hljs-meta,[theme=gml] .hljs-meta .hljs-keyword,[theme=gml] .hljs-name,[theme=gml] .hljs-quote,[theme=gml] .hljs-regexp,[theme=gml] .hljs-section,[theme=gml] .hljs-selector-attr,[theme=gml] .hljs-selector-class,[theme=gml] .hljs-selector-id,[theme=gml] .hljs-selector-pseudo,[theme=gml] .hljs-selector-tag,[theme=gml] .hljs-subst,[theme=gml] .hljs-template-tag,[theme=gml] .hljs-template-variable,[theme=gml] .hljs-title,[theme=gml] .hljs-type,[theme=gml] .hljs-variable{color:silver}[theme=gml] .hljs-emphasis{font-style:italic}[theme=gml] .hljs-strong{font-weight:700}[theme=googlecode] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=googlecode] code.hljs{padding:3px 5px}[theme=googlecode] .hljs{background:#fff;color:#000}[theme=googlecode] .hljs-comment,[theme=googlecode] .hljs-quote{color:#800}[theme=googlecode] .hljs-keyword,[theme=googlecode] .hljs-name,[theme=googlecode] .hljs-section,[theme=googlecode] .hljs-selector-tag,[theme=googlecode] .hljs-title{color:#008}[theme=googlecode] .hljs-template-variable,[theme=googlecode] .hljs-variable{color:#660}[theme=googlecode] .hljs-regexp,[theme=googlecode] .hljs-selector-attr,[theme=googlecode] .hljs-selector-pseudo,[theme=googlecode] .hljs-string{color:#080}[theme=googlecode] .hljs-bullet,[theme=googlecode] .hljs-link,[theme=googlecode] .hljs-literal,[theme=googlecode] .hljs-meta,[theme=googlecode] .hljs-number,[theme=googlecode] .hljs-symbol{color:#066}[theme=googlecode] .hljs-attr,[theme=googlecode] .hljs-built_in,[theme=googlecode] .hljs-doctag,[theme=googlecode] .hljs-params,[theme=googlecode] .hljs-title,[theme=googlecode] .hljs-type{color:#606}[theme=googlecode] .hljs-attribute,[theme=googlecode] .hljs-subst{color:#000}[theme=googlecode] .hljs-formula{background-color:#eee;font-style:italic}[theme=googlecode] .hljs-selector-class,[theme=googlecode] .hljs-selector-id{color:#9b703f}[theme=googlecode] .hljs-addition{background-color:#baeeba}[theme=googlecode] .hljs-deletion{background-color:#ffc8bd}[theme=googlecode] .hljs-doctag,[theme=googlecode] .hljs-strong{font-weight:700}[theme=googlecode] .hljs-emphasis{font-style:italic}[theme=gradient-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=gradient-dark] code.hljs{padding:3px 5px}[theme=gradient-dark] .hljs{background-color:#652487;background-image:linear-gradient(160deg,#652487,#443ac3 35%,#0174b7 68%,#04988e);color:#e7e4eb}[theme=gradient-dark] .hljs-subtr{color:#e7e4eb}[theme=gradient-dark] .hljs-comment,[theme=gradient-dark] .hljs-doctag,[theme=gradient-dark] .hljs-meta,[theme=gradient-dark] .hljs-quote{color:#af8dd9}[theme=gradient-dark] .hljs-attr,[theme=gradient-dark] .hljs-regexp,[theme=gradient-dark] .hljs-selector-id,[theme=gradient-dark] .hljs-selector-tag,[theme=gradient-dark] .hljs-tag,[theme=gradient-dark] .hljs-template-tag{color:#aefbff}[theme=gradient-dark] .hljs-bullet,[theme=gradient-dark] .hljs-params,[theme=gradient-dark] .hljs-selector-class{color:#f19fff}[theme=gradient-dark] .hljs-keyword,[theme=gradient-dark] .hljs-meta .hljs-keyword,[theme=gradient-dark] .hljs-section,[theme=gradient-dark] .hljs-symbol,[theme=gradient-dark] .hljs-type{color:#17fc95}[theme=gradient-dark] .hljs-addition,[theme=gradient-dark] .hljs-link,[theme=gradient-dark] .hljs-number{color:#c5fe00}[theme=gradient-dark] .hljs-string{color:#38c0ff}[theme=gradient-dark] .hljs-addition,[theme=gradient-dark] .hljs-attribute{color:#e7ff9f}[theme=gradient-dark] .hljs-template-variable,[theme=gradient-dark] .hljs-variable{color:#e447ff}[theme=gradient-dark] .hljs-built_in,[theme=gradient-dark] .hljs-class,[theme=gradient-dark] .hljs-formula,[theme=gradient-dark] .hljs-function,[theme=gradient-dark] .hljs-name,[theme=gradient-dark] .hljs-title{color:#ffc800}[theme=gradient-dark] .hljs-deletion,[theme=gradient-dark] .hljs-literal,[theme=gradient-dark] .hljs-selector-pseudo{color:#ff9e44}[theme=gradient-dark] .hljs-emphasis,[theme=gradient-dark] .hljs-quote{font-style:italic}[theme=gradient-dark] .hljs-keyword,[theme=gradient-dark] .hljs-params,[theme=gradient-dark] .hljs-section,[theme=gradient-dark] .hljs-selector-class,[theme=gradient-dark] .hljs-selector-id,[theme=gradient-dark] .hljs-selector-tag,[theme=gradient-dark] .hljs-strong,[theme=gradient-dark] .hljs-template-tag{font-weight:700}[theme=gradient-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=gradient-light] code.hljs{padding:3px 5px}[theme=gradient-light] .hljs{background-color:#f9ccff;background-image:linear-gradient(295deg,#f9ccff,#e6bbf9 11%,#9ec6f9 32%,#55e6ee 60%,#91f5d1 74%,#f9ffbf 98%);color:#250482}[theme=gradient-light] .hljs-subtr{color:#01958b}[theme=gradient-light] .hljs-comment,[theme=gradient-light] .hljs-doctag,[theme=gradient-light] .hljs-meta,[theme=gradient-light] .hljs-quote{color:#cb7200}[theme=gradient-light] .hljs-attr,[theme=gradient-light] .hljs-regexp,[theme=gradient-light] .hljs-selector-id,[theme=gradient-light] .hljs-selector-tag,[theme=gradient-light] .hljs-tag,[theme=gradient-light] .hljs-template-tag{color:#07bd5f}[theme=gradient-light] .hljs-bullet,[theme=gradient-light] .hljs-params,[theme=gradient-light] .hljs-selector-class{color:#43449f}[theme=gradient-light] .hljs-keyword,[theme=gradient-light] .hljs-meta .hljs-keyword,[theme=gradient-light] .hljs-section,[theme=gradient-light] .hljs-symbol,[theme=gradient-light] .hljs-type{color:#7d2801}[theme=gradient-light] .hljs-addition,[theme=gradient-light] .hljs-link,[theme=gradient-light] .hljs-number{color:#7f0096}[theme=gradient-light] .hljs-string{color:#2681ab}[theme=gradient-light] .hljs-addition,[theme=gradient-light] .hljs-attribute{color:#296562}[theme=gradient-light] .hljs-template-variable,[theme=gradient-light] .hljs-variable{color:#025c8f}[theme=gradient-light] .hljs-built_in,[theme=gradient-light] .hljs-class,[theme=gradient-light] .hljs-formula,[theme=gradient-light] .hljs-function,[theme=gradient-light] .hljs-name,[theme=gradient-light] .hljs-title{color:#529117}[theme=gradient-light] .hljs-deletion,[theme=gradient-light] .hljs-literal,[theme=gradient-light] .hljs-selector-pseudo{color:#ad13ff}[theme=gradient-light] .hljs-emphasis,[theme=gradient-light] .hljs-quote{font-style:italic}[theme=gradient-light] .hljs-keyword,[theme=gradient-light] .hljs-params,[theme=gradient-light] .hljs-section,[theme=gradient-light] .hljs-selector-class,[theme=gradient-light] .hljs-selector-id,[theme=gradient-light] .hljs-selector-tag,[theme=gradient-light] .hljs-strong,[theme=gradient-light] .hljs-template-tag{font-weight:700}[theme=grayscale] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=grayscale] code.hljs{padding:3px 5px}[theme=grayscale] .hljs{color:#333;background:#fff}[theme=grayscale] .hljs-comment,[theme=grayscale] .hljs-quote{color:#777;font-style:italic}[theme=grayscale] .hljs-keyword,[theme=grayscale] .hljs-selector-tag,[theme=grayscale] .hljs-subst{color:#333;font-weight:700}[theme=grayscale] .hljs-literal,[theme=grayscale] .hljs-number{color:#777}[theme=grayscale] .hljs-doctag,[theme=grayscale] .hljs-formula,[theme=grayscale] .hljs-string{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC)}[theme=grayscale] .hljs-section,[theme=grayscale] .hljs-selector-id,[theme=grayscale] .hljs-title{color:#000;font-weight:700}[theme=grayscale] .hljs-subst{font-weight:400}[theme=grayscale] .hljs-class .hljs-title,[theme=grayscale] .hljs-name,[theme=grayscale] .hljs-title.class_,[theme=grayscale] .hljs-type{color:#333;font-weight:700}[theme=grayscale] .hljs-tag{color:#333}[theme=grayscale] .hljs-regexp{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==)}[theme=grayscale] .hljs-bullet,[theme=grayscale] .hljs-link,[theme=grayscale] .hljs-symbol{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==)}[theme=grayscale] .hljs-built_in{color:#000;text-decoration:underline}[theme=grayscale] .hljs-meta{color:#999;font-weight:700}[theme=grayscale] .hljs-deletion{color:#fff;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==)}[theme=grayscale] .hljs-addition{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC)}[theme=grayscale] .hljs-emphasis{font-style:italic}[theme=grayscale] .hljs-strong{font-weight:700}[theme=hybrid] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=hybrid] code.hljs{padding:3px 5px}[theme=hybrid] .hljs{background:#1d1f21;color:#c5c8c6}[theme=hybrid] .hljs span::selection,[theme=hybrid] .hljs::selection{background:#373b41}[theme=hybrid] .hljs span::-moz-selection,[theme=hybrid] .hljs::-moz-selection{background:#373b41}[theme=hybrid] .hljs-name,[theme=hybrid] .hljs-title{color:#f0c674}[theme=hybrid] .hljs-comment,[theme=hybrid] .hljs-meta,[theme=hybrid] .hljs-meta .hljs-keyword{color:#707880}[theme=hybrid] .hljs-deletion,[theme=hybrid] .hljs-link,[theme=hybrid] .hljs-literal,[theme=hybrid] .hljs-number,[theme=hybrid] .hljs-symbol{color:#c66}[theme=hybrid] .hljs-addition,[theme=hybrid] .hljs-doctag,[theme=hybrid] .hljs-regexp,[theme=hybrid] .hljs-selector-attr,[theme=hybrid] .hljs-selector-pseudo,[theme=hybrid] .hljs-string{color:#b5bd68}[theme=hybrid] .hljs-attribute,[theme=hybrid] .hljs-code,[theme=hybrid] .hljs-selector-id{color:#b294bb}[theme=hybrid] .hljs-bullet,[theme=hybrid] .hljs-keyword,[theme=hybrid] .hljs-selector-tag,[theme=hybrid] .hljs-tag{color:#81a2be}[theme=hybrid] .hljs-subst,[theme=hybrid] .hljs-template-tag,[theme=hybrid] .hljs-template-variable,[theme=hybrid] .hljs-variable{color:#8abeb7}[theme=hybrid] .hljs-built_in,[theme=hybrid] .hljs-quote,[theme=hybrid] .hljs-section,[theme=hybrid] .hljs-selector-class,[theme=hybrid] .hljs-type{color:#de935f}[theme=hybrid] .hljs-emphasis{font-style:italic}[theme=hybrid] .hljs-strong{font-weight:700}[theme=idea] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=idea] code.hljs{padding:3px 5px}[theme=idea] .hljs{color:#000;background:#fff}[theme=idea] .hljs-subst,[theme=idea] .hljs-title{font-weight:400;color:#000}[theme=idea] .hljs-comment,[theme=idea] .hljs-quote{color:grey;font-style:italic}[theme=idea] .hljs-meta{color:olive}[theme=idea] .hljs-tag{background:#efefef}[theme=idea] .hljs-keyword,[theme=idea] .hljs-literal,[theme=idea] .hljs-name,[theme=idea] .hljs-section,[theme=idea] .hljs-selector-class,[theme=idea] .hljs-selector-id,[theme=idea] .hljs-selector-tag,[theme=idea] .hljs-type{font-weight:700;color:navy}[theme=idea] .hljs-attribute,[theme=idea] .hljs-link,[theme=idea] .hljs-number,[theme=idea] .hljs-regexp{font-weight:700;color:#00f}[theme=idea] .hljs-link,[theme=idea] .hljs-number,[theme=idea] .hljs-regexp{font-weight:400}[theme=idea] .hljs-string{color:green;font-weight:700}[theme=idea] .hljs-bullet,[theme=idea] .hljs-formula,[theme=idea] .hljs-symbol{color:#000;background:#d0eded;font-style:italic}[theme=idea] .hljs-doctag{text-decoration:underline}[theme=idea] .hljs-template-variable,[theme=idea] .hljs-variable{color:#660e7a}[theme=idea] .hljs-addition{background:#baeeba}[theme=idea] .hljs-deletion{background:#ffc8bd}[theme=idea] .hljs-emphasis{font-style:italic}[theme=idea] .hljs-strong{font-weight:700}[theme=intellij-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=intellij-light] code.hljs{padding:3px 5px}[theme=intellij-light] .hljs{color:#000;background:#fff}[theme=intellij-light] .hljs-subst,[theme=intellij-light] .hljs-title{font-weight:400;color:#000}[theme=intellij-light] .hljs-title.function_{color:#7a7a43}[theme=intellij-light] .hljs-code,[theme=intellij-light] .hljs-comment,[theme=intellij-light] .hljs-quote{color:#8c8c8c;font-style:italic}[theme=intellij-light] .hljs-meta{color:#9e880d}[theme=intellij-light] .hljs-section{color:#871094}[theme=intellij-light] .hljs-built_in,[theme=intellij-light] .hljs-keyword,[theme=intellij-light] .hljs-literal,[theme=intellij-light] .hljs-meta .hljs-keyword,[theme=intellij-light] .hljs-name,[theme=intellij-light] .hljs-selector-attr,[theme=intellij-light] .hljs-selector-class,[theme=intellij-light] .hljs-selector-id,[theme=intellij-light] .hljs-selector-pseudo,[theme=intellij-light] .hljs-selector-tag,[theme=intellij-light] .hljs-symbol,[theme=intellij-light] .hljs-template-tag,[theme=intellij-light] .hljs-type,[theme=intellij-light] .hljs-variable.language_{color:#0033b3}[theme=intellij-light] .hljs-attr,[theme=intellij-light] .hljs-property{color:#871094}[theme=intellij-light] .hljs-attribute{color:#174ad4}[theme=intellij-light] .hljs-number{color:#1750eb}[theme=intellij-light] .hljs-regexp{color:#264eff}[theme=intellij-light] .hljs-link{text-decoration:underline;color:#006dcc}[theme=intellij-light] .hljs-meta .hljs-string,[theme=intellij-light] .hljs-string{color:#067d17}[theme=intellij-light] .hljs-char.escape_{color:#0037a6}[theme=intellij-light] .hljs-doctag{text-decoration:underline}[theme=intellij-light] .hljs-template-variable{color:#248f8f}[theme=intellij-light] .hljs-addition{background:#bee6be}[theme=intellij-light] .hljs-deletion{background:#d6d6d6}[theme=intellij-light] .hljs-emphasis{font-style:italic}[theme=intellij-light] .hljs-strong{font-weight:700}[theme=ir-black] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=ir-black] code.hljs{padding:3px 5px}[theme=ir-black] .hljs{background:#000;color:#f8f8f8}[theme=ir-black] .hljs-comment,[theme=ir-black] .hljs-meta,[theme=ir-black] .hljs-quote{color:#7c7c7c}[theme=ir-black] .hljs-keyword,[theme=ir-black] .hljs-name,[theme=ir-black] .hljs-selector-tag,[theme=ir-black] .hljs-tag{color:#96cbfe}[theme=ir-black] .hljs-attribute,[theme=ir-black] .hljs-selector-id{color:#ffffb6}[theme=ir-black] .hljs-addition,[theme=ir-black] .hljs-selector-attr,[theme=ir-black] .hljs-selector-pseudo,[theme=ir-black] .hljs-string{color:#a8ff60}[theme=ir-black] .hljs-subst{color:#daefa3}[theme=ir-black] .hljs-link,[theme=ir-black] .hljs-regexp{color:#e9c062}[theme=ir-black] .hljs-doctag,[theme=ir-black] .hljs-section,[theme=ir-black] .hljs-title,[theme=ir-black] .hljs-type{color:#ffffb6}[theme=ir-black] .hljs-bullet,[theme=ir-black] .hljs-literal,[theme=ir-black] .hljs-symbol,[theme=ir-black] .hljs-template-variable,[theme=ir-black] .hljs-variable{color:#c6c5fe}[theme=ir-black] .hljs-deletion,[theme=ir-black] .hljs-number{color:#ff73fd}[theme=ir-black] .hljs-emphasis{font-style:italic}[theme=ir-black] .hljs-strong{font-weight:700}[theme=isbl-editor-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=isbl-editor-dark] code.hljs{padding:3px 5px}[theme=isbl-editor-dark] .hljs{background:#404040}[theme=isbl-editor-dark] .hljs,[theme=isbl-editor-dark] .hljs-subst{color:#f0f0f0}[theme=isbl-editor-dark] .hljs-comment{color:#b5b5b5;font-style:italic}[theme=isbl-editor-dark] .hljs-attribute,[theme=isbl-editor-dark] .hljs-doctag,[theme=isbl-editor-dark] .hljs-keyword,[theme=isbl-editor-dark] .hljs-meta .hljs-keyword,[theme=isbl-editor-dark] .hljs-name,[theme=isbl-editor-dark] .hljs-selector-tag{color:#f0f0f0;font-weight:700}[theme=isbl-editor-dark] .hljs-string{color:#97bf0d}[theme=isbl-editor-dark] .hljs-deletion,[theme=isbl-editor-dark] .hljs-number,[theme=isbl-editor-dark] .hljs-quote,[theme=isbl-editor-dark] .hljs-selector-class,[theme=isbl-editor-dark] .hljs-selector-id,[theme=isbl-editor-dark] .hljs-template-tag,[theme=isbl-editor-dark] .hljs-type{color:#f0f0f0}[theme=isbl-editor-dark] .hljs-link,[theme=isbl-editor-dark] .hljs-regexp,[theme=isbl-editor-dark] .hljs-selector-attr,[theme=isbl-editor-dark] .hljs-selector-pseudo,[theme=isbl-editor-dark] .hljs-symbol,[theme=isbl-editor-dark] .hljs-template-variable,[theme=isbl-editor-dark] .hljs-variable{color:#e2c696}[theme=isbl-editor-dark] .hljs-built_in,[theme=isbl-editor-dark] .hljs-literal{color:#97bf0d;font-weight:700}[theme=isbl-editor-dark] .hljs-addition,[theme=isbl-editor-dark] .hljs-bullet,[theme=isbl-editor-dark] .hljs-code{color:#397300}[theme=isbl-editor-dark] .hljs-class{color:#ce9d4d;font-weight:700}[theme=isbl-editor-dark] .hljs-section,[theme=isbl-editor-dark] .hljs-title{color:#df471e}[theme=isbl-editor-dark] .hljs-title>.hljs-built_in{color:#81bce9;font-weight:400}[theme=isbl-editor-dark] .hljs-meta{color:#1f7199}[theme=isbl-editor-dark] .hljs-meta .hljs-string{color:#4d99bf}[theme=isbl-editor-dark] .hljs-emphasis{font-style:italic}[theme=isbl-editor-dark] .hljs-strong{font-weight:700}[theme=isbl-editor-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=isbl-editor-light] code.hljs{padding:3px 5px}[theme=isbl-editor-light] .hljs{background:#fff;color:#000}[theme=isbl-editor-light] .hljs-subst{color:#000}[theme=isbl-editor-light] .hljs-comment{color:#555;font-style:italic}[theme=isbl-editor-light] .hljs-attribute,[theme=isbl-editor-light] .hljs-doctag,[theme=isbl-editor-light] .hljs-keyword,[theme=isbl-editor-light] .hljs-meta .hljs-keyword,[theme=isbl-editor-light] .hljs-name,[theme=isbl-editor-light] .hljs-selector-tag{color:#000;font-weight:700}[theme=isbl-editor-light] .hljs-string{color:navy}[theme=isbl-editor-light] .hljs-deletion,[theme=isbl-editor-light] .hljs-number,[theme=isbl-editor-light] .hljs-quote,[theme=isbl-editor-light] .hljs-selector-class,[theme=isbl-editor-light] .hljs-selector-id,[theme=isbl-editor-light] .hljs-template-tag,[theme=isbl-editor-light] .hljs-type{color:#000}[theme=isbl-editor-light] .hljs-link,[theme=isbl-editor-light] .hljs-regexp,[theme=isbl-editor-light] .hljs-selector-attr,[theme=isbl-editor-light] .hljs-selector-pseudo,[theme=isbl-editor-light] .hljs-symbol,[theme=isbl-editor-light] .hljs-template-variable,[theme=isbl-editor-light] .hljs-variable{color:#5e1700}[theme=isbl-editor-light] .hljs-built_in,[theme=isbl-editor-light] .hljs-literal{color:navy;font-weight:700}[theme=isbl-editor-light] .hljs-addition,[theme=isbl-editor-light] .hljs-bullet,[theme=isbl-editor-light] .hljs-code{color:#397300}[theme=isbl-editor-light] .hljs-class{color:#6f1c00;font-weight:700}[theme=isbl-editor-light] .hljs-section,[theme=isbl-editor-light] .hljs-title{color:#fb2c00}[theme=isbl-editor-light] .hljs-title>.hljs-built_in{color:teal;font-weight:400}[theme=isbl-editor-light] .hljs-meta{color:#1f7199}[theme=isbl-editor-light] .hljs-meta .hljs-string{color:#4d99bf}[theme=isbl-editor-light] .hljs-emphasis{font-style:italic}[theme=isbl-editor-light] .hljs-strong{font-weight:700}[theme=kimbie-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=kimbie-dark] code.hljs{padding:3px 5px}[theme=kimbie-dark] .hljs{background:#221a0f;color:#d3af86}[theme=kimbie-dark] .hljs-comment,[theme=kimbie-dark] .hljs-quote{color:#d6baad}[theme=kimbie-dark] .hljs-meta,[theme=kimbie-dark] .hljs-name,[theme=kimbie-dark] .hljs-regexp,[theme=kimbie-dark] .hljs-selector-class,[theme=kimbie-dark] .hljs-selector-id,[theme=kimbie-dark] .hljs-tag,[theme=kimbie-dark] .hljs-template-variable,[theme=kimbie-dark] .hljs-variable{color:#dc3958}[theme=kimbie-dark] .hljs-built_in,[theme=kimbie-dark] .hljs-deletion,[theme=kimbie-dark] .hljs-link,[theme=kimbie-dark] .hljs-literal,[theme=kimbie-dark] .hljs-number,[theme=kimbie-dark] .hljs-params,[theme=kimbie-dark] .hljs-type{color:#f79a32}[theme=kimbie-dark] .hljs-addition,[theme=kimbie-dark] .hljs-bullet,[theme=kimbie-dark] .hljs-string,[theme=kimbie-dark] .hljs-symbol{color:#889b4a}[theme=kimbie-dark] .hljs-function,[theme=kimbie-dark] .hljs-keyword,[theme=kimbie-dark] .hljs-selector-tag{color:#98676a}[theme=kimbie-dark] .hljs-attribute,[theme=kimbie-dark] .hljs-section,[theme=kimbie-dark] .hljs-title{color:#f06431}[theme=kimbie-dark] .hljs-emphasis{font-style:italic}[theme=kimbie-dark] .hljs-strong{font-weight:700}[theme=kimbie-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=kimbie-light] code.hljs{padding:3px 5px}[theme=kimbie-light] .hljs{background:#fbebd4;color:#84613d}[theme=kimbie-light] .hljs-comment,[theme=kimbie-light] .hljs-quote{color:#a57a4c}[theme=kimbie-light] .hljs-meta,[theme=kimbie-light] .hljs-name,[theme=kimbie-light] .hljs-regexp,[theme=kimbie-light] .hljs-selector-class,[theme=kimbie-light] .hljs-selector-id,[theme=kimbie-light] .hljs-tag,[theme=kimbie-light] .hljs-template-variable,[theme=kimbie-light] .hljs-variable{color:#dc3958}[theme=kimbie-light] .hljs-built_in,[theme=kimbie-light] .hljs-deletion,[theme=kimbie-light] .hljs-link,[theme=kimbie-light] .hljs-literal,[theme=kimbie-light] .hljs-number,[theme=kimbie-light] .hljs-params,[theme=kimbie-light] .hljs-type{color:#f79a32}[theme=kimbie-light] .hljs-addition,[theme=kimbie-light] .hljs-bullet,[theme=kimbie-light] .hljs-string,[theme=kimbie-light] .hljs-symbol{color:#889b4a}[theme=kimbie-light] .hljs-function,[theme=kimbie-light] .hljs-keyword,[theme=kimbie-light] .hljs-selector-tag{color:#98676a}[theme=kimbie-light] .hljs-attribute,[theme=kimbie-light] .hljs-section,[theme=kimbie-light] .hljs-title{color:#f06431}[theme=kimbie-light] .hljs-emphasis{font-style:italic}[theme=kimbie-light] .hljs-strong{font-weight:700}[theme=lightfair] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=lightfair] code.hljs{padding:3px 5px}[theme=lightfair] .hljs{color:#444;background:#fff}[theme=lightfair] .hljs-name{color:#01a3a3}[theme=lightfair] .hljs-meta,[theme=lightfair] .hljs-tag{color:#789}[theme=lightfair] .hljs-comment{color:#888}[theme=lightfair] .hljs-attribute,[theme=lightfair] .hljs-doctag,[theme=lightfair] .hljs-keyword,[theme=lightfair] .hljs-meta .hljs-keyword,[theme=lightfair] .hljs-name,[theme=lightfair] .hljs-selector-tag{font-weight:700}[theme=lightfair] .hljs-deletion,[theme=lightfair] .hljs-number,[theme=lightfair] .hljs-quote,[theme=lightfair] .hljs-selector-class,[theme=lightfair] .hljs-selector-id,[theme=lightfair] .hljs-string,[theme=lightfair] .hljs-template-tag,[theme=lightfair] .hljs-type{color:#4286f4}[theme=lightfair] .hljs-section,[theme=lightfair] .hljs-title{color:#4286f4;font-weight:700}[theme=lightfair] .hljs-link,[theme=lightfair] .hljs-regexp,[theme=lightfair] .hljs-selector-attr,[theme=lightfair] .hljs-selector-pseudo,[theme=lightfair] .hljs-symbol,[theme=lightfair] .hljs-template-variable,[theme=lightfair] .hljs-variable{color:#bc6060}[theme=lightfair] .hljs-literal{color:#62bcbc}[theme=lightfair] .hljs-addition,[theme=lightfair] .hljs-built_in,[theme=lightfair] .hljs-bullet,[theme=lightfair] .hljs-code{color:#25c6c6}[theme=lightfair] .hljs-meta .hljs-string{color:#4d99bf}[theme=lightfair] .hljs-emphasis{font-style:italic}[theme=lightfair] .hljs-strong{font-weight:700}[theme=lioshi] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=lioshi] code.hljs{padding:3px 5px}[theme=lioshi] .hljs{background:#303030;color:#c5c8c6}[theme=lioshi] .hljs-comment{color:#8d8d8d}[theme=lioshi] .hljs-quote{color:#b3c7d8}[theme=lioshi] .hljs-deletion,[theme=lioshi] .hljs-name,[theme=lioshi] .hljs-regexp,[theme=lioshi] .hljs-selector-class,[theme=lioshi] .hljs-selector-id,[theme=lioshi] .hljs-tag,[theme=lioshi] .hljs-template-variable,[theme=lioshi] .hljs-variable{color:#c66}[theme=lioshi] .hljs-built_in,[theme=lioshi] .hljs-literal,[theme=lioshi] .hljs-number,[theme=lioshi] .hljs-subst .hljs-link,[theme=lioshi] .hljs-type{color:#de935f}[theme=lioshi] .hljs-attribute{color:#f0c674}[theme=lioshi] .hljs-addition,[theme=lioshi] .hljs-bullet,[theme=lioshi] .hljs-params,[theme=lioshi] .hljs-string{color:#b5bd68}[theme=lioshi] .hljs-class,[theme=lioshi] .hljs-function,[theme=lioshi] .hljs-keyword,[theme=lioshi] .hljs-selector-tag{color:#be94bb}[theme=lioshi] .hljs-meta,[theme=lioshi] .hljs-section,[theme=lioshi] .hljs-title{color:#81a2be}[theme=lioshi] .hljs-symbol{color:#dbc4d9}[theme=lioshi] .hljs-emphasis{font-style:italic}[theme=lioshi] .hljs-strong{font-weight:700}[theme=magula] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=magula] code.hljs{padding:3px 5px}[theme=magula] .hljs{background-color:#f4f4f4;color:#000}[theme=magula] .hljs-subst{color:#000}[theme=magula] .hljs-addition,[theme=magula] .hljs-attribute,[theme=magula] .hljs-bullet,[theme=magula] .hljs-string,[theme=magula] .hljs-symbol,[theme=magula] .hljs-template-tag,[theme=magula] .hljs-template-variable,[theme=magula] .hljs-title,[theme=magula] .hljs-variable{color:#050}[theme=magula] .hljs-comment,[theme=magula] .hljs-quote{color:#777}[theme=magula] .hljs-link,[theme=magula] .hljs-literal,[theme=magula] .hljs-number,[theme=magula] .hljs-regexp,[theme=magula] .hljs-type{color:#800}[theme=magula] .hljs-deletion,[theme=magula] .hljs-meta{color:#00e}[theme=magula] .hljs-built_in,[theme=magula] .hljs-doctag,[theme=magula] .hljs-keyword,[theme=magula] .hljs-name,[theme=magula] .hljs-section,[theme=magula] .hljs-selector-tag,[theme=magula] .hljs-tag,[theme=magula] .hljs-title{font-weight:700;color:navy}[theme=magula] .hljs-emphasis{font-style:italic}[theme=magula] .hljs-strong{font-weight:700}[theme=mono-blue] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=mono-blue] code.hljs{padding:3px 5px}[theme=mono-blue] .hljs{background:#eaeef3;color:#00193a}[theme=mono-blue] .hljs-doctag,[theme=mono-blue] .hljs-keyword,[theme=mono-blue] .hljs-name,[theme=mono-blue] .hljs-section,[theme=mono-blue] .hljs-selector-tag,[theme=mono-blue] .hljs-strong,[theme=mono-blue] .hljs-title{font-weight:700}[theme=mono-blue] .hljs-comment{color:#738191}[theme=mono-blue] .hljs-addition,[theme=mono-blue] .hljs-built_in,[theme=mono-blue] .hljs-literal,[theme=mono-blue] .hljs-name,[theme=mono-blue] .hljs-quote,[theme=mono-blue] .hljs-section,[theme=mono-blue] .hljs-selector-class,[theme=mono-blue] .hljs-selector-id,[theme=mono-blue] .hljs-string,[theme=mono-blue] .hljs-tag,[theme=mono-blue] .hljs-title,[theme=mono-blue] .hljs-type{color:#0048ab}[theme=mono-blue] .hljs-attribute,[theme=mono-blue] .hljs-bullet,[theme=mono-blue] .hljs-deletion,[theme=mono-blue] .hljs-link,[theme=mono-blue] .hljs-meta,[theme=mono-blue] .hljs-regexp,[theme=mono-blue] .hljs-subst,[theme=mono-blue] .hljs-symbol,[theme=mono-blue] .hljs-template-variable,[theme=mono-blue] .hljs-variable{color:#4c81c9}[theme=mono-blue] .hljs-emphasis{font-style:italic}[theme=monokai-sublime] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=monokai-sublime] code.hljs{padding:3px 5px}[theme=monokai-sublime] .hljs{background:#23241f;color:#f8f8f2}[theme=monokai-sublime] .hljs-subst,[theme=monokai-sublime] .hljs-tag{color:#f8f8f2}[theme=monokai-sublime] .hljs-emphasis,[theme=monokai-sublime] .hljs-strong{color:#a8a8a2}[theme=monokai-sublime] .hljs-bullet,[theme=monokai-sublime] .hljs-link,[theme=monokai-sublime] .hljs-literal,[theme=monokai-sublime] .hljs-number,[theme=monokai-sublime] .hljs-quote,[theme=monokai-sublime] .hljs-regexp{color:#ae81ff}[theme=monokai-sublime] .hljs-code,[theme=monokai-sublime] .hljs-section,[theme=monokai-sublime] .hljs-selector-class,[theme=monokai-sublime] .hljs-title{color:#a6e22e}[theme=monokai-sublime] .hljs-strong{font-weight:700}[theme=monokai-sublime] .hljs-emphasis{font-style:italic}[theme=monokai-sublime] .hljs-attr,[theme=monokai-sublime] .hljs-keyword,[theme=monokai-sublime] .hljs-name,[theme=monokai-sublime] .hljs-selector-tag{color:#f92672}[theme=monokai-sublime] .hljs-attribute,[theme=monokai-sublime] .hljs-symbol{color:#66d9ef}[theme=monokai-sublime] .hljs-class .hljs-title,[theme=monokai-sublime] .hljs-params,[theme=monokai-sublime] .hljs-title.class_{color:#f8f8f2}[theme=monokai-sublime] .hljs-addition,[theme=monokai-sublime] .hljs-built_in,[theme=monokai-sublime] .hljs-selector-attr,[theme=monokai-sublime] .hljs-selector-id,[theme=monokai-sublime] .hljs-selector-pseudo,[theme=monokai-sublime] .hljs-string,[theme=monokai-sublime] .hljs-template-variable,[theme=monokai-sublime] .hljs-type,[theme=monokai-sublime] .hljs-variable{color:#e6db74}[theme=monokai-sublime] .hljs-comment,[theme=monokai-sublime] .hljs-deletion,[theme=monokai-sublime] .hljs-meta{color:#75715e}[theme=monokai] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=monokai] code.hljs{padding:3px 5px}[theme=monokai] .hljs{background:#272822;color:#ddd}[theme=monokai] .hljs-keyword,[theme=monokai] .hljs-literal,[theme=monokai] .hljs-name,[theme=monokai] .hljs-selector-tag,[theme=monokai] .hljs-strong,[theme=monokai] .hljs-tag{color:#f92672}[theme=monokai] .hljs-code{color:#66d9ef}[theme=monokai] .hljs-attribute,[theme=monokai] .hljs-link,[theme=monokai] .hljs-regexp,[theme=monokai] .hljs-symbol{color:#bf79db}[theme=monokai] .hljs-addition,[theme=monokai] .hljs-built_in,[theme=monokai] .hljs-bullet,[theme=monokai] .hljs-emphasis,[theme=monokai] .hljs-section,[theme=monokai] .hljs-selector-attr,[theme=monokai] .hljs-selector-pseudo,[theme=monokai] .hljs-string,[theme=monokai] .hljs-subst,[theme=monokai] .hljs-template-tag,[theme=monokai] .hljs-template-variable,[theme=monokai] .hljs-title,[theme=monokai] .hljs-type,[theme=monokai] .hljs-variable{color:#a6e22e}[theme=monokai] .hljs-class .hljs-title,[theme=monokai] .hljs-title.class_{color:#fff}[theme=monokai] .hljs-comment,[theme=monokai] .hljs-deletion,[theme=monokai] .hljs-meta,[theme=monokai] .hljs-quote{color:#75715e}[theme=monokai] .hljs-doctag,[theme=monokai] .hljs-keyword,[theme=monokai] .hljs-literal,[theme=monokai] .hljs-section,[theme=monokai] .hljs-selector-id,[theme=monokai] .hljs-selector-tag,[theme=monokai] .hljs-title,[theme=monokai] .hljs-type{font-weight:700}[theme=night-owl] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=night-owl] code.hljs{padding:3px 5px}[theme=night-owl] .hljs{background:#011627;color:#d6deeb}[theme=night-owl] .hljs-keyword{color:#c792ea;font-style:italic}[theme=night-owl] .hljs-built_in{color:#addb67;font-style:italic}[theme=night-owl] .hljs-type{color:#82aaff}[theme=night-owl] .hljs-literal{color:#ff5874}[theme=night-owl] .hljs-number{color:#f78c6c}[theme=night-owl] .hljs-regexp{color:#5ca7e4}[theme=night-owl] .hljs-string{color:#ecc48d}[theme=night-owl] .hljs-subst{color:#d3423e}[theme=night-owl] .hljs-symbol{color:#82aaff}[theme=night-owl] .hljs-class{color:#ffcb8b}[theme=night-owl] .hljs-function{color:#82aaff}[theme=night-owl] .hljs-title{color:#dcdcaa;font-style:italic}[theme=night-owl] .hljs-params{color:#7fdbca}[theme=night-owl] .hljs-comment{color:#637777;font-style:italic}[theme=night-owl] .hljs-doctag{color:#7fdbca}[theme=night-owl] .hljs-meta,[theme=night-owl] .hljs-meta .hljs-keyword{color:#82aaff}[theme=night-owl] .hljs-meta .hljs-string{color:#ecc48d}[theme=night-owl] .hljs-section{color:#82b1ff}[theme=night-owl] .hljs-attr,[theme=night-owl] .hljs-name,[theme=night-owl] .hljs-tag{color:#7fdbca}[theme=night-owl] .hljs-attribute{color:#80cbc4}[theme=night-owl] .hljs-variable{color:#addb67}[theme=night-owl] .hljs-bullet{color:#d9f5dd}[theme=night-owl] .hljs-code{color:#80cbc4}[theme=night-owl] .hljs-emphasis{color:#c792ea;font-style:italic}[theme=night-owl] .hljs-strong{color:#addb67;font-weight:700}[theme=night-owl] .hljs-formula{color:#c792ea}[theme=night-owl] .hljs-link{color:#ff869a}[theme=night-owl] .hljs-quote{color:#697098;font-style:italic}[theme=night-owl] .hljs-selector-tag{color:#ff6363}[theme=night-owl] .hljs-selector-id{color:#fad430}[theme=night-owl] .hljs-selector-class{color:#addb67;font-style:italic}[theme=night-owl] .hljs-selector-attr,[theme=night-owl] .hljs-selector-pseudo{color:#c792ea;font-style:italic}[theme=night-owl] .hljs-template-tag{color:#c792ea}[theme=night-owl] .hljs-template-variable{color:#addb67}[theme=night-owl] .hljs-addition{color:#addb67;font-style:italic}[theme=night-owl] .hljs-deletion{color:#ef535090;font-style:italic}[theme=nnfx-dark]{ + /*! + Theme: nnfx dark + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 + */}[theme=nnfx-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=nnfx-dark] code.hljs{padding:3px 5px}[theme=nnfx-dark] .hljs{background:#333;color:#fff}[theme=nnfx-dark] .language-xml .hljs-meta,[theme=nnfx-dark] .language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#69f}[theme=nnfx-dark] .hljs-comment,[theme=nnfx-dark] .hljs-quote{font-style:italic;color:#9c6}[theme=nnfx-dark] .hljs-built_in,[theme=nnfx-dark] .hljs-keyword,[theme=nnfx-dark] .hljs-name{color:#a7a}[theme=nnfx-dark] .hljs-attr,[theme=nnfx-dark] .hljs-name{font-weight:700}[theme=nnfx-dark] .hljs-string{font-weight:400}[theme=nnfx-dark] .hljs-code,[theme=nnfx-dark] .hljs-link,[theme=nnfx-dark] .hljs-meta .hljs-string,[theme=nnfx-dark] .hljs-number,[theme=nnfx-dark] .hljs-regexp,[theme=nnfx-dark] .hljs-string{color:#bce}[theme=nnfx-dark] .hljs-bullet,[theme=nnfx-dark] .hljs-symbol,[theme=nnfx-dark] .hljs-template-variable,[theme=nnfx-dark] .hljs-title,[theme=nnfx-dark] .hljs-variable{color:#d40}[theme=nnfx-dark] .hljs-class .hljs-title,[theme=nnfx-dark] .hljs-title.class_,[theme=nnfx-dark] .hljs-type{font-weight:700;color:#96c}[theme=nnfx-dark] .hljs-attr,[theme=nnfx-dark] .hljs-function .hljs-title,[theme=nnfx-dark] .hljs-subst,[theme=nnfx-dark] .hljs-tag,[theme=nnfx-dark] .hljs-title.function_{color:#fff}[theme=nnfx-dark] .hljs-formula{background-color:#eee;font-style:italic}[theme=nnfx-dark] .hljs-addition{background-color:#797}[theme=nnfx-dark] .hljs-deletion{background-color:#c99}[theme=nnfx-dark] .hljs-meta{color:#69f}[theme=nnfx-dark] .hljs-section,[theme=nnfx-dark] .hljs-selector-class,[theme=nnfx-dark] .hljs-selector-id,[theme=nnfx-dark] .hljs-selector-pseudo,[theme=nnfx-dark] .hljs-selector-tag{font-weight:700;color:#69f}[theme=nnfx-dark] .hljs-selector-pseudo{font-style:italic}[theme=nnfx-dark] .hljs-doctag,[theme=nnfx-dark] .hljs-strong{font-weight:700}[theme=nnfx-dark] .hljs-emphasis{font-style:italic}[theme=nnfx-light]{ + /*! + Theme: nnfx light + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 + */}[theme=nnfx-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=nnfx-light] code.hljs{padding:3px 5px}[theme=nnfx-light] .hljs{background:#fff;color:#000}[theme=nnfx-light] .language-xml .hljs-meta,[theme=nnfx-light] .language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#48b}[theme=nnfx-light] .hljs-comment,[theme=nnfx-light] .hljs-quote{font-style:italic;color:#070}[theme=nnfx-light] .hljs-built_in,[theme=nnfx-light] .hljs-keyword,[theme=nnfx-light] .hljs-name{color:#808}[theme=nnfx-light] .hljs-attr,[theme=nnfx-light] .hljs-name{font-weight:700}[theme=nnfx-light] .hljs-string{font-weight:400}[theme=nnfx-light] .hljs-code,[theme=nnfx-light] .hljs-link,[theme=nnfx-light] .hljs-meta .hljs-string,[theme=nnfx-light] .hljs-number,[theme=nnfx-light] .hljs-regexp,[theme=nnfx-light] .hljs-string{color:#00f}[theme=nnfx-light] .hljs-bullet,[theme=nnfx-light] .hljs-symbol,[theme=nnfx-light] .hljs-template-variable,[theme=nnfx-light] .hljs-title,[theme=nnfx-light] .hljs-variable{color:#f40}[theme=nnfx-light] .hljs-class .hljs-title,[theme=nnfx-light] .hljs-title.class_,[theme=nnfx-light] .hljs-type{font-weight:700;color:#639}[theme=nnfx-light] .hljs-attr,[theme=nnfx-light] .hljs-function .hljs-title,[theme=nnfx-light] .hljs-subst,[theme=nnfx-light] .hljs-tag,[theme=nnfx-light] .hljs-title.function_{color:#000}[theme=nnfx-light] .hljs-formula{background-color:#eee;font-style:italic}[theme=nnfx-light] .hljs-addition{background-color:#beb}[theme=nnfx-light] .hljs-deletion{background-color:#fbb}[theme=nnfx-light] .hljs-meta{color:#269}[theme=nnfx-light] .hljs-section,[theme=nnfx-light] .hljs-selector-class,[theme=nnfx-light] .hljs-selector-id,[theme=nnfx-light] .hljs-selector-pseudo,[theme=nnfx-light] .hljs-selector-tag{font-weight:700;color:#48b}[theme=nnfx-light] .hljs-selector-pseudo{font-style:italic}[theme=nnfx-light] .hljs-doctag,[theme=nnfx-light] .hljs-strong{font-weight:700}[theme=nnfx-light] .hljs-emphasis{font-style:italic}[theme=nord] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=nord] code.hljs{padding:3px 5px}[theme=nord] .hljs{background:#2e3440}[theme=nord] .hljs,[theme=nord] .hljs-subst{color:#d8dee9}[theme=nord] .hljs-selector-tag{color:#81a1c1}[theme=nord] .hljs-selector-id{color:#8fbcbb;font-weight:700}[theme=nord] .hljs-selector-attr,[theme=nord] .hljs-selector-class{color:#8fbcbb}[theme=nord] .hljs-property,[theme=nord] .hljs-selector-pseudo{color:#88c0d0}[theme=nord] .hljs-addition{background-color:hsla(92,28%,65%,.5)}[theme=nord] .hljs-deletion{background-color:rgba(191,97,106,.5)}[theme=nord] .hljs-built_in,[theme=nord] .hljs-class,[theme=nord] .hljs-type{color:#8fbcbb}[theme=nord] .hljs-function,[theme=nord] .hljs-function>.hljs-title,[theme=nord] .hljs-title.hljs-function{color:#88c0d0}[theme=nord] .hljs-keyword,[theme=nord] .hljs-literal,[theme=nord] .hljs-symbol{color:#81a1c1}[theme=nord] .hljs-number{color:#b48ead}[theme=nord] .hljs-regexp{color:#ebcb8b}[theme=nord] .hljs-string{color:#a3be8c}[theme=nord] .hljs-title{color:#8fbcbb}[theme=nord] .hljs-params{color:#d8dee9}[theme=nord] .hljs-bullet{color:#81a1c1}[theme=nord] .hljs-code{color:#8fbcbb}[theme=nord] .hljs-emphasis{font-style:italic}[theme=nord] .hljs-formula{color:#8fbcbb}[theme=nord] .hljs-strong{font-weight:700}[theme=nord] .hljs-link:hover{text-decoration:underline}[theme=nord] .hljs-comment,[theme=nord] .hljs-quote{color:#4c566a}[theme=nord] .hljs-doctag{color:#8fbcbb}[theme=nord] .hljs-meta,[theme=nord] .hljs-meta .hljs-keyword{color:#5e81ac}[theme=nord] .hljs-meta .hljs-string{color:#a3be8c}[theme=nord] .hljs-attr{color:#8fbcbb}[theme=nord] .hljs-attribute{color:#d8dee9}[theme=nord] .hljs-name{color:#81a1c1}[theme=nord] .hljs-section{color:#88c0d0}[theme=nord] .hljs-tag{color:#81a1c1}[theme=nord] .hljs-template-variable,[theme=nord] .hljs-variable{color:#d8dee9}[theme=nord] .hljs-template-tag{color:#5e81ac}[theme=nord] .language-abnf .hljs-attribute{color:#88c0d0}[theme=nord] .language-abnf .hljs-symbol{color:#ebcb8b}[theme=nord] .language-apache .hljs-attribute{color:#88c0d0}[theme=nord] .language-apache .hljs-section{color:#81a1c1}[theme=nord] .language-arduino .hljs-built_in{color:#88c0d0}[theme=nord] .language-aspectj .hljs-meta{color:#d08770}[theme=nord] .language-aspectj>.hljs-title{color:#88c0d0}[theme=nord] .language-bnf .hljs-attribute{color:#8fbcbb}[theme=nord] .language-clojure .hljs-name{color:#88c0d0}[theme=nord] .language-clojure .hljs-symbol{color:#ebcb8b}[theme=nord] .language-coq .hljs-built_in{color:#88c0d0}[theme=nord] .language-cpp .hljs-meta .hljs-string{color:#8fbcbb}[theme=nord] .language-css .hljs-built_in{color:#88c0d0}[theme=nord] .language-css .hljs-keyword{color:#d08770}[theme=nord] .language-diff .hljs-meta,[theme=nord] .language-ebnf .hljs-attribute{color:#8fbcbb}[theme=nord] .language-glsl .hljs-built_in{color:#88c0d0}[theme=nord] .language-groovy .hljs-meta:not(:first-child),[theme=nord] .language-haxe .hljs-meta,[theme=nord] .language-java .hljs-meta{color:#d08770}[theme=nord] .language-ldif .hljs-attribute{color:#8fbcbb}[theme=nord] .language-lisp .hljs-name,[theme=nord] .language-lua .hljs-built_in,[theme=nord] .language-moonscript .hljs-built_in,[theme=nord] .language-nginx .hljs-attribute{color:#88c0d0}[theme=nord] .language-nginx .hljs-section{color:#5e81ac}[theme=nord] .language-pf .hljs-built_in,[theme=nord] .language-processing .hljs-built_in{color:#88c0d0}[theme=nord] .language-scss .hljs-keyword,[theme=nord] .language-stylus .hljs-keyword{color:#81a1c1}[theme=nord] .language-swift .hljs-meta{color:#d08770}[theme=nord] .language-vim .hljs-built_in{color:#88c0d0;font-style:italic}[theme=nord] .language-yaml .hljs-meta{color:#d08770}[theme=obsidian] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=obsidian] code.hljs{padding:3px 5px}[theme=obsidian] .hljs{color:#e0e2e4;background:#282b2e}[theme=obsidian] .hljs-keyword,[theme=obsidian] .hljs-literal,[theme=obsidian] .hljs-selector-id,[theme=obsidian] .hljs-selector-tag{color:#93c763}[theme=obsidian] .hljs-number{color:#ffcd22}[theme=obsidian] .hljs-attribute{color:#668bb0}[theme=obsidian] .hljs-link,[theme=obsidian] .hljs-regexp{color:#d39745}[theme=obsidian] .hljs-meta{color:#557182}[theme=obsidian] .hljs-addition,[theme=obsidian] .hljs-built_in,[theme=obsidian] .hljs-bullet,[theme=obsidian] .hljs-emphasis,[theme=obsidian] .hljs-name,[theme=obsidian] .hljs-selector-attr,[theme=obsidian] .hljs-selector-pseudo,[theme=obsidian] .hljs-subst,[theme=obsidian] .hljs-tag,[theme=obsidian] .hljs-template-tag,[theme=obsidian] .hljs-template-variable,[theme=obsidian] .hljs-type,[theme=obsidian] .hljs-variable{color:#8cbbad}[theme=obsidian] .hljs-string,[theme=obsidian] .hljs-symbol{color:#ec7600}[theme=obsidian] .hljs-comment,[theme=obsidian] .hljs-deletion,[theme=obsidian] .hljs-quote{color:#818e96}[theme=obsidian] .hljs-selector-class{color:#a082bd}[theme=obsidian] .hljs-doctag,[theme=obsidian] .hljs-keyword,[theme=obsidian] .hljs-literal,[theme=obsidian] .hljs-name,[theme=obsidian] .hljs-section,[theme=obsidian] .hljs-selector-tag,[theme=obsidian] .hljs-strong,[theme=obsidian] .hljs-title,[theme=obsidian] .hljs-type{font-weight:700}[theme=obsidian] .hljs-class .hljs-title,[theme=obsidian] .hljs-code,[theme=obsidian] .hljs-section,[theme=obsidian] .hljs-title.class_{color:#fff}[theme=panda-syntax-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=panda-syntax-dark] code.hljs{padding:3px 5px}[theme=panda-syntax-dark] .hljs{color:#e6e6e6;background:#2a2c2d}[theme=panda-syntax-dark] .hljs-emphasis{font-style:italic}[theme=panda-syntax-dark] .hljs-strong{font-weight:700}[theme=panda-syntax-dark] .hljs-link{text-decoration:underline}[theme=panda-syntax-dark] .hljs-comment,[theme=panda-syntax-dark] .hljs-quote{color:#bbb;font-style:italic}[theme=panda-syntax-dark] .hljs-params{color:#bbb}[theme=panda-syntax-dark] .hljs-attr,[theme=panda-syntax-dark] .hljs-punctuation{color:#e6e6e6}[theme=panda-syntax-dark] .hljs-meta,[theme=panda-syntax-dark] .hljs-name,[theme=panda-syntax-dark] .hljs-selector-tag{color:#ff4b82}[theme=panda-syntax-dark] .hljs-char.escape_,[theme=panda-syntax-dark] .hljs-operator{color:#b084eb}[theme=panda-syntax-dark] .hljs-deletion,[theme=panda-syntax-dark] .hljs-keyword{color:#ff75b5}[theme=panda-syntax-dark] .hljs-regexp,[theme=panda-syntax-dark] .hljs-selector-attr,[theme=panda-syntax-dark] .hljs-selector-pseudo,[theme=panda-syntax-dark] .hljs-variable.language_{color:#ff9ac1}[theme=panda-syntax-dark] .hljs-code,[theme=panda-syntax-dark] .hljs-formula,[theme=panda-syntax-dark] .hljs-property,[theme=panda-syntax-dark] .hljs-section,[theme=panda-syntax-dark] .hljs-subst,[theme=panda-syntax-dark] .hljs-title.function_{color:#45a9f9}[theme=panda-syntax-dark] .hljs-addition,[theme=panda-syntax-dark] .hljs-bullet,[theme=panda-syntax-dark] .hljs-meta .hljs-string,[theme=panda-syntax-dark] .hljs-selector-class,[theme=panda-syntax-dark] .hljs-string,[theme=panda-syntax-dark] .hljs-symbol,[theme=panda-syntax-dark] .hljs-title.class_,[theme=panda-syntax-dark] .hljs-title.class_.inherited__{color:#19f9d8}[theme=panda-syntax-dark] .hljs-attribute,[theme=panda-syntax-dark] .hljs-built_in,[theme=panda-syntax-dark] .hljs-doctag,[theme=panda-syntax-dark] .hljs-link,[theme=panda-syntax-dark] .hljs-literal,[theme=panda-syntax-dark] .hljs-meta .hljs-keyword,[theme=panda-syntax-dark] .hljs-number,[theme=panda-syntax-dark] .hljs-punctuation,[theme=panda-syntax-dark] .hljs-selector-id,[theme=panda-syntax-dark] .hljs-tag,[theme=panda-syntax-dark] .hljs-template-tag,[theme=panda-syntax-dark] .hljs-template-variable,[theme=panda-syntax-dark] .hljs-title,[theme=panda-syntax-dark] .hljs-type,[theme=panda-syntax-dark] .hljs-variable{color:#ffb86c}[theme=panda-syntax-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=panda-syntax-light] code.hljs{padding:3px 5px}[theme=panda-syntax-light] .hljs{color:#2a2c2d;background:#e6e6e6}[theme=panda-syntax-light] .hljs-emphasis{font-style:italic}[theme=panda-syntax-light] .hljs-strong{font-weight:700}[theme=panda-syntax-light] .hljs-link{text-decoration:underline}[theme=panda-syntax-light] .hljs-comment,[theme=panda-syntax-light] .hljs-quote{color:#676b79;font-style:italic}[theme=panda-syntax-light] .hljs-params{color:#676b79}[theme=panda-syntax-light] .hljs-attr,[theme=panda-syntax-light] .hljs-punctuation{color:#2a2c2d}[theme=panda-syntax-light] .hljs-char.escape_,[theme=panda-syntax-light] .hljs-meta,[theme=panda-syntax-light] .hljs-name,[theme=panda-syntax-light] .hljs-operator,[theme=panda-syntax-light] .hljs-selector-tag{color:#c56200}[theme=panda-syntax-light] .hljs-deletion,[theme=panda-syntax-light] .hljs-keyword{color:#d92792}[theme=panda-syntax-light] .hljs-regexp,[theme=panda-syntax-light] .hljs-selector-attr,[theme=panda-syntax-light] .hljs-selector-pseudo,[theme=panda-syntax-light] .hljs-variable.language_{color:#cc5e91}[theme=panda-syntax-light] .hljs-code,[theme=panda-syntax-light] .hljs-formula,[theme=panda-syntax-light] .hljs-property,[theme=panda-syntax-light] .hljs-section,[theme=panda-syntax-light] .hljs-subst,[theme=panda-syntax-light] .hljs-title.function_{color:#3787c7}[theme=panda-syntax-light] .hljs-addition,[theme=panda-syntax-light] .hljs-bullet,[theme=panda-syntax-light] .hljs-meta .hljs-string,[theme=panda-syntax-light] .hljs-selector-class,[theme=panda-syntax-light] .hljs-string,[theme=panda-syntax-light] .hljs-symbol,[theme=panda-syntax-light] .hljs-title.class_,[theme=panda-syntax-light] .hljs-title.class_.inherited__{color:#0d7d6c}[theme=panda-syntax-light] .hljs-attribute,[theme=panda-syntax-light] .hljs-built_in,[theme=panda-syntax-light] .hljs-doctag,[theme=panda-syntax-light] .hljs-link,[theme=panda-syntax-light] .hljs-literal,[theme=panda-syntax-light] .hljs-meta .hljs-keyword,[theme=panda-syntax-light] .hljs-number,[theme=panda-syntax-light] .hljs-selector-id,[theme=panda-syntax-light] .hljs-tag,[theme=panda-syntax-light] .hljs-template-tag,[theme=panda-syntax-light] .hljs-template-variable,[theme=panda-syntax-light] .hljs-title,[theme=panda-syntax-light] .hljs-type,[theme=panda-syntax-light] .hljs-variable{color:#7641bb}[theme=paraiso-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=paraiso-dark] code.hljs{padding:3px 5px}[theme=paraiso-dark] .hljs{background:#2f1e2e;color:#a39e9b}[theme=paraiso-dark] .hljs-comment,[theme=paraiso-dark] .hljs-quote{color:#8d8687}[theme=paraiso-dark] .hljs-link,[theme=paraiso-dark] .hljs-meta,[theme=paraiso-dark] .hljs-name,[theme=paraiso-dark] .hljs-regexp,[theme=paraiso-dark] .hljs-selector-class,[theme=paraiso-dark] .hljs-selector-id,[theme=paraiso-dark] .hljs-tag,[theme=paraiso-dark] .hljs-template-variable,[theme=paraiso-dark] .hljs-variable{color:#ef6155}[theme=paraiso-dark] .hljs-built_in,[theme=paraiso-dark] .hljs-deletion,[theme=paraiso-dark] .hljs-literal,[theme=paraiso-dark] .hljs-number,[theme=paraiso-dark] .hljs-params,[theme=paraiso-dark] .hljs-type{color:#f99b15}[theme=paraiso-dark] .hljs-attribute,[theme=paraiso-dark] .hljs-section,[theme=paraiso-dark] .hljs-title{color:#fec418}[theme=paraiso-dark] .hljs-addition,[theme=paraiso-dark] .hljs-bullet,[theme=paraiso-dark] .hljs-string,[theme=paraiso-dark] .hljs-symbol{color:#48b685}[theme=paraiso-dark] .hljs-keyword,[theme=paraiso-dark] .hljs-selector-tag{color:#815ba4}[theme=paraiso-dark] .hljs-emphasis{font-style:italic}[theme=paraiso-dark] .hljs-strong{font-weight:700}[theme=paraiso-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=paraiso-light] code.hljs{padding:3px 5px}[theme=paraiso-light] .hljs{background:#e7e9db;color:#4f424c}[theme=paraiso-light] .hljs-comment,[theme=paraiso-light] .hljs-quote{color:#776e71}[theme=paraiso-light] .hljs-link,[theme=paraiso-light] .hljs-meta,[theme=paraiso-light] .hljs-name,[theme=paraiso-light] .hljs-regexp,[theme=paraiso-light] .hljs-selector-class,[theme=paraiso-light] .hljs-selector-id,[theme=paraiso-light] .hljs-tag,[theme=paraiso-light] .hljs-template-variable,[theme=paraiso-light] .hljs-variable{color:#ef6155}[theme=paraiso-light] .hljs-built_in,[theme=paraiso-light] .hljs-deletion,[theme=paraiso-light] .hljs-literal,[theme=paraiso-light] .hljs-number,[theme=paraiso-light] .hljs-params,[theme=paraiso-light] .hljs-type{color:#f99b15}[theme=paraiso-light] .hljs-attribute,[theme=paraiso-light] .hljs-section,[theme=paraiso-light] .hljs-title{color:#fec418}[theme=paraiso-light] .hljs-addition,[theme=paraiso-light] .hljs-bullet,[theme=paraiso-light] .hljs-string,[theme=paraiso-light] .hljs-symbol{color:#48b685}[theme=paraiso-light] .hljs-keyword,[theme=paraiso-light] .hljs-selector-tag{color:#815ba4}[theme=paraiso-light] .hljs-emphasis{font-style:italic}[theme=paraiso-light] .hljs-strong{font-weight:700}[theme=pojoaque] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=pojoaque] code.hljs{padding:3px 5px}[theme=pojoaque] .hljs{color:#dccf8f;background:url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAMAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQACQYGBgcGCQcHCQ0IBwgNDwsJCQsPEQ4ODw4OERENDg4ODg0RERQUFhQUERoaHBwaGiYmJiYmKysrKysrKysrKwEJCAgJCgkMCgoMDwwODA8TDg4ODhMVDg4PDg4VGhMRERERExoXGhYWFhoXHR0aGh0dJCQjJCQrKysrKysrKysr/8AAEQgAjACMAwEiAAIRAQMRAf/EAF4AAQEBAAAAAAAAAAAAAAAAAAABBwEBAQAAAAAAAAAAAAAAAAAAAAIQAAEDAwIHAQEAAAAAAAAAAADwAREhYaExkUFRcYGxwdHh8REBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AyGFEjHaBS2fDDs2zkhKmBKktb7km+ZwwCnXPkLVmCTMItj6AXFxRS465/BTnkAJvkLkJe+7AKKoi2AtRS2zuAWsCb5GOlBN8gKfmuGHZ8MFqIth3ALmFoFwbwKWyAlTAp17uKqBvgBD8sM4fTjhvAhkzhaRkBMKBrfs7jGPIpzy7gFrAqnC0C0gB0EWwBDW2cBVQwm+QtPpa3wBO3sVvszCnLAhkzgL5/RLf13cLQd8/AGlu0Cb5HTx9KuAEieGJEdcehS3eRTp2ATdt3CpIm+QtZwAhROXFeb7swp/ahaM3kBE/jSIUBc/AWrgBN8uNFAl+b7sAXFxFn2YLUU5Ns7gFX8C4ib+hN8gFWXwK3bZglxEJm+gKdciLPsFV/TClsgJUwKJ5FVA7tvIFrfZhVfGJDcsCKaYgAqv6YRbE+RWOWBtu7+AL3yRalXLyKqAIIfk+zARbDgFyEsncYwJvlgFRW+GEWntIi2P0BooyFxcNr8Ep3+ANLbMO+QyhvbiqdgC0kVvgUUiLYgBS2QtPbiVI1/sgOmG9uO+Y8DW+7jS2zAOnj6O2BndwuIAUtkdRN8gFoK3wwXMQyZwHVbClsuNLd4E3yAUR6FVDBR+BafQGt93LVMxJTv8ABts4CVLhcfYWsCb5kC9/BHdU8CLYFY5bMAd+eX9MGthhpbA1vu4B7+RKkaW2Yq4AQtVBBFsAJU/AuIXBhN8gGWnstefhiZyWvLAEnbYS1uzSFP6Jvn4Baxx70JKkQojLib5AVTey1jjgkKJGO0AKWyOm7N7cSpgSpAdPH0Tfd/gp1z5C1ZgKqN9J2wFxcUUuAFLZAm+QC0Fb4YUVRFsAOvj4KW2dwtYE3yAWk/wS/PLMKfmuGHZ8MAXF/Ja32Yi5haAKWz4Ydm2cSpgU693Atb7km+Zwwh+WGcPpxw3gAkzCLY+iYUDW/Z3Adc/gpzyFrAqnALkJe+7DoItgAtRS2zuKqGE3yAx0oJvkdvYrfZmALURbDuL5/RLf13cAuDeBS2RpbtAm+QFVA3wR+3fUtFHoBDJnC0jIXH0HWsgMY8inPLuOkd9chp4z20ALQLSA8cI9jYAIa2zjzjBd8gRafS1vgiUho/kAKcsCGTOGWvoOpkAtB3z8Hm8x2Ff5ADp4+lXAlIvcmwH/2Q==) 0 0 #181914}[theme=pojoaque] .hljs-comment,[theme=pojoaque] .hljs-quote{color:#586e75;font-style:italic}[theme=pojoaque] .hljs-addition,[theme=pojoaque] .hljs-keyword,[theme=pojoaque] .hljs-literal,[theme=pojoaque] .hljs-selector-tag{color:#b64926}[theme=pojoaque] .hljs-doctag,[theme=pojoaque] .hljs-number,[theme=pojoaque] .hljs-regexp,[theme=pojoaque] .hljs-string{color:#468966}[theme=pojoaque] .hljs-built_in,[theme=pojoaque] .hljs-name,[theme=pojoaque] .hljs-section,[theme=pojoaque] .hljs-title{color:#ffb03b}[theme=pojoaque] .hljs-class .hljs-title,[theme=pojoaque] .hljs-tag,[theme=pojoaque] .hljs-template-variable,[theme=pojoaque] .hljs-title.class_,[theme=pojoaque] .hljs-type,[theme=pojoaque] .hljs-variable{color:#b58900}[theme=pojoaque] .hljs-attribute{color:#b89859}[theme=pojoaque] .hljs-bullet,[theme=pojoaque] .hljs-link,[theme=pojoaque] .hljs-meta,[theme=pojoaque] .hljs-subst,[theme=pojoaque] .hljs-symbol{color:#cb4b16}[theme=pojoaque] .hljs-deletion{color:#dc322f}[theme=pojoaque] .hljs-selector-class,[theme=pojoaque] .hljs-selector-id{color:#d3a60c}[theme=pojoaque] .hljs-formula{background:#073642}[theme=pojoaque] .hljs-emphasis{font-style:italic}[theme=pojoaque] .hljs-strong{font-weight:700}[theme=purebasic] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=purebasic] code.hljs{padding:3px 5px}[theme=purebasic] .hljs{background:#ffffdf}[theme=purebasic] .hljs,[theme=purebasic] .hljs-attr,[theme=purebasic] .hljs-function,[theme=purebasic] .hljs-name,[theme=purebasic] .hljs-number,[theme=purebasic] .hljs-params,[theme=purebasic] .hljs-subst,[theme=purebasic] .hljs-type{color:#000}[theme=purebasic] .hljs-addition,[theme=purebasic] .hljs-comment,[theme=purebasic] .hljs-regexp,[theme=purebasic] .hljs-section,[theme=purebasic] .hljs-selector-pseudo{color:#0aa}[theme=purebasic] .hljs-built_in,[theme=purebasic] .hljs-class,[theme=purebasic] .hljs-keyword,[theme=purebasic] .hljs-meta .hljs-keyword,[theme=purebasic] .hljs-selector-class{color:#066;font-weight:700}[theme=purebasic] .hljs-code,[theme=purebasic] .hljs-tag,[theme=purebasic] .hljs-title,[theme=purebasic] .hljs-variable{color:#066}[theme=purebasic] .hljs-selector-attr,[theme=purebasic] .hljs-string{color:#0080ff}[theme=purebasic] .hljs-attribute,[theme=purebasic] .hljs-deletion,[theme=purebasic] .hljs-link,[theme=purebasic] .hljs-symbol{color:#924b72}[theme=purebasic] .hljs-literal,[theme=purebasic] .hljs-meta,[theme=purebasic] .hljs-selector-id{color:#924b72;font-weight:700}[theme=purebasic] .hljs-name,[theme=purebasic] .hljs-strong{font-weight:700}[theme=purebasic] .hljs-emphasis{font-style:italic}[theme=qtcreator-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=qtcreator-dark] code.hljs{padding:3px 5px}[theme=qtcreator-dark] .hljs{color:#aaa;background:#000}[theme=qtcreator-dark] .hljs-emphasis,[theme=qtcreator-dark] .hljs-strong{color:#a8a8a2}[theme=qtcreator-dark] .hljs-bullet,[theme=qtcreator-dark] .hljs-literal,[theme=qtcreator-dark] .hljs-number,[theme=qtcreator-dark] .hljs-quote,[theme=qtcreator-dark] .hljs-regexp{color:#f5f}[theme=qtcreator-dark] .hljs-code .hljs-selector-class{color:#aaf}[theme=qtcreator-dark] .hljs-emphasis,[theme=qtcreator-dark] .hljs-stronge,[theme=qtcreator-dark] .hljs-type{font-style:italic}[theme=qtcreator-dark] .hljs-function,[theme=qtcreator-dark] .hljs-keyword,[theme=qtcreator-dark] .hljs-name,[theme=qtcreator-dark] .hljs-section,[theme=qtcreator-dark] .hljs-selector-tag,[theme=qtcreator-dark] .hljs-symbol{color:#ff5}[theme=qtcreator-dark] .hljs-subst,[theme=qtcreator-dark] .hljs-tag,[theme=qtcreator-dark] .hljs-title{color:#aaa}[theme=qtcreator-dark] .hljs-attribute{color:#f55}[theme=qtcreator-dark] .hljs-class .hljs-title,[theme=qtcreator-dark] .hljs-params,[theme=qtcreator-dark] .hljs-title.class_,[theme=qtcreator-dark] .hljs-variable{color:#88f}[theme=qtcreator-dark] .hljs-addition,[theme=qtcreator-dark] .hljs-built_in,[theme=qtcreator-dark] .hljs-link,[theme=qtcreator-dark] .hljs-selector-attr,[theme=qtcreator-dark] .hljs-selector-id,[theme=qtcreator-dark] .hljs-selector-pseudo,[theme=qtcreator-dark] .hljs-string,[theme=qtcreator-dark] .hljs-template-tag,[theme=qtcreator-dark] .hljs-template-variable,[theme=qtcreator-dark] .hljs-type{color:#f5f}[theme=qtcreator-dark] .hljs-comment,[theme=qtcreator-dark] .hljs-deletion,[theme=qtcreator-dark] .hljs-meta{color:#5ff}[theme=qtcreator-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=qtcreator-light] code.hljs{padding:3px 5px}[theme=qtcreator-light] .hljs{color:#000;background:#fff}[theme=qtcreator-light] .hljs-emphasis,[theme=qtcreator-light] .hljs-strong{color:#000}[theme=qtcreator-light] .hljs-bullet,[theme=qtcreator-light] .hljs-literal,[theme=qtcreator-light] .hljs-number,[theme=qtcreator-light] .hljs-quote,[theme=qtcreator-light] .hljs-regexp{color:navy}[theme=qtcreator-light] .hljs-code .hljs-selector-class{color:purple}[theme=qtcreator-light] .hljs-emphasis,[theme=qtcreator-light] .hljs-stronge,[theme=qtcreator-light] .hljs-type{font-style:italic}[theme=qtcreator-light] .hljs-function,[theme=qtcreator-light] .hljs-keyword,[theme=qtcreator-light] .hljs-name,[theme=qtcreator-light] .hljs-section,[theme=qtcreator-light] .hljs-selector-tag,[theme=qtcreator-light] .hljs-symbol{color:olive}[theme=qtcreator-light] .hljs-subst,[theme=qtcreator-light] .hljs-tag,[theme=qtcreator-light] .hljs-title{color:#000}[theme=qtcreator-light] .hljs-attribute{color:maroon}[theme=qtcreator-light] .hljs-class .hljs-title,[theme=qtcreator-light] .hljs-params,[theme=qtcreator-light] .hljs-title.class_,[theme=qtcreator-light] .hljs-variable{color:#0055af}[theme=qtcreator-light] .hljs-addition,[theme=qtcreator-light] .hljs-built_in,[theme=qtcreator-light] .hljs-comment,[theme=qtcreator-light] .hljs-deletion,[theme=qtcreator-light] .hljs-link,[theme=qtcreator-light] .hljs-meta,[theme=qtcreator-light] .hljs-selector-attr,[theme=qtcreator-light] .hljs-selector-id,[theme=qtcreator-light] .hljs-selector-pseudo,[theme=qtcreator-light] .hljs-string,[theme=qtcreator-light] .hljs-template-tag,[theme=qtcreator-light] .hljs-template-variable,[theme=qtcreator-light] .hljs-type{color:green}[theme=rainbow] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=rainbow] code.hljs{padding:3px 5px}[theme=rainbow] .hljs{background:#474949;color:#d1d9e1}[theme=rainbow] .hljs-comment,[theme=rainbow] .hljs-quote{color:#969896;font-style:italic}[theme=rainbow] .hljs-addition,[theme=rainbow] .hljs-keyword,[theme=rainbow] .hljs-literal,[theme=rainbow] .hljs-selector-tag,[theme=rainbow] .hljs-type{color:#c9c}[theme=rainbow] .hljs-number,[theme=rainbow] .hljs-selector-attr,[theme=rainbow] .hljs-selector-pseudo{color:#f99157}[theme=rainbow] .hljs-doctag,[theme=rainbow] .hljs-regexp,[theme=rainbow] .hljs-string{color:#8abeb7}[theme=rainbow] .hljs-built_in,[theme=rainbow] .hljs-name,[theme=rainbow] .hljs-section,[theme=rainbow] .hljs-title{color:#b5bd68}[theme=rainbow] .hljs-class .hljs-title,[theme=rainbow] .hljs-selector-id,[theme=rainbow] .hljs-template-variable,[theme=rainbow] .hljs-title.class_,[theme=rainbow] .hljs-variable{color:#fc6}[theme=rainbow] .hljs-name,[theme=rainbow] .hljs-section,[theme=rainbow] .hljs-strong{font-weight:700}[theme=rainbow] .hljs-bullet,[theme=rainbow] .hljs-link,[theme=rainbow] .hljs-meta,[theme=rainbow] .hljs-subst,[theme=rainbow] .hljs-symbol{color:#f99157}[theme=rainbow] .hljs-deletion{color:#dc322f}[theme=rainbow] .hljs-formula{background:#eee8d5}[theme=rainbow] .hljs-attr,[theme=rainbow] .hljs-attribute{color:#81a2be}[theme=rainbow] .hljs-emphasis{font-style:italic}[theme=routeros] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=routeros] code.hljs{padding:3px 5px}[theme=routeros] .hljs{color:#444;background:#f0f0f0}[theme=routeros] .hljs-subst{color:#444}[theme=routeros] .hljs-comment{color:#888}[theme=routeros] .hljs-doctag,[theme=routeros] .hljs-keyword,[theme=routeros] .hljs-meta .hljs-keyword,[theme=routeros] .hljs-name,[theme=routeros] .hljs-selector-tag{font-weight:700}[theme=routeros] .hljs-attribute{color:#0e9a00}[theme=routeros] .hljs-function{color:#99069a}[theme=routeros] .hljs-deletion,[theme=routeros] .hljs-number,[theme=routeros] .hljs-quote,[theme=routeros] .hljs-selector-class,[theme=routeros] .hljs-selector-id,[theme=routeros] .hljs-string,[theme=routeros] .hljs-template-tag,[theme=routeros] .hljs-type{color:#800}[theme=routeros] .hljs-section,[theme=routeros] .hljs-title{color:#800;font-weight:700}[theme=routeros] .hljs-link,[theme=routeros] .hljs-regexp,[theme=routeros] .hljs-selector-attr,[theme=routeros] .hljs-selector-pseudo,[theme=routeros] .hljs-symbol,[theme=routeros] .hljs-template-variable,[theme=routeros] .hljs-variable{color:#bc6060}[theme=routeros] .hljs-literal{color:#78a960}[theme=routeros] .hljs-addition,[theme=routeros] .hljs-built_in,[theme=routeros] .hljs-bullet,[theme=routeros] .hljs-code{color:#0c9a9a}[theme=routeros] .hljs-meta{color:#1f7199}[theme=routeros] .hljs-meta .hljs-string{color:#4d99bf}[theme=routeros] .hljs-emphasis{font-style:italic}[theme=routeros] .hljs-strong{font-weight:700}[theme=school-book] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=school-book] code.hljs{padding:3px 5px}[theme=school-book] .hljs{color:#3e5915;background:#f6f5b2}[theme=school-book] .hljs-keyword,[theme=school-book] .hljs-literal,[theme=school-book] .hljs-selector-tag{color:#059}[theme=school-book] .hljs-subst{color:#3e5915}[theme=school-book] .hljs-addition,[theme=school-book] .hljs-attribute,[theme=school-book] .hljs-built_in,[theme=school-book] .hljs-bullet,[theme=school-book] .hljs-link,[theme=school-book] .hljs-section,[theme=school-book] .hljs-string,[theme=school-book] .hljs-symbol,[theme=school-book] .hljs-template-tag,[theme=school-book] .hljs-template-variable,[theme=school-book] .hljs-title,[theme=school-book] .hljs-type,[theme=school-book] .hljs-variable{color:#2c009f}[theme=school-book] .hljs-comment,[theme=school-book] .hljs-deletion,[theme=school-book] .hljs-meta,[theme=school-book] .hljs-quote{color:#e60415}[theme=school-book] .hljs-doctag,[theme=school-book] .hljs-keyword,[theme=school-book] .hljs-literal,[theme=school-book] .hljs-name,[theme=school-book] .hljs-section,[theme=school-book] .hljs-selector-id,[theme=school-book] .hljs-selector-tag,[theme=school-book] .hljs-strong,[theme=school-book] .hljs-title,[theme=school-book] .hljs-type{font-weight:700}[theme=school-book] .hljs-emphasis{font-style:italic}[theme=shades-of-purple] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=shades-of-purple] code.hljs{padding:3px 5px}[theme=shades-of-purple] .hljs{background:#2d2b57;color:#e3dfff;font-weight:400}[theme=shades-of-purple] .hljs-subst{color:#e3dfff}[theme=shades-of-purple] .hljs-title{color:#fad000;font-weight:400}[theme=shades-of-purple] .hljs-name{color:#a1feff}[theme=shades-of-purple] .hljs-tag{color:#fff}[theme=shades-of-purple] .hljs-attr{color:#f8d000;font-style:italic}[theme=shades-of-purple] .hljs-built_in,[theme=shades-of-purple] .hljs-keyword,[theme=shades-of-purple] .hljs-section,[theme=shades-of-purple] .hljs-selector-tag{color:#fb9e00}[theme=shades-of-purple] .hljs-addition,[theme=shades-of-purple] .hljs-attribute,[theme=shades-of-purple] .hljs-bullet,[theme=shades-of-purple] .hljs-code,[theme=shades-of-purple] .hljs-deletion,[theme=shades-of-purple] .hljs-quote,[theme=shades-of-purple] .hljs-regexp,[theme=shades-of-purple] .hljs-selector-attr,[theme=shades-of-purple] .hljs-selector-class,[theme=shades-of-purple] .hljs-selector-pseudo,[theme=shades-of-purple] .hljs-string,[theme=shades-of-purple] .hljs-symbol,[theme=shades-of-purple] .hljs-template-tag{color:#4cd213}[theme=shades-of-purple] .hljs-meta,[theme=shades-of-purple] .hljs-meta .hljs-string{color:#fb9e00}[theme=shades-of-purple] .hljs-comment{color:#ac65ff}[theme=shades-of-purple] .hljs-keyword,[theme=shades-of-purple] .hljs-literal,[theme=shades-of-purple] .hljs-name,[theme=shades-of-purple] .hljs-selector-tag,[theme=shades-of-purple] .hljs-strong{font-weight:400}[theme=shades-of-purple] .hljs-literal,[theme=shades-of-purple] .hljs-number{color:#fa658d}[theme=shades-of-purple] .hljs-emphasis{font-style:italic}[theme=shades-of-purple] .hljs-strong{font-weight:700}[theme=srcery] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=srcery] code.hljs{padding:3px 5px}[theme=srcery] .hljs{background:#1c1b19;color:#fce8c3}[theme=srcery] .hljs-literal,[theme=srcery] .hljs-quote,[theme=srcery] .hljs-subst{color:#fce8c3}[theme=srcery] .hljs-symbol,[theme=srcery] .hljs-type{color:#68a8e4}[theme=srcery] .hljs-deletion,[theme=srcery] .hljs-keyword{color:#ef2f27}[theme=srcery] .hljs-attribute,[theme=srcery] .hljs-function,[theme=srcery] .hljs-name,[theme=srcery] .hljs-section,[theme=srcery] .hljs-selector-attr,[theme=srcery] .hljs-selector-class,[theme=srcery] .hljs-selector-id,[theme=srcery] .hljs-selector-pseudo,[theme=srcery] .hljs-title{color:#fbb829}[theme=srcery] .hljs-class,[theme=srcery] .hljs-code,[theme=srcery] .hljs-property,[theme=srcery] .hljs-template-variable,[theme=srcery] .hljs-variable{color:#0aaeb3}[theme=srcery] .hljs-addition,[theme=srcery] .hljs-bullet,[theme=srcery] .hljs-regexp,[theme=srcery] .hljs-string{color:#98bc37}[theme=srcery] .hljs-built_in,[theme=srcery] .hljs-params{color:#ff5c8f}[theme=srcery] .hljs-selector-tag,[theme=srcery] .hljs-template-tag{color:#2c78bf}[theme=srcery] .hljs-comment,[theme=srcery] .hljs-link,[theme=srcery] .hljs-meta,[theme=srcery] .hljs-number{color:#918175}[theme=srcery] .hljs-emphasis{font-style:italic}[theme=srcery] .hljs-strong{font-weight:700}[theme=stackoverflow-dark]{ + /*! + Theme: StackOverflow Dark + Description: Dark theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less + */}[theme=stackoverflow-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=stackoverflow-dark] code.hljs{padding:3px 5px}[theme=stackoverflow-dark] .hljs{color:#fff;background:#1c1b1b}[theme=stackoverflow-dark] .hljs-subst{color:#fff}[theme=stackoverflow-dark] .hljs-comment{color:#999}[theme=stackoverflow-dark] .hljs-attr,[theme=stackoverflow-dark] .hljs-doctag,[theme=stackoverflow-dark] .hljs-keyword,[theme=stackoverflow-dark] .hljs-meta .hljs-keyword,[theme=stackoverflow-dark] .hljs-section,[theme=stackoverflow-dark] .hljs-selector-tag{color:#88aece}[theme=stackoverflow-dark] .hljs-attribute{color:#c59bc1}[theme=stackoverflow-dark] .hljs-name,[theme=stackoverflow-dark] .hljs-number,[theme=stackoverflow-dark] .hljs-quote,[theme=stackoverflow-dark] .hljs-selector-id,[theme=stackoverflow-dark] .hljs-template-tag,[theme=stackoverflow-dark] .hljs-type{color:#f08d49}[theme=stackoverflow-dark] .hljs-selector-class{color:#88aece}[theme=stackoverflow-dark] .hljs-link,[theme=stackoverflow-dark] .hljs-regexp,[theme=stackoverflow-dark] .hljs-selector-attr,[theme=stackoverflow-dark] .hljs-string,[theme=stackoverflow-dark] .hljs-symbol,[theme=stackoverflow-dark] .hljs-template-variable,[theme=stackoverflow-dark] .hljs-variable{color:#b5bd68}[theme=stackoverflow-dark] .hljs-meta,[theme=stackoverflow-dark] .hljs-selector-pseudo{color:#88aece}[theme=stackoverflow-dark] .hljs-built_in,[theme=stackoverflow-dark] .hljs-literal,[theme=stackoverflow-dark] .hljs-title{color:#f08d49}[theme=stackoverflow-dark] .hljs-bullet,[theme=stackoverflow-dark] .hljs-code{color:#ccc}[theme=stackoverflow-dark] .hljs-meta .hljs-string{color:#b5bd68}[theme=stackoverflow-dark] .hljs-deletion{color:#de7176}[theme=stackoverflow-dark] .hljs-addition{color:#76c490}[theme=stackoverflow-dark] .hljs-emphasis{font-style:italic}[theme=stackoverflow-dark] .hljs-strong{font-weight:700}[theme=stackoverflow-light]{ + /*! + Theme: StackOverflow Light + Description: Light theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less + */}[theme=stackoverflow-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=stackoverflow-light] code.hljs{padding:3px 5px}[theme=stackoverflow-light] .hljs{color:#2f3337;background:#f6f6f6}[theme=stackoverflow-light] .hljs-subst{color:#2f3337}[theme=stackoverflow-light] .hljs-comment{color:#656e77}[theme=stackoverflow-light] .hljs-attr,[theme=stackoverflow-light] .hljs-doctag,[theme=stackoverflow-light] .hljs-keyword,[theme=stackoverflow-light] .hljs-meta .hljs-keyword,[theme=stackoverflow-light] .hljs-section,[theme=stackoverflow-light] .hljs-selector-tag{color:#015692}[theme=stackoverflow-light] .hljs-attribute{color:#803378}[theme=stackoverflow-light] .hljs-name,[theme=stackoverflow-light] .hljs-number,[theme=stackoverflow-light] .hljs-quote,[theme=stackoverflow-light] .hljs-selector-id,[theme=stackoverflow-light] .hljs-template-tag,[theme=stackoverflow-light] .hljs-type{color:#b75501}[theme=stackoverflow-light] .hljs-selector-class{color:#015692}[theme=stackoverflow-light] .hljs-link,[theme=stackoverflow-light] .hljs-regexp,[theme=stackoverflow-light] .hljs-selector-attr,[theme=stackoverflow-light] .hljs-string,[theme=stackoverflow-light] .hljs-symbol,[theme=stackoverflow-light] .hljs-template-variable,[theme=stackoverflow-light] .hljs-variable{color:#54790d}[theme=stackoverflow-light] .hljs-meta,[theme=stackoverflow-light] .hljs-selector-pseudo{color:#015692}[theme=stackoverflow-light] .hljs-built_in,[theme=stackoverflow-light] .hljs-literal,[theme=stackoverflow-light] .hljs-title{color:#b75501}[theme=stackoverflow-light] .hljs-bullet,[theme=stackoverflow-light] .hljs-code{color:#535a60}[theme=stackoverflow-light] .hljs-meta .hljs-string{color:#54790d}[theme=stackoverflow-light] .hljs-deletion{color:#c02d2e}[theme=stackoverflow-light] .hljs-addition{color:#2f6f44}[theme=stackoverflow-light] .hljs-emphasis{font-style:italic}[theme=stackoverflow-light] .hljs-strong{font-weight:700}[theme=sunburst] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=sunburst] code.hljs{padding:3px 5px}[theme=sunburst] .hljs{background:#000;color:#f8f8f8}[theme=sunburst] .hljs-comment,[theme=sunburst] .hljs-quote{color:#aeaeae;font-style:italic}[theme=sunburst] .hljs-keyword,[theme=sunburst] .hljs-selector-tag,[theme=sunburst] .hljs-type{color:#e28964}[theme=sunburst] .hljs-string{color:#65b042}[theme=sunburst] .hljs-subst{color:#daefa3}[theme=sunburst] .hljs-link,[theme=sunburst] .hljs-regexp{color:#e9c062}[theme=sunburst] .hljs-name,[theme=sunburst] .hljs-section,[theme=sunburst] .hljs-tag,[theme=sunburst] .hljs-title{color:#89bdff}[theme=sunburst] .hljs-class .hljs-title,[theme=sunburst] .hljs-doctag,[theme=sunburst] .hljs-title.class_{text-decoration:underline}[theme=sunburst] .hljs-bullet,[theme=sunburst] .hljs-number,[theme=sunburst] .hljs-symbol{color:#3387cc}[theme=sunburst] .hljs-params,[theme=sunburst] .hljs-template-variable,[theme=sunburst] .hljs-variable{color:#3e87e3}[theme=sunburst] .hljs-attribute{color:#cda869}[theme=sunburst] .hljs-meta{color:#8996a8}[theme=sunburst] .hljs-formula{background-color:#0e2231;color:#f8f8f8;font-style:italic}[theme=sunburst] .hljs-addition{background-color:#253b22;color:#f8f8f8}[theme=sunburst] .hljs-deletion{background-color:#420e09;color:#f8f8f8}[theme=sunburst] .hljs-selector-class{color:#9b703f}[theme=sunburst] .hljs-selector-id{color:#8b98ab}[theme=sunburst] .hljs-emphasis{font-style:italic}[theme=sunburst] .hljs-strong{font-weight:700}[theme=tokyo-night-dark]{ + /*! + Theme: Tokyo-night-Dark + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 + */}[theme=tokyo-night-dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=tokyo-night-dark] code.hljs{padding:3px 5px}[theme=tokyo-night-dark] .hljs-comment,[theme=tokyo-night-dark] .hljs-meta{color:#565f89}[theme=tokyo-night-dark] .hljs-deletion,[theme=tokyo-night-dark] .hljs-doctag,[theme=tokyo-night-dark] .hljs-regexp,[theme=tokyo-night-dark] .hljs-selector-attr,[theme=tokyo-night-dark] .hljs-selector-class,[theme=tokyo-night-dark] .hljs-selector-id,[theme=tokyo-night-dark] .hljs-selector-pseudo,[theme=tokyo-night-dark] .hljs-tag,[theme=tokyo-night-dark] .hljs-template-tag,[theme=tokyo-night-dark] .hljs-variable.language_{color:#f7768e}[theme=tokyo-night-dark] .hljs-link,[theme=tokyo-night-dark] .hljs-literal,[theme=tokyo-night-dark] .hljs-number,[theme=tokyo-night-dark] .hljs-params,[theme=tokyo-night-dark] .hljs-template-variable,[theme=tokyo-night-dark] .hljs-type,[theme=tokyo-night-dark] .hljs-variable{color:#ff9e64}[theme=tokyo-night-dark] .hljs-attribute,[theme=tokyo-night-dark] .hljs-built_in{color:#e0af68}[theme=tokyo-night-dark] .hljs-keyword,[theme=tokyo-night-dark] .hljs-property,[theme=tokyo-night-dark] .hljs-subst,[theme=tokyo-night-dark] .hljs-title,[theme=tokyo-night-dark] .hljs-title.class_,[theme=tokyo-night-dark] .hljs-title.class_.inherited__,[theme=tokyo-night-dark] .hljs-title.function_{color:#7dcfff}[theme=tokyo-night-dark] .hljs-selector-tag{color:#73daca}[theme=tokyo-night-dark] .hljs-addition,[theme=tokyo-night-dark] .hljs-bullet,[theme=tokyo-night-dark] .hljs-quote,[theme=tokyo-night-dark] .hljs-string,[theme=tokyo-night-dark] .hljs-symbol{color:#9ece6a}[theme=tokyo-night-dark] .hljs-code,[theme=tokyo-night-dark] .hljs-formula,[theme=tokyo-night-dark] .hljs-section{color:#7aa2f7}[theme=tokyo-night-dark] .hljs-attr,[theme=tokyo-night-dark] .hljs-char.escape_,[theme=tokyo-night-dark] .hljs-keyword,[theme=tokyo-night-dark] .hljs-name,[theme=tokyo-night-dark] .hljs-operator{color:#bb9af7}[theme=tokyo-night-dark] .hljs-punctuation{color:#c0caf5}[theme=tokyo-night-dark] .hljs{background:#1a1b26;color:#9aa5ce}[theme=tokyo-night-dark] .hljs-emphasis{font-style:italic}[theme=tokyo-night-dark] .hljs-strong{font-weight:700}[theme=tokyo-night-light]{ + /*! + Theme: Tokyo-night-light + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 + */}[theme=tokyo-night-light] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=tokyo-night-light] code.hljs{padding:3px 5px}[theme=tokyo-night-light] .hljs-comment,[theme=tokyo-night-light] .hljs-meta{color:#9699a3}[theme=tokyo-night-light] .hljs-deletion,[theme=tokyo-night-light] .hljs-doctag,[theme=tokyo-night-light] .hljs-regexp,[theme=tokyo-night-light] .hljs-selector-attr,[theme=tokyo-night-light] .hljs-selector-class,[theme=tokyo-night-light] .hljs-selector-id,[theme=tokyo-night-light] .hljs-selector-pseudo,[theme=tokyo-night-light] .hljs-tag,[theme=tokyo-night-light] .hljs-template-tag,[theme=tokyo-night-light] .hljs-variable.language_{color:#8c4351}[theme=tokyo-night-light] .hljs-link,[theme=tokyo-night-light] .hljs-literal,[theme=tokyo-night-light] .hljs-number,[theme=tokyo-night-light] .hljs-params,[theme=tokyo-night-light] .hljs-template-variable,[theme=tokyo-night-light] .hljs-type,[theme=tokyo-night-light] .hljs-variable{color:#965027}[theme=tokyo-night-light] .hljs-attribute,[theme=tokyo-night-light] .hljs-built_in{color:#8f5e15}[theme=tokyo-night-light] .hljs-keyword,[theme=tokyo-night-light] .hljs-property,[theme=tokyo-night-light] .hljs-subst,[theme=tokyo-night-light] .hljs-title,[theme=tokyo-night-light] .hljs-title.class_,[theme=tokyo-night-light] .hljs-title.class_.inherited__,[theme=tokyo-night-light] .hljs-title.function_{color:#0f4b6e}[theme=tokyo-night-light] .hljs-selector-tag{color:#33635c}[theme=tokyo-night-light] .hljs-addition,[theme=tokyo-night-light] .hljs-bullet,[theme=tokyo-night-light] .hljs-quote,[theme=tokyo-night-light] .hljs-string,[theme=tokyo-night-light] .hljs-symbol{color:#485e30}[theme=tokyo-night-light] .hljs-code,[theme=tokyo-night-light] .hljs-formula,[theme=tokyo-night-light] .hljs-section{color:#34548a}[theme=tokyo-night-light] .hljs-attr,[theme=tokyo-night-light] .hljs-char.escape_,[theme=tokyo-night-light] .hljs-keyword,[theme=tokyo-night-light] .hljs-name,[theme=tokyo-night-light] .hljs-operator{color:#5a4a78}[theme=tokyo-night-light] .hljs-punctuation{color:#343b58}[theme=tokyo-night-light] .hljs{background:#d5d6db;color:#565a6e}[theme=tokyo-night-light] .hljs-emphasis{font-style:italic}[theme=tokyo-night-light] .hljs-strong{font-weight:700}[theme=tomorrow-night-blue] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=tomorrow-night-blue] code.hljs{padding:3px 5px}[theme=tomorrow-night-blue] .hljs-comment,[theme=tomorrow-night-blue] .hljs-quote{color:#7285b7}[theme=tomorrow-night-blue] .hljs-deletion,[theme=tomorrow-night-blue] .hljs-name,[theme=tomorrow-night-blue] .hljs-regexp,[theme=tomorrow-night-blue] .hljs-selector-class,[theme=tomorrow-night-blue] .hljs-selector-id,[theme=tomorrow-night-blue] .hljs-tag,[theme=tomorrow-night-blue] .hljs-template-variable,[theme=tomorrow-night-blue] .hljs-variable{color:#ff9da4}[theme=tomorrow-night-blue] .hljs-built_in,[theme=tomorrow-night-blue] .hljs-link,[theme=tomorrow-night-blue] .hljs-literal,[theme=tomorrow-night-blue] .hljs-meta,[theme=tomorrow-night-blue] .hljs-number,[theme=tomorrow-night-blue] .hljs-params,[theme=tomorrow-night-blue] .hljs-type{color:#ffc58f}[theme=tomorrow-night-blue] .hljs-attribute{color:#ffeead}[theme=tomorrow-night-blue] .hljs-addition,[theme=tomorrow-night-blue] .hljs-bullet,[theme=tomorrow-night-blue] .hljs-string,[theme=tomorrow-night-blue] .hljs-symbol{color:#d1f1a9}[theme=tomorrow-night-blue] .hljs-section,[theme=tomorrow-night-blue] .hljs-title{color:#bbdaff}[theme=tomorrow-night-blue] .hljs-keyword,[theme=tomorrow-night-blue] .hljs-selector-tag{color:#ebbbff}[theme=tomorrow-night-blue] .hljs{background:#002451;color:#fff}[theme=tomorrow-night-blue] .hljs-emphasis{font-style:italic}[theme=tomorrow-night-blue] .hljs-strong{font-weight:700}[theme=tomorrow-night-bright] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=tomorrow-night-bright] code.hljs{padding:3px 5px}[theme=tomorrow-night-bright] .hljs-comment,[theme=tomorrow-night-bright] .hljs-quote{color:#969896}[theme=tomorrow-night-bright] .hljs-deletion,[theme=tomorrow-night-bright] .hljs-name,[theme=tomorrow-night-bright] .hljs-regexp,[theme=tomorrow-night-bright] .hljs-selector-class,[theme=tomorrow-night-bright] .hljs-selector-id,[theme=tomorrow-night-bright] .hljs-tag,[theme=tomorrow-night-bright] .hljs-template-variable,[theme=tomorrow-night-bright] .hljs-variable{color:#d54e53}[theme=tomorrow-night-bright] .hljs-built_in,[theme=tomorrow-night-bright] .hljs-link,[theme=tomorrow-night-bright] .hljs-literal,[theme=tomorrow-night-bright] .hljs-meta,[theme=tomorrow-night-bright] .hljs-number,[theme=tomorrow-night-bright] .hljs-params,[theme=tomorrow-night-bright] .hljs-type{color:#e78c45}[theme=tomorrow-night-bright] .hljs-attribute{color:#e7c547}[theme=tomorrow-night-bright] .hljs-addition,[theme=tomorrow-night-bright] .hljs-bullet,[theme=tomorrow-night-bright] .hljs-string,[theme=tomorrow-night-bright] .hljs-symbol{color:#b9ca4a}[theme=tomorrow-night-bright] .hljs-section,[theme=tomorrow-night-bright] .hljs-title{color:#7aa6da}[theme=tomorrow-night-bright] .hljs-keyword,[theme=tomorrow-night-bright] .hljs-selector-tag{color:#c397d8}[theme=tomorrow-night-bright] .hljs{background:#000;color:#eaeaea}[theme=tomorrow-night-bright] .hljs-emphasis{font-style:italic}[theme=tomorrow-night-bright] .hljs-strong{font-weight:700}[theme=vs] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=vs] code.hljs{padding:3px 5px}[theme=vs] .hljs{background:#fff;color:#000}[theme=vs] .hljs-comment,[theme=vs] .hljs-quote,[theme=vs] .hljs-variable{color:green}[theme=vs] .hljs-built_in,[theme=vs] .hljs-keyword,[theme=vs] .hljs-name,[theme=vs] .hljs-selector-tag,[theme=vs] .hljs-tag{color:#00f}[theme=vs] .hljs-addition,[theme=vs] .hljs-attribute,[theme=vs] .hljs-literal,[theme=vs] .hljs-section,[theme=vs] .hljs-string,[theme=vs] .hljs-template-tag,[theme=vs] .hljs-template-variable,[theme=vs] .hljs-title,[theme=vs] .hljs-type{color:#a31515}[theme=vs] .hljs-deletion,[theme=vs] .hljs-meta,[theme=vs] .hljs-selector-attr,[theme=vs] .hljs-selector-pseudo{color:#2b91af}[theme=vs] .hljs-doctag{color:grey}[theme=vs] .hljs-attr{color:red}[theme=vs] .hljs-bullet,[theme=vs] .hljs-link,[theme=vs] .hljs-symbol{color:#00b0e8}[theme=vs] .hljs-emphasis{font-style:italic}[theme=vs] .hljs-strong{font-weight:700}[theme=vs2015] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=vs2015] code.hljs{padding:3px 5px}[theme=vs2015] .hljs{background:#1e1e1e;color:#dcdcdc}[theme=vs2015] .hljs-keyword,[theme=vs2015] .hljs-literal,[theme=vs2015] .hljs-name,[theme=vs2015] .hljs-symbol{color:#569cd6}[theme=vs2015] .hljs-link{color:#569cd6;text-decoration:underline}[theme=vs2015] .hljs-built_in,[theme=vs2015] .hljs-type{color:#4ec9b0}[theme=vs2015] .hljs-class,[theme=vs2015] .hljs-number{color:#b8d7a3}[theme=vs2015] .hljs-meta .hljs-string,[theme=vs2015] .hljs-string{color:#d69d85}[theme=vs2015] .hljs-regexp,[theme=vs2015] .hljs-template-tag{color:#9a5334}[theme=vs2015] .hljs-formula,[theme=vs2015] .hljs-function,[theme=vs2015] .hljs-params,[theme=vs2015] .hljs-subst,[theme=vs2015] .hljs-title{color:#dcdcdc}[theme=vs2015] .hljs-comment,[theme=vs2015] .hljs-quote{color:#57a64a;font-style:italic}[theme=vs2015] .hljs-doctag{color:#608b4e}[theme=vs2015] .hljs-meta,[theme=vs2015] .hljs-meta .hljs-keyword,[theme=vs2015] .hljs-tag{color:#9b9b9b}[theme=vs2015] .hljs-template-variable,[theme=vs2015] .hljs-variable{color:#bd63c5}[theme=vs2015] .hljs-attr,[theme=vs2015] .hljs-attribute{color:#9cdcfe}[theme=vs2015] .hljs-section{color:gold}[theme=vs2015] .hljs-emphasis{font-style:italic}[theme=vs2015] .hljs-strong{font-weight:700}[theme=vs2015] .hljs-bullet,[theme=vs2015] .hljs-selector-attr,[theme=vs2015] .hljs-selector-class,[theme=vs2015] .hljs-selector-id,[theme=vs2015] .hljs-selector-pseudo,[theme=vs2015] .hljs-selector-tag{color:#d7ba7d}[theme=vs2015] .hljs-addition{background-color:#144212;display:inline-block;width:100%}[theme=vs2015] .hljs-deletion{background-color:#600;display:inline-block;width:100%}[theme=xcode] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=xcode] code.hljs{padding:3px 5px}[theme=xcode] .hljs{background:#fff;color:#000}[theme=xcode] .xml .hljs-meta{color:silver}[theme=xcode] .hljs-comment,[theme=xcode] .hljs-quote{color:#007400}[theme=xcode] .hljs-attribute,[theme=xcode] .hljs-keyword,[theme=xcode] .hljs-literal,[theme=xcode] .hljs-name,[theme=xcode] .hljs-selector-tag,[theme=xcode] .hljs-tag{color:#aa0d91}[theme=xcode] .hljs-template-variable,[theme=xcode] .hljs-variable{color:#3f6e74}[theme=xcode] .hljs-code,[theme=xcode] .hljs-meta .hljs-string,[theme=xcode] .hljs-string{color:#c41a16}[theme=xcode] .hljs-link,[theme=xcode] .hljs-regexp{color:#0e0eff}[theme=xcode] .hljs-bullet,[theme=xcode] .hljs-number,[theme=xcode] .hljs-symbol,[theme=xcode] .hljs-title{color:#1c00cf}[theme=xcode] .hljs-meta,[theme=xcode] .hljs-section{color:#643820}[theme=xcode] .hljs-built_in,[theme=xcode] .hljs-class .hljs-title,[theme=xcode] .hljs-params,[theme=xcode] .hljs-title.class_,[theme=xcode] .hljs-type{color:#5c2699}[theme=xcode] .hljs-attr{color:#836c28}[theme=xcode] .hljs-subst{color:#000}[theme=xcode] .hljs-formula{background-color:#eee;font-style:italic}[theme=xcode] .hljs-addition{background-color:#baeeba}[theme=xcode] .hljs-deletion{background-color:#ffc8bd}[theme=xcode] .hljs-selector-class,[theme=xcode] .hljs-selector-id{color:#9b703f}[theme=xcode] .hljs-doctag,[theme=xcode] .hljs-strong{font-weight:700}[theme=xcode] .hljs-emphasis{font-style:italic}[theme=xt256] pre code.hljs{display:block;overflow-x:auto;padding:1em}[theme=xt256] code.hljs{padding:3px 5px}[theme=xt256] .hljs{color:#eaeaea;background:#000}[theme=xt256] .hljs-subst{color:#eaeaea}[theme=xt256] .hljs-emphasis{font-style:italic}[theme=xt256] .hljs-strong{font-weight:700}[theme=xt256] .hljs-type{color:#eaeaea}[theme=xt256] .hljs-params{color:#da0000}[theme=xt256] .hljs-literal,[theme=xt256] .hljs-name,[theme=xt256] .hljs-number{color:red;font-weight:bolder}[theme=xt256] .hljs-comment{color:#969896}[theme=xt256] .hljs-quote,[theme=xt256] .hljs-selector-id{color:#0ff}[theme=xt256] .hljs-template-variable,[theme=xt256] .hljs-title,[theme=xt256] .hljs-variable{color:#0ff;font-weight:700}[theme=xt256] .hljs-keyword,[theme=xt256] .hljs-selector-class,[theme=xt256] .hljs-symbol{color:#fff000}[theme=xt256] .hljs-bullet,[theme=xt256] .hljs-string{color:#0f0}[theme=xt256] .hljs-section,[theme=xt256] .hljs-tag{color:#000fff}[theme=xt256] .hljs-selector-tag{color:#000fff;font-weight:700}[theme=xt256] .hljs-attribute,[theme=xt256] .hljs-built_in,[theme=xt256] .hljs-link,[theme=xt256] .hljs-regexp{color:#f0f}[theme=xt256] .hljs-meta{color:#fff;font-weight:bolder}.code-editor{position:relative}.code-editor>div{width:100%;height:100%}.code-editor .header{box-sizing:border-box;position:relative;z-index:1;height:34px}.code-editor .header>.dropdown{position:absolute;top:12px;left:18px}.code-editor .header>.copy-code{position:absolute;top:10px;right:12px}.code-editor .code-area{position:relative;z-index:0;text-align:left;overflow:hidden}.code-editor .code-area>pre>code,.code-editor .code-area>textarea,.code-editor .line-nums>div{font-family:Consolas,Monaco,monospace;line-height:1.5}.code-editor .code-area>textarea:focus-visible,.code-editor .code-area>textarea:hover{outline:none}.code-editor .code-area>textarea{position:absolute;z-index:1;top:0;left:0;overflow-y:hidden;box-sizing:border-box;caret-color:#7f7f7f;color:transparent;white-space:pre;word-wrap:normal;border:0;width:100%;height:100%;background:none;resize:none}.code-editor .code-area>pre{box-sizing:border-box;position:relative;z-index:0;overflow:hidden;font-size:0;margin:0}.code-editor .code-area>pre>code{background:none;display:block;position:relative;overflow-x:visible!important;border-radius:0;box-sizing:border-box;margin:0}.code-editor.wrap .code-area>pre>code,.code-editor.wrap .code-area>textarea{white-space:pre-wrap;word-wrap:break-word}.code-editor.hide-header.scroll .code-area{height:100%}.code-editor.scroll .code-area{height:calc(100% - 34px)}.code-editor.scroll .code-area>textarea{overflow:auto}.code-editor.scroll .code-area>pre{width:100%;height:100%;overflow:hidden}.code-editor .list{-webkit-user-select:none;-moz-user-select:none;user-select:none;height:100%;font-family:sans-serif}.code-editor .list>.lang-list{border-radius:5px;box-sizing:border-box;overflow:auto;font-size:13px;padding:0;margin:0;list-style:none;text-align:left}.code-editor .list>.lang-list>li{font-size:13px;transition:background .16s ease,color .16s ease;box-sizing:border-box;padding:0 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:30px}.code-editor .list>.lang-list>li:first-child{padding-top:5px}.code-editor .list>.lang-list>li:last-child{padding-bottom:5px}.code-editor .list>.lang-list>li:hover{background:hsla(0,0%,63%,.4)}.code-editor .line-nums{min-width:36px;text-align:right;box-sizing:border-box;position:absolute;left:0;padding-right:8px;padding-left:8px;opacity:.3}.code-editor .line-nums:after{content:"";position:absolute;width:100%;height:100%;top:0;left:0;border-right:1px solid currentColor;opacity:.5}.code-editor .header.border:after{content:"";position:absolute;width:100%;height:1px;bottom:0;left:0;background:currentColor;opacity:.15}.vti__flag.be{width:18px}.vti__flag.ch{width:15px}.vti__flag.mc{width:19px}.vti__flag.ne{width:18px}.vti__flag.np{width:13px}.vti__flag.va{width:15px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.vti__flag{background-size:5630px 15px}}.vti__flag.ac{height:10px;background-position:0 0}.vti__flag.ad{height:14px;background-position:-22px 0}.vti__flag.ae{height:10px;background-position:-44px 0}.vti__flag.af{height:14px;background-position:-66px 0}.vti__flag.ag{height:14px;background-position:-88px 0}.vti__flag.ai{height:10px;background-position:-110px 0}.vti__flag.al{height:15px;background-position:-132px 0}.vti__flag.am{height:10px;background-position:-154px 0}.vti__flag.ao{height:14px;background-position:-176px 0}.vti__flag.aq{height:14px;background-position:-198px 0}.vti__flag.ar{height:13px;background-position:-220px 0}.vti__flag.as{height:10px;background-position:-242px 0}.vti__flag.at{height:14px;background-position:-264px 0}.vti__flag.au{height:10px;background-position:-286px 0}.vti__flag.aw{height:14px;background-position:-308px 0}.vti__flag.ax{height:13px;background-position:-330px 0}.vti__flag.az{height:10px;background-position:-352px 0}.vti__flag.ba{height:10px;background-position:-374px 0}.vti__flag.bb{height:14px;background-position:-396px 0}.vti__flag.bd{height:12px;background-position:-418px 0}.vti__flag.be{height:15px;background-position:-440px 0}.vti__flag.bf{height:14px;background-position:-460px 0}.vti__flag.bg{height:12px;background-position:-482px 0}.vti__flag.bh{height:12px;background-position:-504px 0}.vti__flag.bi{height:12px;background-position:-526px 0}.vti__flag.bj{height:14px;background-position:-548px 0}.vti__flag.bl{height:14px;background-position:-570px 0}.vti__flag.bm{height:10px;background-position:-592px 0}.vti__flag.bn{height:10px;background-position:-614px 0}.vti__flag.bo{height:14px;background-position:-636px 0}.vti__flag.bq{height:14px;background-position:-658px 0}.vti__flag.br{height:14px;background-position:-680px 0}.vti__flag.bs{height:10px;background-position:-702px 0}.vti__flag.bt{height:14px;background-position:-724px 0}.vti__flag.bv{height:15px;background-position:-746px 0}.vti__flag.bw{height:14px;background-position:-768px 0}.vti__flag.by{height:10px;background-position:-790px 0}.vti__flag.bz{height:14px;background-position:-812px 0}.vti__flag.ca{height:10px;background-position:-834px 0}.vti__flag.cc{height:10px;background-position:-856px 0}.vti__flag.cd{height:15px;background-position:-878px 0}.vti__flag.cf{height:14px;background-position:-900px 0}.vti__flag.cg{height:14px;background-position:-922px 0}.vti__flag.ch{height:15px;background-position:-944px 0}.vti__flag.ci{height:14px;background-position:-961px 0}.vti__flag.ck{height:10px;background-position:-983px 0}.vti__flag.cl{height:14px;background-position:-1005px 0}.vti__flag.cm{height:14px;background-position:-1027px 0}.vti__flag.cn{height:14px;background-position:-1049px 0}.vti__flag.co{height:14px;background-position:-1071px 0}.vti__flag.cp{height:14px;background-position:-1093px 0}.vti__flag.cr{height:12px;background-position:-1115px 0}.vti__flag.cu{height:10px;background-position:-1137px 0}.vti__flag.cv{height:12px;background-position:-1159px 0}.vti__flag.cw{height:14px;background-position:-1181px 0}.vti__flag.cx{height:10px;background-position:-1203px 0}.vti__flag.cy{height:14px;background-position:-1225px 0}.vti__flag.cz{height:14px;background-position:-1247px 0}.vti__flag.de{height:12px;background-position:-1269px 0}.vti__flag.dg{height:10px;background-position:-1291px 0}.vti__flag.dj{height:14px;background-position:-1313px 0}.vti__flag.dk{height:15px;background-position:-1335px 0}.vti__flag.dm{height:10px;background-position:-1357px 0}.vti__flag.do{height:13px;background-position:-1379px 0}.vti__flag.dz{height:14px;background-position:-1401px 0}.vti__flag.ea{height:14px;background-position:-1423px 0}.vti__flag.ec{height:14px;background-position:-1445px 0}.vti__flag.ee{height:13px;background-position:-1467px 0}.vti__flag.eg{height:14px;background-position:-1489px 0}.vti__flag.eh{height:10px;background-position:-1511px 0}.vti__flag.er{height:10px;background-position:-1533px 0}.vti__flag.es{height:14px;background-position:-1555px 0}.vti__flag.et{height:10px;background-position:-1577px 0}.vti__flag.eu{height:14px;background-position:-1599px 0}.vti__flag.fi{height:12px;background-position:-1621px 0}.vti__flag.fj{height:10px;background-position:-1643px 0}.vti__flag.fk{height:10px;background-position:-1665px 0}.vti__flag.fm{height:11px;background-position:-1687px 0}.vti__flag.fo{height:15px;background-position:-1709px 0}.vti__flag.fr{height:14px;background-position:-1731px 0}.vti__flag.ga{height:15px;background-position:-1753px 0}.vti__flag.gb{height:10px;background-position:-1775px 0}.vti__flag.gd{height:12px;background-position:-1797px 0}.vti__flag.ge{height:14px;background-position:-1819px 0}.vti__flag.gf{height:14px;background-position:-1841px 0}.vti__flag.gg{height:14px;background-position:-1863px 0}.vti__flag.gh{height:14px;background-position:-1885px 0}.vti__flag.gi{height:10px;background-position:-1907px 0}.vti__flag.gl{height:14px;background-position:-1929px 0}.vti__flag.gm{height:14px;background-position:-1951px 0}.vti__flag.gn{height:14px;background-position:-1973px 0}.vti__flag.gp{height:14px;background-position:-1995px 0}.vti__flag.gq{height:14px;background-position:-2017px 0}.vti__flag.gr{height:14px;background-position:-2039px 0}.vti__flag.gs{height:10px;background-position:-2061px 0}.vti__flag.gt{height:13px;background-position:-2083px 0}.vti__flag.gu{height:11px;background-position:-2105px 0}.vti__flag.gw{height:10px;background-position:-2127px 0}.vti__flag.gy{height:12px;background-position:-2149px 0}.vti__flag.hk{height:14px;background-position:-2171px 0}.vti__flag.hm{height:10px;background-position:-2193px 0}.vti__flag.hn{height:10px;background-position:-2215px 0}.vti__flag.hr{height:10px;background-position:-2237px 0}.vti__flag.ht{height:12px;background-position:-2259px 0}.vti__flag.hu{height:10px;background-position:-2281px 0}.vti__flag.ic{height:14px;background-position:-2303px 0}.vti__flag.id{height:14px;background-position:-2325px 0}.vti__flag.ie{height:10px;background-position:-2347px 0}.vti__flag.il{height:15px;background-position:-2369px 0}.vti__flag.im{height:10px;background-position:-2391px 0}.vti__flag.in{height:14px;background-position:-2413px 0}.vti__flag.io{height:10px;background-position:-2435px 0}.vti__flag.iq{height:14px;background-position:-2457px 0}.vti__flag.ir{height:12px;background-position:-2479px 0}.vti__flag.is{height:15px;background-position:-2501px 0}.vti__flag.it{height:14px;background-position:-2523px 0}.vti__flag.je{height:12px;background-position:-2545px 0}.vti__flag.jm{height:10px;background-position:-2567px 0}.vti__flag.jo{height:10px;background-position:-2589px 0}.vti__flag.jp{height:14px;background-position:-2611px 0}.vti__flag.ke{height:14px;background-position:-2633px 0}.vti__flag.kg{height:12px;background-position:-2655px 0}.vti__flag.kh{height:13px;background-position:-2677px 0}.vti__flag.ki{height:10px;background-position:-2699px 0}.vti__flag.km{height:12px;background-position:-2721px 0}.vti__flag.kn{height:14px;background-position:-2743px 0}.vti__flag.kp{height:10px;background-position:-2765px 0}.vti__flag.kr{height:14px;background-position:-2787px 0}.vti__flag.kw{height:10px;background-position:-2809px 0}.vti__flag.ky{height:10px;background-position:-2831px 0}.vti__flag.kz{height:10px;background-position:-2853px 0}.vti__flag.la{height:14px;background-position:-2875px 0}.vti__flag.lb{height:14px;background-position:-2897px 0}.vti__flag.lc{height:10px;background-position:-2919px 0}.vti__flag.li{height:12px;background-position:-2941px 0}.vti__flag.lk{height:10px;background-position:-2963px 0}.vti__flag.lr{height:11px;background-position:-2985px 0}.vti__flag.ls{height:14px;background-position:-3007px 0}.vti__flag.lt{height:12px;background-position:-3029px 0}.vti__flag.lu{height:12px;background-position:-3051px 0}.vti__flag.lv{height:10px;background-position:-3073px 0}.vti__flag.ly{height:10px;background-position:-3095px 0}.vti__flag.ma{height:14px;background-position:-3117px 0}.vti__flag.mc{height:15px;background-position:-3139px 0}.vti__flag.md{height:10px;background-position:-3160px 0}.vti__flag.me{height:10px;background-position:-3182px 0}.vti__flag.mf{height:14px;background-position:-3204px 0}.vti__flag.mg{height:14px;background-position:-3226px 0}.vti__flag.mh{height:11px;background-position:-3248px 0}.vti__flag.mk{height:10px;background-position:-3270px 0}.vti__flag.ml{height:14px;background-position:-3292px 0}.vti__flag.mm{height:14px;background-position:-3314px 0}.vti__flag.mn{height:10px;background-position:-3336px 0}.vti__flag.mo{height:14px;background-position:-3358px 0}.vti__flag.mp{height:10px;background-position:-3380px 0}.vti__flag.mq{height:14px;background-position:-3402px 0}.vti__flag.mr{height:14px;background-position:-3424px 0}.vti__flag.ms{height:10px;background-position:-3446px 0}.vti__flag.mt{height:14px;background-position:-3468px 0}.vti__flag.mu{height:14px;background-position:-3490px 0}.vti__flag.mv{height:14px;background-position:-3512px 0}.vti__flag.mw{height:14px;background-position:-3534px 0}.vti__flag.mx{height:12px;background-position:-3556px 0}.vti__flag.my{height:10px;background-position:-3578px 0}.vti__flag.mz{height:14px;background-position:-3600px 0}.vti__flag.na{height:14px;background-position:-3622px 0}.vti__flag.nc{height:10px;background-position:-3644px 0}.vti__flag.ne{height:15px;background-position:-3666px 0}.vti__flag.nf{height:10px;background-position:-3686px 0}.vti__flag.ng{height:10px;background-position:-3708px 0}.vti__flag.ni{height:12px;background-position:-3730px 0}.vti__flag.nl{height:14px;background-position:-3752px 0}.vti__flag.no{height:15px;background-position:-3774px 0}.vti__flag.np{height:15px;background-position:-3796px 0}.vti__flag.nr{height:10px;background-position:-3811px 0}.vti__flag.nu{height:10px;background-position:-3833px 0}.vti__flag.nz{height:10px;background-position:-3855px 0}.vti__flag.om{height:10px;background-position:-3877px 0}.vti__flag.pa{height:14px;background-position:-3899px 0}.vti__flag.pe{height:14px;background-position:-3921px 0}.vti__flag.pf{height:14px;background-position:-3943px 0}.vti__flag.pg{height:15px;background-position:-3965px 0}.vti__flag.ph{height:10px;background-position:-3987px 0}.vti__flag.pk{height:14px;background-position:-4009px 0}.vti__flag.pl{height:13px;background-position:-4031px 0}.vti__flag.pm{height:14px;background-position:-4053px 0}.vti__flag.pn{height:10px;background-position:-4075px 0}.vti__flag.pr{height:14px;background-position:-4097px 0}.vti__flag.ps{height:10px;background-position:-4119px 0}.vti__flag.pt{height:14px;background-position:-4141px 0}.vti__flag.pw{height:13px;background-position:-4163px 0}.vti__flag.py{height:11px;background-position:-4185px 0}.vti__flag.qa{height:8px;background-position:-4207px 0}.vti__flag.re{height:14px;background-position:-4229px 0}.vti__flag.ro{height:14px;background-position:-4251px 0}.vti__flag.rs{height:14px;background-position:-4273px 0}.vti__flag.ru{height:14px;background-position:-4295px 0}.vti__flag.rw{height:14px;background-position:-4317px 0}.vti__flag.sa{height:14px;background-position:-4339px 0}.vti__flag.sb{height:10px;background-position:-4361px 0}.vti__flag.sc{height:10px;background-position:-4383px 0}.vti__flag.sd{height:10px;background-position:-4405px 0}.vti__flag.se{height:13px;background-position:-4427px 0}.vti__flag.sg{height:14px;background-position:-4449px 0}.vti__flag.sh{height:10px;background-position:-4471px 0}.vti__flag.si{height:10px;background-position:-4493px 0}.vti__flag.sj{height:15px;background-position:-4515px 0}.vti__flag.sk{height:14px;background-position:-4537px 0}.vti__flag.sl{height:14px;background-position:-4559px 0}.vti__flag.sm{height:15px;background-position:-4581px 0}.vti__flag.sn{height:14px;background-position:-4603px 0}.vti__flag.so{height:14px;background-position:-4625px 0}.vti__flag.sr{height:14px;background-position:-4647px 0}.vti__flag.ss{height:10px;background-position:-4669px 0}.vti__flag.st{height:10px;background-position:-4691px 0}.vti__flag.sv{height:12px;background-position:-4713px 0}.vti__flag.sx{height:14px;background-position:-4735px 0}.vti__flag.sy{height:14px;background-position:-4757px 0}.vti__flag.sz{height:14px;background-position:-4779px 0}.vti__flag.ta{height:10px;background-position:-4801px 0}.vti__flag.tc{height:10px;background-position:-4823px 0}.vti__flag.td{height:14px;background-position:-4845px 0}.vti__flag.tf{height:14px;background-position:-4867px 0}.vti__flag.tg{height:13px;background-position:-4889px 0}.vti__flag.th{height:14px;background-position:-4911px 0}.vti__flag.tj{height:10px;background-position:-4933px 0}.vti__flag.tk{height:10px;background-position:-4955px 0}.vti__flag.tl{height:10px;background-position:-4977px 0}.vti__flag.tm{height:14px;background-position:-4999px 0}.vti__flag.tn{height:14px;background-position:-5021px 0}.vti__flag.to{height:10px;background-position:-5043px 0}.vti__flag.tr{height:14px;background-position:-5065px 0}.vti__flag.tt{height:12px;background-position:-5087px 0}.vti__flag.tv{height:10px;background-position:-5109px 0}.vti__flag.tw{height:14px;background-position:-5131px 0}.vti__flag.tz{height:14px;background-position:-5153px 0}.vti__flag.ua{height:14px;background-position:-5175px 0}.vti__flag.ug{height:14px;background-position:-5197px 0}.vti__flag.um{height:11px;background-position:-5219px 0}.vti__flag.us{height:11px;background-position:-5241px 0}.vti__flag.uy{height:14px;background-position:-5263px 0}.vti__flag.uz{height:10px;background-position:-5285px 0}.vti__flag.va{height:15px;background-position:-5307px 0}.vti__flag.vc{height:14px;background-position:-5324px 0}.vti__flag.ve{height:14px;background-position:-5346px 0}.vti__flag.vg{height:10px;background-position:-5368px 0}.vti__flag.vi{height:14px;background-position:-5390px 0}.vti__flag.vn{height:14px;background-position:-5412px 0}.vti__flag.vu{height:12px;background-position:-5434px 0}.vti__flag.wf{height:14px;background-position:-5456px 0}.vti__flag.ws{height:10px;background-position:-5478px 0}.vti__flag.xk{height:15px;background-position:-5500px 0}.vti__flag.ye{height:14px;background-position:-5522px 0}.vti__flag.yt{height:14px;background-position:-5544px 0}.vti__flag.za{height:14px;background-position:-5566px 0}.vti__flag.zm{height:14px;background-position:-5588px 0}.vti__flag.zw{height:10px;background-position:-5610px 0}.vti__flag{width:20px;height:15px;box-shadow:0 0 1px #888;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAFf4AAAAPCAMAAAAsJ+pWAAADAFBMVEUAAAB/U1dILHgLN5L////OECYAAAAAJH3tKDj90hXSDjT/AAABNpb/zQAAK34AI5XQFCvvKixCit7eKQ/+3wPCJy0BlUMBn0rQJToCd2DuGiPkHR52rtwgRYzUKx3pDS4AYTPGDDDjBxnCAQPpAA4DAowBbML6+voBKGXbAgcDUqYZigICeDUAaU3/1QDbEh7cIx8AHaXlZG7NCR8BMKQGMIQDakCvFCvaJRr98/GOosMAbTLosrgPrioANqvx9vZXc7MAccsCaKgDn18gtTkkSqUAI4ICot4BrspNYaBLrNf3eH775ORzq98ormartMzWER7zogbFDhufMzwBhlHfMzkRDAr83kgBeUEAgTwAmzoLRq/IND0GiTDCBSXdTSECgABYWVnsi5QHP4QBZQBjtOXz0tXkaBjl7PX+wwHDZnXIzuBIl9DcEjn/zyKtxeL5r7ABPxo5fc4ypjIgXDg6gzsAf/8BHJAFlWeMGjn3PjXQAgBzhrb6fAHk7ORZUoHvzBmq0bj96QNmzf/JsBkClsAVtDg2dR89csb5uBHwP0nM08nrjBgGUpbS4unVhpABHnr43xOqq6duel4ei0j5xcbKPljCwLjLqLSrlBFbl7FCCAg6Xrm+gpYmHkrngYFpweXroKfhwhICW7zUcX7vV2LhTwb9nJyHK1EhoEJldqA4WJqOgZUEAWXWJyn/UBGHm3UIKH1pJ15UroXcUVUFLpGwwA6LiEVPrFj8mTNihC5KecDEUl5ZqjTGVB9IWWqJryC0tDNwXxVrw4kLPnZJhnPy3o5JUEB7DBGJr95CbU1wiM3cdgWmW0E/mQD8FxhaRgYsJgsAmgCSeBGrCw7B1+93opo+RIIjd7ihNl9om2oBGl3Qokn98kJmLUAYGJaWy+vf0hS3vlb0JSqKw6GbPhkWos76sGYdbZ8AsWUBULwCT/G0k2E7KmzFeBwdMnz46rzQvX0xS2Zck82mxnAXH27gykAgUrYnlSmDuVWIQDMQTCUzr6oIKnROksEhguycBXzUAAAABHRSTlMA/rFGbqhDHAAAReZJREFUeNrUnQ9cE9cdwM8tiNDqaNUOW7FzXRdnO3RQ6kjZwtrJmpqKyEC7Ohm4BYQp2Oq6tiyCS+sgKWICBkREGPgHmEKholQRUEBFWh0K1rFVLU63ISA6V5m2+713f97d5V0S0P37Jrm8i37C5e7de++++eX3mMI8XXZiYlh3YV6YJw/DfAtTt24SsM7ijWGY+4CvPfPkM3Dnb88wzFhMwWOY9b/HMEzBWAcKGIW/9ggFhvkGBYbxoMAwr1BgmBcpMMzv5Gzdmcgw4ygwTGKe7vHa2sevluY9LsAwD1JgmJmYkpjdae/M5GGYtygwzJe+9KXQ0LVp4zkOfQlgGE9EWOxKTGwYt3e+SYHb69E3FyHe4Lb2AQoMo6LAvWoo9ZXuR5W6KDCQvBAYWKSG//tDlpw0LwJ8BsRroSrMvHEY8RH2EWCYRRsdYZhpFBhmDgWG+REFhln11vMOMMxKwGslAVZ+xe2dHeUzkjLFe2fq1BclN3RnmLjiTUvkMMx0jqUAX2bPig+DVRzBH6J1hvnJT5744ImfSGGYX8j5rCeGYYKCgoaCgJ3e3juDOBjmIRGvLsJY4K9JYZhfYS6rMIefw8hOtGwAV6XvIp56X1YVpmDaPDAW/vBOpMAwXgSXVWECBYZ5feA9BxjmfgpK73D/lBwJB+GhVM3LE2ivjqWA95lnYmIQ7LPkpApdUnJFeVI4w2Rt+5kDXFVYGqcKgYpAqsLTHGs6K1v4MsPM4ChXqYoChVPtKzxPa0VbtpACw0yigJqhnzvclBrIo9RP7B1Z/+l3ZChtw48pKB03FUIzIchPRcCN6YzExBmwf7cJKHUJUylw7/viR+MqREdVqfY9R4FhAnITQquzPbPDfX3D4SlIlxhg4PZZTAx5AKRGpdx3Xwr5a3s/pe0H/t8DHn00gC8rHQsVT3CwpEEmuHoH9jnGC3PwlxiGCQt7LXbgNVgeGoJl2IANlgyT84EjDPPss2fVU2c+O1OM7FhU3+GOxc8xx1SYY+waw+x814GdZMuk7UPb4ZrnviyD3sIodbnfowCNIQU0ePmSw51hfCnwez35WUzTeIzSXseb/VCNCnP5Vxil4+ZDgWH2U6C3O0rbsIsCdxa2F0Ul3U/gOhB+e0v5T7wiKleFUAcHq3EhN2oFw4z33/vqj0S8utcf9sNpyigOfWL329RHKTDMUxSET+wzzWdaDPnEB0tWOoCPBWHX3s5o/NdmUlDa3lXPvLRYjlJr9Pzt5x1QOkIPU2CYX1NQ6t8yTKaIiIiMCBEZbC9y1VcKquvyqo7qegYFpSFuJAWG+RoFhplMgWGou+FlTIs/MH5SzPTp3riD7G9woF+pAWdXc98QQ+tw/MZAUxKxLuJNxPjx+AlWoSl5G3PQCxPDb9l4CvxH2/kOZif/0aZQYJivc5wtLw/lywzj5+dXkaqDZUKCUIRunoJSNVMFG7iOwdeHR+mweVMgJ2F0QUE0X+auIJ6u4XqoQG4/oCufrb9D1ApAs079xEFiJviFB+C/9l0KDLPdAYZ5EmNUYYzsGn9dwW1XDbsGe5cC/apAaUz/hS8yYiZQwIdgRmkpGo2QyxqlAzNrdtTs2WrKJRR/uESHYBZiQQC3sxfgVaW2ooD6atI/nqLsVhWg/ecqCUptW85w7oH1v3xLgtJnm+tx39fkKI0Xf8rxNUl/+wIFpYs7FSZv5+sinF4/hMXKTt8lFJT2ww8oMMwzFBjmr7/561/hQdCZTAyzDNO3CLF/NwuMZ6gnHz+IaHqWgE/fzEyH07cwJNQTjsXaDXmeAvRPQa/kSv/3+xSU/u9LmIN/xMQ/glGSG2soQLMQTaslzd9xBDoECgyTMnuWDOWzZQsFea3O9kQo1fUZmLbxmJjpGKXa583SJtUu9N79TQpY5wR5CoTdYbehIGa2Awwzf35dR2LffAlKvTASNyGwqH2MwDBfpcAwRVY4JLEhxOkA4r2zWYBhHhcg57e0Rr39/UbTKXyMf0tBaQy4luOACKVXVRSQRPszRaJNYmkV/tv3gLNCa572HILe39MriNKf/zYFOJBzVlAaAVyR5gmnPGnKPCsqPCdMqBYfhrkU6JVfacsWL/6lOTczSgLDPEGBYazrP3B8VVeZklRaWpir0Xm6rX8JyvrXg2sZTgHckMSDkf217Ox7rX+vH3vRTf1L1G+xIcSoNMjSVe5ICghA2/s4oNPx+rf9+l3r39fat4D/levfMIn+Dfu36l/AECDdj/uMKkNtIBK/eFFrUBn3jUz/kiMMY9dAeA94Qlp5sHXRonuif3ftEopoL3zzLYr+9Vq5cSXcvVZ6ASCCM/bscaZ/4Y4eQpFhiqn6dxmHLlWj48si/ZuSIta/H1zYu1fwvx98IOjfzb8gfH4jfkEgGlzbTEPO9O8u9jjvn+2m/pWeaNmhQDarf58aof6Nvwv9G0QBiZGd793vrv71002QgxoniQB+qekgRf/msp/tSEWym6qC7LNwXWp5UnJ5uRUeqOqe+dnPXhTf/lP6d6kL/Uuxv4r6d+HpaAU54yNTwArbQPTvlCmj1L+kTm4TkHUJQYBU/54/f0/1L+je3KzQalb/BrFrsM8mx8TExMeTR8xktsfV7yD6d4ce/7VJFw46078PPOCu/s1NjIxMzL2n+neoyTYAy7o6WAbZmg4h/fu9T6n6dybSvzM/mypCdiyy2/6e7UT/vjvBgXeV9O/So3Wt6Yfnf/khl/qX1uW61r+zlkT6kBaRYn9Z/btEers3+redwoj0L73duff6dwkrDPVlXy3To6q9fz96wqsMcyrfHwlgIn/980+hT3G64D+sf4FpFstuvowuPBvTVmaIb3L9e9B0kvtroRTY7TWb0ZKU0Pb+c7Ec+QB1wI8doN6+dc/07/nzMv075Cnv30zf/Gbznj0R/Zde5+mPgF7kiO5Ot0EKruu4hpPK/r+nf/1B/3og/8swDY850DBi/TtXKn9PnEDX3xMz/Lcj74ss8Hb/jIlvvjli/RszMv17tvKytepy31mx/tVoeP2rg6KS/pVWM/LtvNpg16vvhf4tOFoAd6J/n4YbRf92Nv9uaxtcBJUW8TDMikgF/XvkCG9/Q/OivIn+vb/bbwT615j1H9C/7+78gkv9iw9BYSEcgrUi/Ss7/7u7Of1bW1w7i6p/1WoH/bsAbmL9u0BZaI2NnrNAWPXx4V4dDD4G4/S70b8H9pkP15XDleaVK1dsV660XIGi9LOFec74O3t5+be/vUs5033mRP9v69+Oe61/f3vmt39FDw5dk6l+NXfJ17IIUbubA6rzalA/buvfeSllZY5iISWrtDQP+nyZ/lUnJan/b/Tvyy/PoNSSFc3u61/48nkWMJvcR6Z/5WesRoeaUsmro9e/vnerf7Mrgnj5W10Xy27D2FP9MTT9a+urA/1bI9W/X5XfWP2rD5isd0//BgbY4URuy/XxIIj3zmaOJlb/frxly8fK+vftg+h79lHr37wQgtKrKrXRbFarko+JAIn2AtK/t13r36+7qX/lFQSiZZzp39myG9a/+c0ggN3XvxVBQbq71L/6lNyQ3JCQFEDNfc+3ePEPew0BzvTv+uYP6tc3r4d3SKrfK4fJjPKN8vGBRVQ17IUjR8Jc6l/ADf3rc5q1vyebm0+y/ve0DyP5a9XdOl13tVj/esD9rvTvddACWcd+7lr/EvWryus4ejRYaZD1IQByD3gc8TGnf68nFl53U//+mQMq7J95oJJg/9t+aLlM/05QjP5dHRkVFbn6HuvfYiRoCWjAfFirKvYN9A0IgEWxSnv47bdHpH/JEc708ZlcmNhROBnrX0wwOOC0u9S/BzduPEj0L9oHUxz1L4n6XdS6aOWi/XuU9S8nfSU3htkQp6x/K9LT7eb08Aq5/k358MMUkf7d2/jEB43gfJ94Ai346N/PP7/58895+9tl+XZgIOhfGOPkH4EWAulfMj6l2F9B/37yxidU/VvzHEZ6ommg5anQsPr3H+0vu61/t0dsh8X2UetfLQWkFBb4FqulKGlEz9Bkqv791nexAH4pB9F0sOkluf4d7BlkP9uyI8tStW6qinFRvnDZ5Qv7LDVV13JuzXHQMfh9E86PNPq3IXGU+ncphbuP/sVKt4AqZ+Ca+pNHfUUKmL4Ngv5dDF3UzMVy/XvI7xDcnetfsn8zt2372Zi6ujE/A/0r7YCmTv35K9US/ZucfE/1b3YYq3yR/mVL2dmwz4ZzmjZu9IK7F35qyhnGPW5w2Yc7eP2748OyYKx/J21sdKJ/LRZ39a8hsqMj0iBtkPVxAaUh6lHrX1tT/tBrr8U2NcW+FjZQ11SH9e8VxejfZ59NVomQdc/lW7fq3NC/ngMDnq70rwdoxPxFxADL9e80oUTpcl3r391n3z2km/1fiv79LgVB/3oEutS/Su3OvY/+5YU3XHHFqVX6mBi9Sh03KyqXbRFZAUzkL7QPsA1IACvp32CDIdihTW0bGx0NCwf9+8ADbupfYNo0D7H+/bTe5Cz6txG2FQG6+hNM2RufiMDbq42Ntaow1libmt/eVc88KUXWGgVV9QWx+vfw8yy3a2rIMGMBBZf6Nzxcon+HOps7h+T69ytfQfr30uuXLl3q729AGtgCvUi5tvvqJim4L5T533ujf49SGI3+nVRiKilho389xPq3oWHU+neuJvUdsfy1XGavv7dnWN58Mz7+zTctGSCCnetfPO728kIlQf8usYxI/54ttEL071mrVdC/QLimAulfXEytkOjfZ54RitJqFnTlnStXglA1M9itdv1d619sf4/CvcBV9K8J7v7gf0PgkhLfQtD7Th+i6d9DdXWHsPxdpinyBlbEsU1f7Lr8Sfnu69/ew/8J/fuoLwQAu9C/mZkxvnV1vjGZmeKeKlNoi6uR/vXLZvVvQFEUNfpXm5ysletfZH8d9G8gBXy4js7yYAnMEP3qSNsO/pcN1hiN/s01a7Nyp771Vkv9lCtDq69MOQ7+V1LpquuzDx0aWM3q37/946M3pKAe26NghPq360bvf0z/Jh44kLhpxPr3ds1tTv8+TYn+/etvj0nl72pO//qhy6/LMbt58DsMu61/M/VlmWVEB5HLZF9fWGRCPaseGqrm7VPSO+8k3b3+fVtB/xqNo9S/5yiwjfwfoqVAE7Ki+fuvylDUv/D98yypAFbUv1UUZE3pMlssih+R9eN+wGj0b/Emb++OehEQrUyBYXZTYBgIRc7O9qvGetGWVhLG6hwwFp37YyjRvwcONCD9e9h19C8Wv3qa/gU9LNW/EMKH/O8pcxQxPWJJsxlTVcVF/4YmJYUq699G7nv2k0r6N58CEb0bRCi9qjJeM/XYVe3SkSGo33sb/Su71BkCqtkTsLV1UK2Cp5vBsISgxVakf7HzRXdSggN5Mv8kCGB39a8OqiFd/24JBba4o3+L4uJSUopTDClxnP411UPQQktWStTuqBil6N/mzhOdzU8gs27oy1guhdFpcgtLS5NSKnUQ7KAbWjt0RKJ/N26U6F8gXYpI/y6URP/6HMX215SWZsL+96iPByP5a3e0lwe1d4j+PXoaDVpOH+XboasUxDsnJkaif6/Dg71E1R5zrn+J+gUMly4dzdPSB1ns9gYEJO2o1KELUXikYv3bfiCx3Yn+Ff/y8CMe60cCUEkwW44NLacmf0hLk0f/rh6HWT0K/aulIAhZWfQv6jjSVcFxwUYjLFTpqB8Zmf4lR9jHZ4mqdIlqExrCnoqtNGtRBQ6oNYAD9hqt/t2190JdXcneXUT/AqvO3RCD9e9GHPy7stWYkGBIecOZ/iXWl70DoH9LFfWvX3p6761zvelmP4n+zd2x4777duzIJfp3Xf4F0L+Nez/A8veJRqx/u9K80m7weR+2wxjw2xaG0XBAb7OJLzOMo/0l+lev0juP/iWHIVtXkY2+h9Rlo/H6MdX7buvfiHW/uqvkD8EUQIx4gBTZlKt1R/9OCAqq1lVT9G87igBe09TE+t+bB0X693LrYKulR43L+JAd0SW5Gf0bzu+z8HBNy5o1muTwcO59IQOEO9G/azjmTJ48hy+70r+r/xRnIFsWT0Ho6PzzS0wmf6J/KShdaCwEIq1ApVUAyZk3gPg3HgV4Bay0DXtZXp7b0jL3ZW6FP25PHfKDS/FDTznXv6ROgv7t6+/vB/0r7RKqz2ZlEf27bSrPtnumf8MBQ7Ferff11eeGBGvROnQqEPKU0+TF0ZQzZUok2+OmZOp5/avPhAXSv8CFV++B/k08OmfO0USJ/s3F15EBavIOgRSU9O9rr71mG3oNiD2ElgN1sEBjol9S9G9CQoJKm5Aw9awI6bHwnNvdPVDtVP96otvA5s0DuMjr3zk+jvoXzvmjJ01eixa19tY856B/i4uFolKXm4w5f15YAmQwXltWVsuXOSXGGTES/QuOI1fyAO6F/v0NBV7/Tj6wwe67JNGF/qW3O/Qjf5jCyKJ/oYylb3BMTDASwbwM5QUwL39Z/Qv+2mNOolWEUH9DNk2fvinEQf/GRkbGOujfBywRERZeACt18R4clrQ0i1j/9latuWWEZBUEkf591dQcba2Ev9UcwarXB/TF6rKHCXh7K2Nj7SpDHLS0dputUtje6HQpsjNg4PjxAWn0763lJTWC/v0TBYaJ4ykqEooi/RsbKxTx976mJpMT/XsCYoAvcfp3gBr9S0FJ/2ZSUNK/Y3lOkSjAUenf5oaGZtC/3pLo3wbM6PTvOxqVNvR+zLIx/Sf2twar+PCr7Rb0bbUFy183on8XLZJE/8ZkKOvfnDVrcmT6d3Pf139r1Xz961XXif7VhSeFIv0rFEXdfH7+ar4srWbLnp9y/PkgLvo32DH5w04K2E4MiyveMNG/0UcLFvr4LCw4Gi2P/tWb1TL9m1/SJo3+9QZiKfrXlpZmQ/a3Iq8W/odHrX0+vrYZs25d84V1+R8JONe/WftqjO7r3++NVv+uWLHiIyKAwyiwh6CwEB0CLwHpgYFzP7u7G+vfqG9EzSqTwgYGXLmSQNG/8uhfpVYBXzhzX3nFZLD+F+UAGRwMztrylEL07z/PudS/w2vM59avBf3bWT+lufl4Zz3oEslnu7N6dWx9XR3Wv4gHE9Ri2HM60iqF178/+WD7h4769yIaF/US/RtA4Z7p347+/o4RR//++VZJjRD921KT09JS05JT0yLo378ek8hfQf/2kcQPQG0c+w7HQ6Qo6t8yfWaZLP8D7vPzSkuzcD0La7pwoQlf6n/22Wehycmhn4lxpn9z5+3YMS9F/InfpkD2jsFqNYxO/6opoEZ+7ssvbymcVwRImpB4fwff9g8K7GikCGtfgtLY5wQFSa3OnnvW1nJ9bran9DwO61kZ0RM2Yv3rG6I2BHhbxJ/EaSwdEAyQV7PRT26R/g0bMvn7m3j9C4r8ZBoIYHn0b0dHB9K/6Y7Rv18bN2/eOHH0b3CpQvTvuHlFmVL96xHoG7IV+gR7reB/xXtnM9B1sauL1b8ft6tU7R9T9S+YoL350bh7yb+opH/XUSCit3QDQelVld1kMl3TahNEMIydglj/BptHGP0rrSBB69dUrQ/i9G9JSdqiVlWr/6AKYhVLSlj9y4nf7ds5BYz171gigN3Qv8j+UvTvltDU9tD3Q0Pb21kDrFT5ufqlhoVKrWZrGXi1/sbFXADwbvZGS/7QDA94h9b4XOtjshwLeYXdYYmJ2bq8Qrj6Xlu+urxapH/Tevr6etIE/UuynBKI/p0M7TDRv/D5CtAVhReQf4rt5RjJX8sGtd7qKdK/BRhB/z5FQaJ/I+LF+vf8+VdeyVJhznD6N4sCDHv+BOpXr+Iw2i9dshoZZh4F2N7Sq48fOPC4Li/x8cfDcTASl/yh3bGFtGHSYnaPtwmQ8JfiR8fF8WVe/743t/1QmkT/hiH9a0rr7EwzSaN/I6EWQY2KHIX+/SUFrjqFRHnI9C/wnX1G6KDzYNfs+w6sjlD/whH2xEc4EfSv3VYefgANYfHGbh1TmFdcDFctbBywkmdKpMDp34Pr6rKBunUHif5FnLy5iECif728WhMGQ4rj9gj692Hciz4s1r9yXCV/0KSbq87VN0P8r1j/qufd9+F9cJ+n5vXvExdKLoD33Qjqd+9PgCfY5A9Vk26SvA+BC+JvfC5yR97eIndEsb/u619yomXrgjyBIKx/n3q//R9u699fWe4u+pceb+fjGxLnA2PLAcfkD3732+Ahyf3rGarVOepfYMt3v9XXdLAxB2hsWiPo39ZWywkgWCXo3yPLjvhpJJEbSj/WyduwNqi0NCg0pLCiQtN1qKU31a+Cf1/1GXeifztZGiZ/tHNyA7dC9G8q6F8PHxbhurDNezgkl2+NuL5qecny8SKEji7N1NxsShP071YKSsPuhYglelAgZLSIGqf4Ry1vPBD/KIdPZPOnzrehaa4NmNvErnHHrdv2FJbAtm7uuIUiKiYELQsl4Dp5B3L/Qp0E79tbWNiLkj9IO6CpNttUUfTvMfJ0j/SvLw+E+PCw+hcLYIsFy19O/wLBJPkDFHn9CwHAbunfGArC/w34xmOPfSOADCHJZWQceYcACkr69w9/+MNWeMCSe4IH/kp83y0ZWKeqsiCy+roI2bE4FBsb+wex/jVqjVpp9O8duJffvl1+RxT9ezT6tEdMmhh2e32WFjRDB7KSDwIm+rdWnzKRh97lCmdhlgq0dZZaPuxOmUcugrjoX6AdBlV8WWHgTvSv7srd5v7NynLI/euxJHBDaeImD/6cv0yB3u4oHXmtmkOvl3159p7b0b9syoeAuLgAyPtABnGsAB4/HstfXv9uqkWHrjbXcZ/lsinwuX+BT8GRWFubyJeF4Y/F8qtfWSzcivBDxUe/umnTV2eJIlUCPeAxDYZEadPYMtK/xt6D+8ABqyXHTRz6G6u1R5/Kt+xm9e+8eQ+Upcj1L8T8qkKmw+aGgAm2Ev2rVUmQngGeYzoaxkj07+2Ly5fX3GbLpF3XJSfr+DKpD+qa+UKFIPr3fHT0eXH0b3Xb1rYJyvq3P+JE/4l+rH8HBgaOdDtE/yZxnNFozvBlhnmaAv3rWKVXBfsbG22Lvgv9mzbm0qUO/5jpKPsD0b8gb0Dg3KX+XRbbb7k8CAounGH8l2dEWE5s3x6/bl389u0nLBEZy/2V9O9ensFBoQgfLSb+RPw0Bf37Q1BFcv2baj2bpNUmf71KI+jfiuSkcA3Sv1xR0L8o8NdkwgWEpJqB/j3bAvpXMffv3ylgx9L2EiJnPn5qw1do3CUUB7tGon+D+04WivVvW+fW3/1BmvsX3nf3Cu+PuiSw6clMtqAJQalxK3AP1fvlhxgGDohl3bqTJesuRImOULwDRP/27ss57Er/qjm00N3wZfpVgXxMT/RvbdmKFUIGCBsF1OoeQrl/oZ8hlzXSA1MJ/jeoGutflgXCDWDVVXi42kH/ypI/wCppFVoDLrfKLp1xAohpGRnw93ez+ndw0cpBVXD4P54iiPRv+vFVq1ZbVzvTv+cOGEqrIOK3qaSlZHl9SUlLo+0t6WcbqrPZVsfy+hc4pnZMOhWlV4nh9O8Hnc0TT2yX698bkxAXBP1L2kEzyWZwL/TvTiDyQE9Pf6T425BkCg7RvzW3bvP69+ne9Jqu3t7ervQuafIHIn+x/uVSP8QL7hfOUE4g52SpxDiL/i3LDBgnBvf5cCw8Q7EIqbKmd+HkfDOB1NSZEpQqeTIQ8Mm8uAfKxJ/4MAVyLOz5+Xa39e+LL4rkxiaeAweEIjTyc5vqoJXvXir5gbY353+XNzcvxws8pkrgMRqFIs4KeW0wZTcO/8U3KCmNfU6zHC2I1Ycs4VYktXqguyK14p3uAU/Jq6B/958Yhf71DgjO9Zbr33AKZP/qg4P1ZP8KWX/r/OFN0qo5/dtmjB17yrRyf4ws+hfr3/m9lOjfstx5cYYybgX32LnFYAId9W9mcAp81SDRv4BPLvo63so1/ETDecLe2czR5Sr69+2DfOiv6fAPlPRvBIclI8PCl0eY/MGM9e8Z6XmsoiDWv9f6gsXRv+hO9G8+BUkFAf17jte/2P/6p9lvmq6Fp/kj+8vq39notiAiYsFsVAJQ9G9n89hmJICnC0j1b2ZAQCZbmaqrqz11Ok94kuvf0HZYVFTAoj0UrTv73sxsNialAklGIYNZdKdpDQjgmqwd8+YV4ds8pdy/uTFeJ4qMfyoQw6Bft8C2ZaMs1R2VGk3lcBjRvzdreyyWm+7p35gltbVLloj175wZR4ZaqoCWoSMz5qAPLPlr2fbWQXu2WP+OBdzWvxaLT8Rukf79OQpoYsl6BSE6K69dI2elVP8OXlPlXdIqpl58nOc1vPz4YydTv0WwRO2OIDjVv0Ao5P91iP7txEijf6NA/gJR7unfPXvc07/64lq5/gXePsy5RAj9HbH+9Zg+3QeYPt0X9G9iXWwHjv41dbIR4AUFfxqzies26V8WKR0J9KPUC5PSQsvL/e5kl0D8nTP968XdVi4yGgKK9XsATvDnQi+6Qyz4wylw+tdXfOP1r1+6vaenqmp42J7uJ47+3XEfZocQ/YuFL6t/uRQQWP/e2HzxcyHvw/aez37xCxf6l9hfuv6lJ38gJ1q2Bvc71RrQv/j3ZMr6d/duee7fu9K/dIni4xESF0jXv4f8IIRUNvVbRaqf/PL4u+2C/m3KOXjwYA6Z+u3yCUxPq6B/j6DbkXLxUE0pr0y5nyZJVxEO0y+FJ+tCzfaK1CSuazdwGSBeRHeAS5CA9S+BYSpZEicvaZucyK2Qb6ESwu16g55F0L/ew09r9Wphy5Yj+i/1ZywnCB1dSdO5W/lE/46lQP8mmte/BtC/xRL9u3+cBcJ/H+VY8VH5+863oellnc2me5noX4wfeRJN2YeChQigdH/2s20ALGFRWlsWAAVpl+DZ3td3XZT790wyWiaf4fXvecSDoH+nnhdQqn1pFBT17+uNjVOA2Ph4iHzi9e8OjrL77ivjy7AfNsJt0qS9n65fL9K/ZRzjLJZxfJmcLRvz8zfyZRL9WwBIon+LPbwxvsHCq6kUFPQvUTYnobHlwGOiB7WoPpjNovowk839K0n+ID0WA222c1v/EEb0r9o+aLZrRfoX53y4k6pJLb9Don99jsLl7PCXxXDbizNAeCHAAPfO51uYouIifbHeEMCuKXW5Koz2DNK/Z7Ry/VsGB0mkfzFf+lKW1Zr1JbC/7ujfK1VVV+5K/yacef/9Mwnyqd88NpmL83iXQ7YhKzycqEHFdgdjTED/3yj/xLnFxbnkHbYgjoH+3UJQjv7lJ3zDk8C51r8ATf8eWIo5IM9afnTTpqN8mR/+PBARAT4z4gGZ/i2cVQh34VIlqbg4CT8GB5OSQtgyqAztmn2gf9fsMztG/76Kc9FF27Y2m2L4vLtxuQ/P00v1L2A3amF07jPdN9hoVinqX9kAtdxqLc8W6d/bt2ou3oKyVP9WqMFxVMj1r7oXLuUc9W9lc3MlX8ZXBSgiRIJY//ZnoDb4BNa/SYBBhqhWV1YKRSX9q6IwSv07POxu7t82W2ynY/RvT11dz7RRJ39oR8kfQP626iHVW6jfeyPTv99H7AO0WrTEq/DRTlhORMTQ9W9OzpSsrCk5P5To3/Lwr59Vqc9+XaPj9G9FRYUuNTW0QqfV6rhiBdfNr19PHoC0mi27ffzJ2/zF54j1b056jkj/elAQon/Vhr4xfVpB/24VKBaA9329s2HOijnRYpD+PWKzHZlQAXO+AVF5NdCwCPr3wroSsf4NZjFcvmzgiiL9m5NTo3ahf4WdkJQU7GpmVPqY/t0AvSouc4Xvzi8K+reuTq5/l8N4wMsLFiu9BCQHRjz1GwWySe7k/hWSktXW7m+VtLq2SpQAIt6S4ZURESPWvym+HgSif48bV8HCfNyZ/jUC+hfeOptfX+efds7fdOVcy1vSz1Z/5dzZ4/XVrP598HNYfB6+Q4DXvwaa/r0QU1QUc0Kufy9MwvQ66F+jNd14L/XvEWBt3IaQ0sojAnRZ4KB///xnkvu3Jh3Ub29vTW/v0+Kp33j5S/Sv301I/EDcr4roX6Ns75gwaePTTAQu9y++eidIj0VYm61LBy+wAnnmzGclKFXymcCBzB07MmtdT3PKi/hrnZ3X7GoH/XvxoqP+vf7gmTOwYBEF3zc0CEVB/16l61//5mZ/vJDEzRrtdnF9CKmrLNQbIAHwI3CHGzmztFqV+JnTv5OPnlo7ZE4wJp6+dABWJXvyal/LCy+s7bvqKdu/fY2NfaPRv5sCfL2H14hQCrnh2wH94KA+WKZ/wwZMsANgR8SGsfo31mhT1L/yqd9wwO8jhod3wHXjI3z070KOxxz0rz4FLR95RKx/gcAUGzQ0lXGB/Dm0meBe7l8I/cWjQtCNF2//QFH/8nVgXqE5QHRdzZEogv4qTv7Qc9EsTf7gSv9q7deu2c2i6N99Fy7sI/o3DJMd5KfT+QVls2uSCgL6t8q6fgLugbdlbTPfLLk5AwHP5qzzQvQvTAozaRJMDANFVv92nuyEfQICmICsdmVKyjzI9gL2t8xggGdehSxdipbU3L99fRV80ckpbLbbs8LRBVF4lt3OxjtjHY8CgH/Zm84j1b/rp00sGHvScgJF/0aUDGbJ9K8n4e8dQ/v2DXX8nejfnp4eS89FafIHqxRB/xYtKQ1YUiTWvwt2fk9g5wL8gT3F+J0/7+eprH8PUSCJKT0aGpbGx/De5RVgqopHfUyqf3Mtlly+LEv+EHztWk9rsFP9C7PPEBT1r1I2rkiOjsqPInmI/sXzv8mjf9OaOzub06TRv1E4+teF/o3iiM/IiOfLo9K/6kQ13B30b0kGQanV9BEx51xloS0SDWE3rlu38UJ+JyTaOAqHObqt0mpE5y8FZf3bCGmo64IG/Mq7/FBS6kanyR8Ar0VGY6vBGBK3g9W/Gkz3jFQNgWGiKaDkDx0OsPpXl2405IVcu2Y2puskuX93YPtLcv9i2OQPGE7/fg53Ie9D1y8AGK1xIP3LlxmGs78Xif1l9e8nej34QjUsP1GO/vXkwWkfYAkpIHhZF6oXQ/QvTLkzzdXUbyUURqh/AXnyB5yhRN2qRbSqSYYSnFvUMffvd8H+QvMEreZcnAOY6N/WE4hWKJHoX78jaBGuF1DSv+FJmvLkJJh+KQm+YEtqaEgKL0/FP7UpjsKxhWe2kejfYowBziACw7RwzJl8aQ5fJhVaW2XTki3jgn9XrH56wyaDRP+a+jv6TBL1eoGlxBausZVwK670b+u1a61S/RuZDljTBZCcgcwP8fvH4eQPH1W+/yCgtA0RGMvLupYW3csWdo3X9vAgBUX9u01MUkgfG/3rKSa1srAyWxT9e0wa/bsWs2ncmLUEeu1T+qIiHNAGh+Si5A9qfbEBrSP9e7DOUf/eRwE3Wtj/npg8uZno30eBhy1ARgZaPozWhW1I6zx1qjNN2IYUlgOT51yafEBIWQAVs9SXI1eoqa9RcKJ/V62KjmbzLRH9C7ygAnp71Q769+z7IqTHYqgttqtyhij6V2sfbE0X6198bnpWbG5ZC89QYqN/l3osHZn+Dc4NKMo1FLFrtC5XOflDOEfIvHkhfJl0xNbhYSvpiM0UiP5tKS9vIfrXl4IL/XtsS3v7lmMO+jexMNDDh4OowXCNJpw/GIrtDkYN56nK2NsrtyCGoiIDOZohmIDdxSEEWvQvVf+6SP4A39RVpYvgf4c2fSlmOv87tMdYThcsWVJwmlsh+hf9tFmuf30h1SncfflLFU1oqEb+EPTvp/WXxF/YSOZ8O9Vp2S1MuzYuJThFlvwBEz5nuse7V18PEX/i6OIQCdIzoLuyq6uyWxL9i3hepn81KkAj17/Gmr/Mn58l17/nm728mvnwX3oPKdG//RGXGiLY6N9NFESDJZttVPp3dMkfhtvahon+DXSE6N/8zs58h9y/Cxsgp/Fk9/RvlBh+6rf3Yvv3D2qzNDqYRBY6nBElf3gVsc+sRtZebd6HV5H+jYig61+gpiYhoaZGGv17xf7KZ1brZ6/YP+P0bwKPSiUUef3bCAugkde/niKCLl1afylMWf9epSDo3ydrep9ET070rxD9a0y32uxGQf/GCYh/ub27ubnOstt7eoFkUMHO+ZZazCYnSv/yQ1j/wqC4E0f/5ncICGnl4kHGcypE0L/ampycliw39a/2xg2tK/1LH9O/W5ZriFsBREIGCHz975eU5BcmRml84EmQ699LUsTxjL4CSrl/+cxkARs2BFyWtrpb8U9jA6dFRPjEkOQPaAZuqv6tMq4CoADAQaQAAQdGs9a87a1nj7c1+ZfULa87DtkfJJ8t7HjLrXNDx8Ow/j2WkPXg34Dub5D8oh5AR7oUVv+u39uQnBxzYrtM/26chLnhGP1rNKrvtf7V6TfkhWiOCChl4P8zBS76t6a3q6u3pqarpovXv4gKXv4S/du3aL/Y/aqNZvQOTz6z2ipFMcloZiZE/0qR1bM7LVfY3L9rKShV8plAbQCoJrf1r72qT6Opstnl+vdWTs4tB/37ImrGXpTr38n9ERH9k7kVIflDkTvJH1Qc5qoqs1j/doVrDJAU0rGuHz6sJc+c/r3UcDQ6NnZrm9Wq7evrwPpXvB/rys+fX1t3x1O2fwdu3RoYRe5fQD71m7L+xQxC5lhJ9G9QNegc//GwN7jsD3iWhbHU5A9jOsY46F9MWVymPnOHKpM/Nx8jSPVvpqrsq0CAvozoX0xgHEqPZUsJpOjfqoubP2uCZ1Hgxd/l+hdCf5vZ0QCE/gIMc4WC8KvawOBKQ3AgtwKjUwpKr8LxNhpRMIUIV8kftFaz+do1Ev3b9Fxj43NNgv7l6kCFX3W1Hz8Vn2ygV9/SVd+Ne+Dz286fO3ezJBEFcZVcfOHMGaJ/J2asAzImCvq3+aTJUf+OI5QZyuCuqEKI/tX19PRVuKF/gfDHdaGPh6MSGcR2mnIWi5Dp34lI/+ILldzW1kJZ8gfJ2VN5qKKicu0dUfSvBa7zb0qnfhsrRdC/cUs21C6JI/oXWLD2e1wSp7ULPBz1b7afX7ZY/4IYBPsr6N8ICkTXneyMjm4+yZZZ/XteJXBGOfpXNvWbfhD0r96Z/v04K+vjx1ngecTRv3+hQPQvnv8tzV+W+7cZkOX+jRwHuEr+kMOx68KFXXx5dMkf8tTqPFnyB2D3AwTX+hc4un79UQ+sfzHrNsYAJ6PZlmRU+tfzzp072TqUZ6rR2dRvOPTXkJsC9ncPC/w2GjNjBiwEFPVv3Ll9cgT9qzYmXRtUG+1S/aveAajl+hfH/RL9K8v7gFfhgoQj0ts7ki/zV++s/b05m+jfN1Q8b7jWv0B1qA4mnQyt9uQv33ZHiRFF/0ZEOEb/yvSvH4WRJX+gT/1G/79hFOT5DkEAE/2rHrzcMxgMfYiQ+9fvCBbAA6/vFlDSvxU6XapOF5qqqyiHR2WlroKb+q1oQTE2Md8XZdOioDT1m57FoA/JS8jicKZ/ey6NKezLEKvXd1haOlrOdbRwKyPWv20vPSkFy5lx8W88zKtfjNI2LMB8dc5cGPPN+Sq7RtO/yskftknQaNCSYSQdQqHV2jGA9S8FfmqnceM+ETEy/ZudHZqVG5CoQ1O/saWwbHryB2X9uxEL4PETp61xS/8C+WPH5vNlUe1buFAo4jOgWM9R68syYv0bveqn602TANMpuf6FYZXoavr996+rj70PKOrf7Oa243V/Fyd/sJrtVknyhzvI//69qunqBChz0b8Yiv5VTv4Qh/RvDLei1OV+jwIZsH5cWfkxXyb6dxgg+vc4BUH/XqkKDa26IuhfPQUX+le7Ra3eoiX6l8PjQKIL/avc7gBZvYcP96ogRolvz4Ih75caFmqDAT3hNYaZjdm9e7YIevQvSf5QpscLWHEy9RsQuXrx4idFjFz/ApZ4C9wfletfBNG/RPqSh5D8YdghEnsXDv3F8Q/x3KufYDLlU79hkq++jqqsWP8WLA2UIj0D1t7o6rqxlkz9xs795qb+TZ//l+fmp8v1b3qJl1dJurv693UQwHBn9a+BguiiOjra7Er/aiko6d9/UiD6d05b2xy+TFVQRP/6Q7Z60L8eJPoXsbC/382p39JlXdb9AMjfy4YzmgrsfoGRTf32Kku6GnXp3AqO/rUo6d8WLaaF6F+Exr65svIzs+brrvQvsLceLev3smtyOzFmzICnsv4toSDVv0+6F/2rMlutZrWgf2spwPsO26xLvFc46t8Jfmzo74riww9h2AbmoOlU/t6HCPynMGwHDDL9a4aR2mGzu8kfAL5MH3DRx/Q496/vu19g+SLWiCghxwQx7unf7m6ifxf8RIpYgYh7CaR7FaN/ryUWFiZeE+lf3IKdQgkgQABPi+flV3ApJL5R0L+q1aLcvysoMIwxS2tWf3blis1U19lZV388X65/Ia15ff3QHTb5w+fqM3+j6F/KeBHr3/oYrH9dRf++T+GeRf8a80IMbujfCxS42N3FACyffgaWvP4lkb9E/7Ysil8A7hf1k0Zz7+GWnMVP4ndYNVaGUvSvnoK8ngVNYOvZhxSUKvlMIPHhTZsePuBa/57BdNmqNF1W2zl2TRT9m5NDSf5wDL7SflCsf5fi4N+0tIY53ArbyE/58UMSlKZ+S+AwWq1G0jwO5mnsmmvBCaHVAwLcpzh8WEWeWf0bG7sQ6d+2WKs14cDpMWtZ/Us4VHkmyXZIbvdwmOeI9W8US7M70b/rKaBtyNb51U3y56kLo079Ro/+Jbl/if6FtdHoXyAwwIrmZcj1oUX/dt1AS3gHHtHMjux0UI3c5URzE4T+AkqdUjSH1jom5BSRKRtK8U2M0qtnKNAzWkuTP5Dcv0j/3rrloH8rkGvM9qug6d9D+XV1+bG4B054PqFqvXlwA4xhega3PX+e6F9I+pAB9nc2KnO5f5tx8odVLxFGo391VX0QZltV4Ub0r9lsfx3Ig+dR6F+V1nHqN08CnqkQCVkS/Qsb1ndRqn+jFfRvbWlAQGkt0b+I6e1TMe3TPYj+lSKZ+g047UL/juXp7Iwmv1J8BXhRTfSv09y/AiQK2HX0LynR9S89969L/Yvnf5NF/65EwWJI/wLiqd8yXU399mWOXQcP7uLL9AnWXE79Bv8km/oN8HmU4Ez/EpYuhYWgf3kJXJLfDEduNMkfSjyr71TfCRIlf/jmW8876l8AYsyMl+P3hMTtL9ujHP2rnPxBSf/6mc3m9K6udEi/Ikn+gK6p9bAg+lfMBx8Q/UvyPrAwzKccSP/yZYah2F+X0b81RP8SgvxSU/3gay96VVBM/kCBPkXbCKd+89n53v3vSVGK/j1EATdOGqkAFvSvscrIPgn6l7W/V+fMWiAAgpMCVAVNUjh6aDTJyZpwa7iGz+uUm2sAE7PvOwIK0b9E/3ZWivQvb4KKVKrUGRzOkj/09F9q6JGo15ksFX1jxtRVCEO9WAqi77xaB/Ui/Ttn9UuLZTAMn/DhQRFK2zCLY0Fk5AK+TEv+oDz12zYKsi6heqA6yJNM/cbnf7h30b+s8g3KRvo3u5pdo079ppz8YRKb/mF5RITpoJvJH1DOZor+nbZA8pM5qCAsel9vlhEnfwD/W78RxyefFOnfz5GWTDCbE1wFU3mKCBseunPJU5L712g2SvQvm/336lU2RF9R/7qa+i1Xn6Iv4sq0LldZ/35Mgehfgkv9+yxk/hUlf1BRGFX0LzBZKJH3TUhOJsdCsd0B0s1GCIYwZhn59qw2AFOGF/gWUDuS6F8y9ZsKIFO/EflLBDDDYPkrY8TJH8jUbzL9a4D56cFTGPhLlfDk5HD5g5v6rX6Oz3QRDINDf2NjT6HRr2UaP3wJpcAnf0hYNuHIhDsDWqOdT5sGkxGLoMUndHdnk9y/BDeSP2h7a2Ael16tTP8uwsHvrvTvN7+J9G8/+F+O/ggX0b/qtujoNi23opSj9wcUlPTvLgrkfSOHhyP5MvVsIfoXwp7Gs9G/RP9i3Na/L4lgGJC/h/pak9rB/d4PCPp3YoY/kr4REUgE+2dMVNa/3+cwwjiBL6PcvzENirl/0WjPmE6if1lSrZWV1s2oRJI/hFYIyR+gWMF386tLTPn5ppLVFP0LhIV5OtG//hRGkvyB5P5VQ1tCcv8WUWCYpZd6ei55OyZ/mBCaF4VDf+3zBc+Dn1565pmHRDiN/lVpzekq96d+I4ww+hcc6JwvMDwTgIqKCfdc/74jQHLIkOhfau7f5PLyyvJkkf61t4GVMaO8eLPQ9G/4wAwGx/ngg0RP/qBKX4WAorL+BbQvvNWSPz4ferl6k+ktTv8ShtqGDoVx+vfzBx2SPyygjhd/imjsDAjoL3GV+5eejoHKKPSvPi/PUHnHpf6lnzrPUGAYIn8JEO7SEwNxv0ZzOha/AN4PT34leqwcpdy/KgpKIuRhCs6if8u7/fy6y13r359hNh+v6+rqO76ZXSP69+bFizcd9e95iHyU6F/MZItlMkn+gOSvHKiTzd9xQGnqN/21DYUbWpPmhgUR+FAetYo8s/r39dch9S80SPYE4wFY28npXwJkLy0ndk/EyPXveApK+venFPA2DJlKRNQNIP17qh/kr5v6F0GSP9Cjf10nfwACa+1QZbeG+AZK9W8VRP/CAlAKd4HQX+579lP5NyB7CoJ+ZhE5Z7PbbeS82ECB/qpSq/F9CkT/Gq9dy7ObRbl/DwJeRP9yUx8htwYTIVH0b1jY0FAY+/sb9TaVef251hLYmJLWF85rheQPwOzl69YtF+vfsSeR/P3yQwSR/iXJH1zp3x5Mn0v9a4TsD3kNQB7kfjC6m/yB6F9z/V45tPOE6N+NN/v6bm50T/8uhPljSxdK9W9grQpTG+iG/kVJvQuOnj7tnv6FxBv5zWOJ/gXOqHimsvr3RQpE/4oVsNLUb49TYJiLFHhHUxKzO22mgFP9S+Z/k0X/ruzsXCmJ/gVWR0ZFRYL9dap/KUDlpcBVsmLpMAMNmOGXFsW+gb4BAbAohl9evP326PQvgehfAuSCMDHMQQpKxoNM/eYZRKZ+WwXyl6p/IcpsEKJ/9+yBU3CPcu5fpTDDOLr+RYRb06tu3YLfw2qWyfRvcLCS/iXRv5K8D3L9OyzVv8T+4v5iRFO/eUpAX+q41r/APdW/9Gij10nSX5e5f9dRwI3Td+URwOQHTlaj0VpllOb+3QkjcoJS156qqfBL1fghWe6nSe3u1sDU3cLl/OHviKDn/lXSv3wPDHavfAaHs6nfTCU9FtNy8ZbN5Gipq2txNdSL5WlrE0nh4cWOwEBNiPolKG3DLAq0qd9Gr38JotPy/HlY3LvcvwYsfz1Z/esJAjghF02lNpzTtHGjF9y98FNTzrCTqd82+mPBih6Nzqd+q+dYg+4cIv3b8KY0Y5ovVw/iiLSsouA892/zJEyzSP8mOs4kcJ2C47EIk+hfhFT/EpzrX5z3gQv7Ja9OFLI/1Ir1r4z/jP5FjE7/0nP/0rvBfRSU2p1YCvTfLYws9y+RvkQEwznPy18igGE/EPlLUJr6zc6Bpn7jy6B/eR54QCjyF5MfcfAXk0HLlgXJH0j/frrmym/kUWS7YM63aLt6K1yTxPMWF9pJCsLUb+FH7tw5Ei5M/VawVG5/lQeoz0PIL8Gtqd8SjPNrVFq5/t2GcaF/M0wmGOpmRIjIUIr+zWIxd9lsXWZu5d+ufwmu9S+A9C+GYfobHOh3rX+fZG9Y/763ts/aPheF/RKgKYlYB94XGD8eP8HqRCX928HSpzIYVH3cCv/RlJI/dNXAnehfjrPlOpGg9IMJ3zQaWCYkwEKHi9DNczSaTI18mVLNRqx/6VO/1Tc73OpJ9C+C6N9iCvC+Ud4+u2uvSQATt0yDO6UVcb2iS92HKAjDPkNPj4ErEv2r0hpHqX9TKSjm/s1MyQ1YIvjfCRTcTf7gtv4NDglBAwSnuX+BY9evHxNPm7MV5S6HB04AwcXm5YKjkSOe+k1lP776+Dln0b+1wJLyt966Al855EMMav4VXv8SwuCmNPUbfbzIT/3WKJ/6DXMR2d9eon/pQvbu9W84YN+wIa80L1kUr7OTgnP9uzgHs5jXv00lRP4S/VvXV3V4Pid+yX6A0N//oP6lV3LoOCM/qpw5sxKe8A1egGNBAfQvSwukwI5t4VZcTf32Itwdp347gO4ccAa89GOK/iX2lwAdAgXYO2j+f+t7YH8JCmMfMvVbtI1M/Sb7wra6Ovvfqn/DKTjRvwNDLIcA+AxDsA0FRP5K9C8cmzpq7l8y9Rs1+tf11G+YwCgz+q7cXhso1b9daOlU/zYKc77V/ABwpn/zeaDJ4RlZ8odkCq71b0iI2SjK/Xth/vwLRP++TsFZD6w+V29qhcDX1ps3YI2f+g0eMRkTJ2bEEP2L5O+TIH/p+pdM/eYq+UNVD6KKXXEW1ZWVYM6b1tAwLc+ckCWf+k0TyqOkf63rP3hCDkND0L/rJm3cOGkdr3+pCPr3sccmQzYvTv+SpCMqgOScpvMIx8KCgoV82elfA041N8MUNxL9ez0560wCDnR6xZn+pTOOAqNAFwWx/n2HXHuMABL9u9JkWimO/iXcU/0LGGTRv5D3gU06FYgXtQbIADEi/TsinqSglF/gR5hdey/U1ZXs3cWuMQqsBFoNcUVxe4Cyy3sQ9AlUsWd6UXabyiiwjA3/TTcnJcHCj9W/I0Kc94Ho30aOBm/vBr7MMBT7677+pXP3+vddCkpVIYgCowAXPWqDhwAMvigwVEgcFP6Fozj377IhNvQXj8uV9a/T903/vmwwMx2B9a8oJo2Osv7FrP5TnCiLZzwF0V7fuVMo0geWCikhRkQ8BeXjxot7Yu4V9O+ImEqBe98XQf8mqASUat/7FBSPEMR+QWZ/8oiZzF5wpWTqef2rz0QOmI/+hRu6w68QnOnfpykwCngDtdj/hoik5XoKzvXvyTQsp9dHC/p3zCOPTJTcoHM9S4GhoqR/oSbK2ckosPRoHXG/cv0bUztxYhlJ/nDX0PUvlZHpXzoqnqwsl/8XUgHxN77wE8WBDgW6/uV+Ed8O+vd+glL0L0n5gMGrzIhQsYRsmj59UwiZFohjfUfHer4M+pfCiCLDQP+2/EYOw6BcdNE2a1szTJfE42R7K22xdlWWRpOlslfiSdKYe8CfKJBUCKVxpUV8WbHdocAo4EuBGDg4s4TiyPSv+4xI/7qP29G/IIDRjDFzIe5XCkNFSf+OY9mRMm5cyg4XI/0pHDUwSRRfZhTwA8JTK5D+5YpY/1JgqCjp30YKuJEbFle8YdzIvUqBRP9K9a9y42lZJ0/IVpFX64H6Jwj9FWAUoF2pu4+S/vWjoDSmf7cYddfTv8D8O5HpX/2mKD2rfwHH3L9xPKWlQpFr40+14SecAEL5wBD9+0+rVqW1QklZ/74JE2BMHANdesu5uqpzwBXl3h3L3wcT1GIYKkIb/8F2HONC9C+m6wbI33+3/uUMzYFiQ4NBJaB0kdtIgde/OS2ImhZO/941I9O/7qNUyR9GfJKY+MnDPB8+TD95BP17PbyyMnyqK/1LgWHUFJgRQde/qFL/q717DZEpDAM4/iorxv0+kZVL9oNCu8i67X5wHVPuqyQTZWw2LSLFWtRu4WjkFhu1yFrbCK1SRG65K02SS764tL7ggy8oHzznnXPmGTPPmXde5z3jDOc3Z2eGhHbX7pm/Z56pGafXX2R17vOEwCTI5d+rBBUfTRpM/y67do2c/gUd58zpaN5nFobqOs5p3DOUyr+gx+H7ev8tLmEkq/x7uaGCf3VqeNc2U5R/6XGtawSrn60kMAu4/CGon4bi9G+nlpZOmH97EDJ/Bw5+0OpO1e2cpek/wOUPhfpNodGCoXXfNuMvkuuI0+OiF9/g8t8MOx3LIkVaraaFw7VaUaQs/qS9L/ro76IPVcc3J1jkXwmYf0G2+ZfD/Gs4DHMicCPMvxwf/RXmX4TLHxKe64HA4fz7jmA//+L0L8DpXyfzb/i0P+W/mIsacemUHoEbi9q7Kf/CAPD+/TD6K8q/nT7CyocrtRcQYz11/Lto8gbj1PoryL8gWq3thAIcjf+IScG9DyhRI0eFfL6QuTNff2T3YwmH9VeYfy85nX/nESxP3wiWGZFgtfuX1p7A829rwWgefwG/lc+/sAQbqc2/YHzyUweXE5J2gsE5nsm5/LucIMy/N24ozL80ufy7i5DxIxQK4RvgL/rX9LTZzL/NT5tK9T/NCL+j4I3fvaks/wL/yskni3228m9FQx/QsB7E8290YBr6c0cq/0q5fwdWPiDMvyhv86/M59lIgpr8C8T5FzCGL/iGLwLHpCQiVThcmvyq8Ehl/r37knr/xuLnfw17exRkk3/LVvCZ3/gcMF93ocA8Aj3BpSL/0vqhfzf/Jk3/Ckjk3yZ+Jcq/BGaBj/xWlZvTv3PhrpL8S5/V+ziIfT64AJ+y/Ht+d7z+IqiX/Pdv/PD7E11pU9I4l3/pc/pWGDoKL17rd7T/pi5/OAnN2Xr6t4RgrGvCp9M+GC3Ov7qNjzZm3v077ExhYe/tbW0BOAJwDeoz5N9vr7b8LmP+BcM7I4uJU5Ka/AuC+j42ZPXIZiPBeOm3SUnGuz//pn+SDyBYPUtqlSkQ4Dfy+fc1QU3+rZw9g9dfcf69SHAu/9LZZR1BTf49uG/fJ3L6Fy7AvGudfzn4ZXT+BSWTV8D78UCjXP41R3/vzASC/DufwKSMJYjzb2kwefcvrO+7ZSP/grLaezvuRWZVJvLvGLjAAeCa/4Cxiknw3dB+/gXRTwe3R6cL8i+IaBocR/QrY/q37irU37uRiV02d09wVf71l5b6hfmXIPeoCPNvdeXzhxsczr+9CI7kX8BIEvnXNnfl36UtLUvF+XfbBd3HbPIvD754CPMvKJ9YU27eZ1Jw74M4/2L9Tc+/77e8/zvTvwUEFZ8KtG4Eyfz7daERfieYxzwmBdY4TkFO598FBPpUz7n8u4AgyL9jjSuOkdycfy3/tGAzLn9oDiamf0fx8AsX3eXvyfm3Z08b+RcN+cP8C2LP6uqeQR5bb0z/9h0IeuMB6OlqtflXTJx/1VOff6cSHMu/pCzzL9/+oOZ9hgT5V8FJPs14TIKjv4Jwomn6Nd5jChQQBPlXNTr/SsiL/IsU5V+kNP9Gq2GBdzz/RqvgrvP5F2XIv1J8oa5G/UXxP23x0Uv9kMr8KyaZfzuuPNkEHdTR/mu9+xck519g9bWiAzh3rkPCMXH+RYLpX8i/9fEArCfg+gz5t3V4KtfnX85O/kX5Mf0rkX9H/H7B/IsC0vl3E4Ep0L5qEMZfQf49Tsh1/h1AUDT9u4aa/kXC6V8Ck9KZYL662LufM8X5lx5OkPKQIMy/HE7/gh328i8o4gcuf+CH+QZUdMTppovwJs6/oNZg/s0O6aO/kXKIvy7NvyXFxSW5zL+IkRzLvyQv/yrLvwRmYfcFJMi/Uh1kiGE5wOYnA/c+iPMv1t/0/Au8/JuN1gWjiQktGdq0KdL5V0xB/qXlPv+ify//AiP/cjz/pnl7PSn/Dh5sO//amv4FFbFYBX7kXw1MZ7ElVYKXf02PCe7Mv37X5F/7+GOSvecLssq/Kbz86+VfpHL6N1pTM5vnX343mo/5d3UfQOXf4p39++VL/h28Ns6X1n/dl39jsQ4IFkDI5V/aVjiv33qjTa++bQEAt/WWDaKgs738S/of8y/FPdO/kHyRa/LvXFj76878S3Ey/7ZbvGyZS/NvDEd/nc6/7QnS+RfYzr+CzTJq8i8S518CY/Cab1r1WKi/4vzrXmT+9XAS+dcj/100x0KJvQ/I1tdo5vkb6PzrITmdf2m7wEs8OObxAHc9vLONzr8eT0644B+Axz1E+df5c/rPZ02tL5ibdUj3gHk8ih+4pkz+nuDTvx5PXjPzb96ec5D5N6d+AU9U34jqcCCnAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-color:#dbdbdb;background-position:20px 0}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.vti__flag{background-image:url(data:image/png;base64,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)}}.vti__flag.np{background-color:transparent}.vue-tel-input{border-radius:3px;display:flex;border:1px solid #bbb;text-align:left}.vue-tel-input.disabled .dropdown,.vue-tel-input.disabled .selection,.vue-tel-input.disabled input{cursor:no-drop}.vue-tel-input:focus-within{box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999;border-color:#66afe9}.vti__dropdown{display:flex;flex-direction:column;align-content:center;justify-content:center;position:relative;padding:7px;cursor:pointer}.vti__dropdown.show{max-height:300px;overflow:scroll}.vti__dropdown.disabled,.vti__dropdown.open{background-color:#f3f3f3}.vti__dropdown.disabled{cursor:no-drop;outline:none}.vti__dropdown:hover{background-color:#f3f3f3}.vti__selection{font-size:.8em;display:flex;align-items:center}.vti__selection .vti__country-code{color:#666}.vti__flag{margin-right:5px;margin-left:5px}.vti__dropdown-list{z-index:1;padding:0;margin:0;text-align:left;list-style:none;max-height:200px;overflow-y:scroll;position:absolute;left:-1px;background-color:#fff;border:1px solid #ccc;width:390px}.vti__dropdown-list.below{top:33px}.vti__dropdown-list.above{top:auto;bottom:100%}.vti__dropdown-arrow{transform:scaleY(.5);display:inline-block;color:#666}.vti__dropdown-item{cursor:pointer;padding:4px 15px}.vti__dropdown-item.highlighted{background-color:#f3f3f3}.vti__dropdown-item.last-preferred{border-bottom:1px solid #cacaca}.vti__dropdown-item .vti__flag{display:inline-block;margin-right:5px}.vti__input{border:none;border-radius:0 2px 2px 0;width:100%;outline:none;padding-left:7px} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-eyes-closed.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-eyes-closed.svg new file mode 100644 index 0000000..f417168 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-eyes-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-down.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-down.svg new file mode 100644 index 0000000..f4d400c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-up.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-up.svg new file mode 100644 index 0000000..71be32f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sitting-tail-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sleeping.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sleeping.svg new file mode 100644 index 0000000..446ef38 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-sleeping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-standing.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-standing.svg new file mode 100644 index 0000000..90bb91b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/foxes/fox-standing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg new file mode 100644 index 0000000..8464cb2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg @@ -0,0 +1,50 @@ + + + + btn_google_dark_normal_ios + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step1.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3729d1ac1c7c3232e032a220ef2a19cbc6480dad GIT binary patch literal 21456 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 mBRg~cKlKRtC$xh9fa$p_e{*2@dvX3<{N?r9H<0 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step2.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc93bea230dd6934bab01d857190fb65287569e7 GIT binary patch literal 32661 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 N@?rf`K+w(Pe*wD>v#tOD literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step3.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c612b1c2c8f9b6882a226c7bea1ba4bfdf4ff4b4 GIT binary patch literal 34552 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step4.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b65b2ae75c80c0a522d2066eb96bba1c5134bdd0 GIT binary patch literal 31264 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 F{~sDKjz9na literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step5.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6e1d7c8eddfa084097d6b202bc693a1b61d7b02 GIT binary patch literal 24009 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 Nj&etM2=M>E2>=*A)4~7% literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step6.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bac348190f4d07ca9dfd08d4746f6c751c15c37 GIT binary patch literal 29517 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 D7!0%5 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step7.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a2e275d887632e40d48fdec3bd7830456c036ca GIT binary patch literal 43035 zcmeFZ1z227vM@Xe1PKnoU4jI62A|;W?jGC+hXBDf3GVK$!Gk*lcMb0D@=e~|clX`B zyLh?fFt5+ZVCWMNW25U0sfkv4*+Pw&PJAQ zfENI02$&ZDcwU3D|KQ|g$IZxS()owzD>I zG9Yoawz6^LcI6}cjX5_Y{|n4WM)DhplO-P+=$BLybs2dQAzKF%5_SeAdLt$dW)coI z24*%UARCa5goTNjiIJIwk%^O@nTea7lbeZ|1`azf9D`<;%MYxZs%lfYeVvjqk*BV zvlAZ~q^5sT!P-tn<}Zx@VQX1i|I+I>YDXtUlfPEuA5uFiyV;pADw;UjIy)GdK*-5| zFAQnBe=X=2A*43kat`K@PBE|&wl#9LHnDM%5auI;U>J3~Y={ewS+wk^85zoTC4-EVqz@iGh=?gR-ry)$b!f{)4TPt>XtFDId1paEW@y?{b{@!SO%fvglS zpn48LTNWBInfcbE{4QN^xeb*!$WaQf86!MV;> z<1C8fC)5ddvUb{G%pQvdk@y1o6@)7+)T`er^x`ENIutbN=P^YLW{?7eo8g;Rm1JLF zeA`(ZlrXVQ*4|f$$q&2Y;An`NcU`aj zR-P;V#9JBp?E`TvREQ7krr`hkfEXDhKP)|;0sTpsM^Nh1vsIb=o<~_2sX76g z9#k!*_@YpmKMddO(EfqtD+UMOe)YGno^+MxK<_tQA_~fKyo~zmE0GeB)5As#!Eo$J zaV@%m#d*8q!e*3tiqN85CfMPQ{8l>YHJK`4X)(zWN;V}Gwqp(p%f3>Lz*2Lo5eQxrv{0WKuA8 zRx)pN59yo`EX5n+4ERn)t(49wz}K z3#6_I5kxAsp0RG!hCbsPrrGMUxLJcK!eN>Y)00;Lj8062B8&>Rq&4qBy*?t6SR(G z%jC$(=x~&F7uZtJo;Pl0V19rP1r*qcGEQGL#{Hn(nQ3`vXQBD_h8+)`r((9u$|$i> zflVbVjl%cVD- zrlJU8^#;U>(h_V7`}3uYJf+{}Y%dxQa50-Xc;5VsYWG7LM>I8Zjqp9;#5VBG?=&ps zZB&lOKH5^XQLD_KCJECjX7{Zp_|{Y##0dtzYT8EcPG8sZQHk0Yam+_92&3EC2}G9k z$!F_b2(v!4bhdHWdL)~=JMWh~Rm=jLx{oEZQErU&HajrX4;@Yp^mrh^gqQqOz!Y9E z*4;L9*CkY+YqYaWXyUE&;E$P*Dc^aKxtCuiRa94K`ub{5vb~9;x}FV@ZUo5xYIJBy zWWHRt&Z`AEF3HXjBP6IZoF`_etGn*LX{q!?reGo4QrWWm#d}4Y{c7X`O zcg)PE6_!J%rXhJ2RjJs9$Lu;B6_hF5wE4(~b#wXYazd&zwULHfG;Fh%@J>lnG@T|r zt*UVvl)bH8iTCX~qxpto8+PZI3YcnP6a9F21jFpIh9z7@ec9Qmqe4Y{A_co~w(6Gw zsR9a9M(`SmNuY9_6m@m5{_&4e_u)4RVZviFvq@yd>=kEM>qcu6%Flp}BEB?B6BC=@SLVL-s!ulg2es$uRHF@9#FIamMZN?3OA|?$36NQSa)M<+<)|&_7t;Q?Fg7h2 z&&89WOnLTku6%X|r3T7?E*j<)0#dv3)&^Mt7fnDX7L=ep?UqtlDo*kfPU85BcT<=1 zV8Zb0Opf=ZQp9Q7Nck}-o&cg6V$lhcEx+q*qxihE!JRudqE@UlHTyV(?)W1-Vkl;`rGwtkBV6zqGmyTd(=US=|nZ_rE z=VqXo7Z9Z>pkOepR+OA>cF(S~E}K}%tNvh@ahK$NU|yPHhyPisywRw*Xm5$)s_rKl z=g+Q1hf^sA9YCadUBG-2HWxVo zm9rg>`&P(5#b=x!8JDn2a$+uZ^eD!5zc8ss=g^eAQLg6u80iMB-pLk7w?UtJCvWGt z!`nNUQd)LalB7P3B-ujvKIFZkZg5$Q0txj9VPl%!??Z1=cS8#Dy9(9y*OZrJ}=4gwefZr{`{CH)pT4R#Tp+=^U@6`NY;x z`hMF2Xc5lfNn42#Ca!@~2jquiXKo*L+_{@BeOs#R78n^KZlMHk@?qZ1^6PADu~Flf z5w(NrRqJY4&>@ndSW3F!Bs*Nck`2Pt4aAn%sM6&1}%?6IbjhG?r~BVRzagX z?)A-yS{e)-y=7UsKGQYiJXch>c;9Qx-mrFH(n=5jugT#bw?<;{ljYAg2k~Gs^DW#D zAJOBPrUnfsX9l=JCBGsxJBZ)^#7_K);n*e8-(6uy3A(C=VIpw>8=9HfyO=FZ9@a*C z9)EqDal{H5;k=9xN~!fS66+--7q7K2f~&6gYU`?qrxFCOSfFHO{MiEhb;)~VJk24ldIhW33VwJE~2~)g8#k2$VI&d_5 zp{T2uTdGoQCOLN4q4Ii7D8;Pl4MhjvwMnuKz7FjC57hrO=?H>yrh&v?FN;%bO0$() zY{|vi(omz%5SoJ54}Z+1z9QZ=Yl_+|<+*Xa59ZY5@Xy+bmCXAriH9k^tQh!>O@B*z zX!GNhPC&GtASi3PfhykFgIA?!18XTka@Y+S7e2W{1V7StpxWUnGb{kxJl!SBaK(}s zn^wfpswY*7TaR{!+k~c2xd7@_9Js1CJb;1T{}}EZ&1zrO5twwky^`#e6mQ4$6IKR~ zszpfZ+GpU-FCA{MG#bf27p~rO+yxH8r$T0LYcM_%BYjw-i4XpanE~B6YiBJ z**bUaJ_CePQv2;DGBv$KtA)V$stl@SFtY47f%;1ao+tpUUG=B@2w4s~6+D|RkrqBv zE!sC-G75Q=rrf1E{!7R2+6$0o_rAVyuw5^2`Mm$B1=vF{hx-g5o9s~yPPTGlckeMQ zVvs)9u>R~m66U6rJ@KKxK%^i=T8%V3D^RT$4a!p@xng#$)|fpYl_NHpy<`-FFw|H~ zQ>J8f3n+!iy^ssr=$$SnSHy1K^J4~<3TJ@;w|_A`f6WP1E@S74=;*1$p)R9?6MBJF ze5?*COhAbwN^G+fUkpf*2_s=*iu;xoh}7i{%iO@Px(BKT>G7D@Ap)bpYv@-4vWUMS`1N0$0t7I!|T1F(Zzt5BscWaEv^~nKBj~_yB zKjbfji7>zDBUDEdM!7}R0F_VH5Yj3&?zc!nQPNRKXWS*L!& zhnT5+*sVxy2(Gop_xW~uF@A;$ywf9tMY?De zM#kUu3?|?l|9>JG!TqlLe$!gv$O;VkB51p)_SiyhfoL7J=yK)%j0_6C)J*+pR4LW> zgi0&1%AoIlw#t@i6X|t)T`2#DWS0Jq(e%I6r~h8F;5Xw!!3efTGZ`cPw=y`Zi^>9M zPsUhw{}uyc?k!s{JPzNog>kBh5*hmUXfy!dfO9CKAwA-8F^Mm?me|YzvJ@)PB08md zPir+OCYpC+*9!4>LipZk=g$DUdDyB_uMhVH-qAfP`7IYVnlmIbHQY(fXm6Ocut~yC z9IW7bZSVy|2&P?Vfu5QbTh>Whytp`dh`#A5APh;VG&9D|Ou}7*&xke&1Q|xkgGoufO4em6=YE)e z^dHiIEr5gL1?{1ry8m(M_eWVaxQRL^srn7*4_5->@EY=^JV>GFlh%-d*!(--Jx~(F z;zuN{gr2)*K}@c4-GHE^-G8ADst|wMym{+fS3d*fFVj!SAxfw?(O)99`@5Q+y zP?R!ML<~ARg;sO2%(S8uj&!&Z zXq+1|CicR>TG^R`<{U?9J_tKyts%4N z+&DG;`KKi4=G#2}a$Tu;w_R2Oh0Zq<>$Y4bywTNhxH?xEQ*)sQ1o>qtO!N5}Y1yC) z&1-^rd87v!4u#Llf)S%zAtXBuK`HF>p4~<=#os63Ua}N$hoyMh;~NSg-jgA=aoR9O z8NezP&cQiZs?y0$LR%(E=%*8ox;|cwq(u5}6CE5*78@Ka`Y03FsZDHW(@35z)bdmY zbiV9GI^GeGlM;B3+>~BZswF?Z{|YB`kx3KYnUIZQF}0{;q#LzA_{z?c*~+dRCP;R= z!B()a%wpb7Gl#9ncYZUBOo2-(arP|?Cmo)&1CRgate*_yGU2V2Mya8s8pSGAi>{;$ zgL=+K^-x@whH)p&= zAbVkUsLte9_@){o|8;4`@gaYeQjZ^%s#iHGuhZdkM!#_@*%D3VBXX8wgc&0;f4A?& zw&_5azvi}7xvb8W*qQi58mj4Cf;19z4KAP7wHh1QZF> zS+F!*;vyM__~~D~fFW+~JSE-&nY@4Im|T$=0U?EP(8VAs zG4a^KkVKqd&xIKJ)wSp;U26=g_meuKp}>h3u_ ztm0;vPB&33r!ifqG3kuUcue6}!nTRGH5P0PB$9|o;O1E>0G1-8Un0wGMu0ssrP-I% zQW(q+L>=sy2BdrGHVzhMf?smd;Z_?S^l@N5UO5sZ@!b^l=36v&BdJMGtTpLug$5MV z0&$>|UFUu>c?vIBa!MlbwvX_iW>2_n$1}*hN3sbx-(Q{Rl?Nx`GY?GuSe&4)6T=lQtmlP&iS|l+>Mc6Iqpge zG!lDMt;DnFbh@&sJPD(nf2~IX4EJ--fCBf?o6paHFL0N7g3ka1lq#>P4TT0&@0@Fe zXMmiO-bvKMgjkIG^=(3Gn=*Ho#oz4L|HTbz#-`WC*-?J^+3Jr8;n#!ep=#zRB%3gF z;MKp75DVC4o(@p}MG`59<%2<)xmbS6 zC?F+zum#P~ry<6q6BfMN?}udC)_-+r&d@X8Rk7O`&7_r00Wt`J893ICc-mZQv@=_% z&xM&${86yS{bv4c_yfTYyNv^#djwXdChSkMtQp%VOPdSaJ;}v;cnk9_IngIU9m0r$ zqbrEBSd>RA?59@c_0WVcZJDjbm=1x9H4GE+UW$wA7$K|c2l_g@VPS`6pn?Zj!kI~v znezU^`ALh~moemcoo`-x^nB>jzCU=pGIPQzc9<^h&?qjj6my`lNEHt#?nYK+9&F|< zlQkVa3G;+|TRSjyaOUr@`1PwO`}+zlEK_FcxrDb^z1#2z7}lV$vsl&KOyy9+NIqoO z1E@_iH*s<%&jqll8$s$1m7p&N(@E;)mKc*``8C(ZnW#*Cr?I9T2X~#%tZ!?vlb6MFvU{9hxK$hD;EH9+$z^-$JYfXBysb6}gZT8mc=TigJW* z;*ue}92$-tXiBd8y&YkNRGXcPMRa*x>^}D3relA{hv~lOgM0hiivUp2G1G(CZM23U zXy9CqLVfZw$+JD%B0tOV6_;!|4)d$vykb)37}gFO+_`Y|fZ4?ECpJ8zYazl2$}Y~! z#3M`2OG)m!{NjF8gaLQYkMbR;VHINd(9(26$AL5R{$@idK@Qg}Vng#-Wp@nK9Vb{r z`vKpm%6iVA2q+a+?Gt%IDm_ucNP<+ZoeMO+3Qra|LQlCRi-c+}e@lWhvt*iW-;8vH zbwD0@PXW}aTAKrv1}#n+WJ*b24x(Ekm83H%PNz}Ni`yjY-)7l1MH8lc3Nqs1Mv5qR zNvg}w6VcMz!e}w2SBxuQ2~f}YgcqJo-AO=pwB8%vO2*=ygH=oH5>tz;KXYlx5%F{8 z!fuRC1m_`qtFrmVx-pmO<@Y)Pq zD>a;Rj#SzjMmJrDX};=UkVeM?eOM1Wd*E;0xA=vi941H1{#b9C0rT;F zr!eNaTQH13qaUv@ES>e7i_83xe;%X{LANf;qmM$#GN;Mq|Ai;uZ%_fhJ>dTF-(Mele}{+NT=5XNMA3K# zpbMOVh>CZJ*9@-Y>a;^S$xtTK_5^m1!k*Bc0ZAXuqI91DtQhrsLFy5Lf82%si@e{P zf3cwAc%P$m`8-Wx$^Wef(V`(+_^alam3-)AjTMGzxdjw;9|dvJ(dxkwpPx;R$%dnX zZy4qlqDkD(BR0Ke&NwHmcn~YKzjBfW_gwHy-n7F188Z~{qJ zEz6)0I&pWg+R4cH%@wt?%ai@|-KnR!-Gklfhl?n2GzD0bqrqq^N8QTslC_)(Fwd7J ze&|PX)YZe9CLS>7hG^6bpC(I!ra*(*+`@&2Uamp8A&wu8B+h!cI(fJu7!Az|H!2X{fs2WuSX&uvY{z-m^s4s@duPzy8;xnfS3saEn2E_=nSJa~v{#I)xe zwi)*b+Dp{N3t-H*=?K!dK5~w*cz+Kg#|9>6GX`+Qo{9M=UCPlpY^4u2(tEuNUVB3y z(s#HbLH@9duts%6-d{a8aL!d7qDOZvCS(x~`nziVvs-9tI5=Rd-u5Aa&eY+q)8f4Q zO|!7|$04YSJ^_`xA5Ot=aO{)7AfZXBcNgVChIYeABpeRM#57hn#6}sjtB>NOX-lq@ z<%qpsv_wy5u+6%HMTQs5#;~1;>|?)eXQn?|XPGb45fd)NNiXRED?t1xXmKi>FOqqb@B81}LJO_V~=vHVjZ#7*>f%Q`Bm zkVC3gEoGqvb5hOf=`fnLA-WY|Dn@5lQD|0?=|J}9TmNNPGM!Ct{nc!Yq}cl5yn*4c zgr>D7Pi|?Q6YrL&Ik6&lxuS`r_BQT!`G?NVS5k+qd$%w7RmZNceA6`==~M^v!F=R! zZS8kDwx=vydODZp!-jKmSA`q<`*V{=Xjy;zp!pYf??3v-Za*?6*-qrmW5$PMRlwSO zBifUA5mI3vU(q>!_zc+b7b)I*RXjCS0I>-)dkR^7cc*sObX_}u_`#zLNX2fxc)o@aWuzTE=>3GgF?hWBJT(py(IE@Y{ya`j zBn@)X)dk40uafFSQ#51BL`N++T+<5c3|0&bQ5`+Mp*dY}BUw!zw`w@QzDrb(lCIPZ zpX%s2_aU6qti}~x;UR~rPWK3$0adqQwQ9yhF)ezT=jHA-keIu21SD{k90@qAJPZv} zE{7M;YVdhoCYxxs^rd~cWU2sK0J#_#z5+K|BPrT38^KKSrh?3b+Sd%Kh?e z`O6iYW2m&emAuGrdHX?hc(_NeF?=zB$q?+w(x(o0>8bvyd&nJ?VD0U!pJc~dW4H?H z*;#G%g^JD83Y!?rOI@2Wwnx^;^{m*O;H_eOak{f$r%j)Tlbau!);?n9p$!YcbiG7Z z>e|Un2nc9KrwHrMfS0eU9pf3qba|khs6r*yOS%!ZJ0w!8jDm#pZ+=etIc)J!Qfq2~ z4NKlqe1>s@g>?<1X{8?vGApj~W8U&&dcBQLqVzgWx0oPrXq>Bu1<2XeTVI?DGb=6* z*^_@tMx&e`8J#mG%HXM}ZfZqb&{-*jiI>}QWsp-Qs;K}KF!QJCpKT_7bZm1U*+5<$ z5lXH+IndxrG|!`wmYx_SL~vT~nw#kxmEH1U+0p*W+D-_pe@pR=DH#h99qLMO#Yo_L zVMtt2GVm}=(w@wE&&)BAEvarTPjR~%m;%DF?htR^u%|k(QqHE=QDE1|!b}klsXX!@ z;s#gCQx;S6mg7j!gDJ_P__>UNI!0#m_;pKwRr=ZJ?;_xnwa1p-R(~3-sG!pVw&+$# zYf|c-B6-|nTruY`jOX61M8@caI3d5WK0P_vutn`ptZ>7vw0pGTSk2w6q^~-d&qq(D zuMKEQskZPE2u-RPZ$L_AAMQ$LtqzvJe*iYk98#aqPGmVbl#L}O(T7@8U1%)8%OyB5 zc_6xEVi(qpP!4~tHg;hQt`kry>e0gx4Vmbx?aI$ZbCeBg%|+F~)qTi^Mj`fG=<8)> zc73O-hTfmdKctzDl}cy{W|!fpO(>eJCQzm9bVkEq#$xohy3sSDby`zVmhSrSDX$=; z5;~CpSb#0uMhWGv+rymd;evDYh+QVR9VJB$S5_9r&`(Vu!#E6`a6xY|0j@Yht%ZsNLh zQs3Fr>}utMa|eDJmSnTRMryn`wT|+y-*C2Rq)eF0!D9&ACB|L{D_l@0~2PpO=zAun6=&8$L zqVAvBuljNt@S{^+N^gzguUZGGUui%`744SX>JC{Q(x`zQOz+2Fqy2yCV>5=lQr$|^ zaUV9Rg(HIfoPmq802>|92Wmyf>TdjDd30W?c~v|WP6jkK-$={tvB+dWONcm-+;0+MeX71j_mP)1y1|AM^o`r$W>UXwwJ-Owre*BXsgu(r!K#@=4 zs~BiJ+B=4_`O@Thm4Xb9lipXQC%|vK3~q13U`>ZVMOD;U8Naz?kgc?-ZO4~sjh7En z@Ezo;Zf5Gnk|1J1KdzU(39G}&C^!02il*|p8)vWgAKj2>|L0<`Knjd$&BY_D!z{I*v4s<1)wh>-%z$Xsk{69Y9) zdJ=_otNrx*LN@Xz%vuJ?$pd+AJDrH^m@-@8B#`Z8)zI5(V+L75T%EH<#Dg=NEP3%C zv;N-T*Y?qY^3>-ukpzN2IVi!dr|qZc){%YONzp0n2A@XV?E$_L{>WxnrVaxO_(XZ2 zcZkN}#^KoQ1TEEX4uK{mAhw^p>2i zIZJCY-)!T~ZFES@Ns`$&qw-`4xv2Ksn%&zlEer`QNuH;l$QJ$Ns$`M^iGJJ4x{Gm- zT|nbYdz&A}C7i^8`Y{6yapXA4E3BztDk1N1-q5OQDs8@M+qIF$gS z@ku7f9zIPCk=15MBAwBj?^ufVYjU2g7Dm2FYGZ@)n(QZL2ZGa?YK^>*u1bq(_$?Zo z*WX9h^+ivgA_@07_}(d{g(M{NxN*}RiurO#doPxzq%@h=inYBtUB3&$8;g#^uPP)| zBG7npaordx5jAAcNqE8+SYl_e+gflxJgST<&sc6KZU@(#ekU0V5Ar>B=p|2%>|IKT zz@afTVxs_LzddgL=v>l=k&q}oE=FNrV;wC#&vILG6MdkZ z&uL1aG>Qjoo6_jGE>)QT;<-nQpbcZhy1lc>H%ka#E98-hnHM6(_7o7Q=$6Ca!;~KW zns+Tm*PRMC;cMpNm^pSak%85M@Hq@;3zzDG#vUmzn?oMR`>J5CyQx6iwhQCGy9aT z%G9O%Z7c!~r`Ab)_*+d4>)F(Nn3d&RN5t|lB<65!ozq?V<=z95DQq%}@lm!o#x5H> z0whWe?J)L)d~{OBrAQ= z8Sp53>0fm^)ubq{i)Ni|DE~nc?CGvaYG8VE_d_V>%sHuQBF!iuztq?)Cd+Nql~hx5 zeRjwc5_9emIUK%#Y9v50|0Ol)&+3~!r zZ+jy26;MD4BhCV>Z+^gcle_W)l?{7q`MPBEyc5Q{i4gkomS1y~IUtV|>3z!@8McF+ zU$Y$-&(HHP=SYFq$cg{Zl=)@H{L{qrxJNuCFyuGz5^iKlp9&)eIypx>F?|yhg)cYQ zd)eFQ+cR-?`e=WYVPEsm?4#{bKwvGvNIXNd2m7B9z#UjP>HA59DliAbErMo4X0-^Q zHLlu}-c4W)hf2>Oi?ke_-B$|~*Lt-#a32Zwq$@J%6q1pE9$Fx90?{9|hIGvEb__iwCWlOjWFB_4G) zp8;kT&w%eTi*kdsE1fs1=L%!0g>L^5v8MN{E?@7O2A@Wzo&g_|zoo~iwFRBFZ)Ind zD*C9o`OM9?onW|NoDE!`JaO?(I;j-N?Hx1T^Qb*RH2Ra&*KP$n#mecw>$BALP}TAv z5Q+Jl(0^AUn%^WYJ6v;_Yi?l30MrYZl0}8UWF^8!L+Zh4xXHGX-9skZuMH{9liew& z4tT}OlZf12OAK7G4Zbc=__R=194e*!Y2ki*{0}f>G>u?Lk;D zq2CgZ&MO4%&CKbfNtT!rr-P|{4z#Aat9{naAT5^#y$XNVdqT)5AS7_|l!rC1t+K{q zzM)lkXGQ8@wkf{6$E(Ka*9v|L(HZoMLp%;~i0T3xP8fgVME=uF=XHS(B$%89ff^2( z?vc)aD0{LGSFA9aB}$3JgeXsNfKS>t#yt^=`jQ1kVb2&5g68|96F?AbwrfoEPbmKr zM*o+f;i6F;TTk%i9!Lw~vfJEAUaGz??qNyTCb~=$CAI!WvQeu!573!{=}uLY5Koap#S^KzIt?^{#<_aXWmPar^YSq!XK5Yl1eVa-XTw zDG(;qAX*}a#fq>!nP^adhs;l7b>^T3eF;g?TDGZIqrOyAa+JVYf4E|)iOJM+v^FFe z8mHe#sdRAOeAGzZ13Pr+>nO$5D?dTHO3_19f`~BB?^ani{8nI+rku|5eNsaS8|_l- zi%=1*mtSxK7k_*fw?T?cNfNahdW7TDj(2}5%o{Ax8YM2F7}m{fT0^uC6N^o*4EM7= zIRO3m`(FM-7yr}s_}@T~3WB86$962=P)r>AN+@b`R)(awC8iS)ws)W0pjzZ^5NRcB z0^j$ijEk}LsL?gWL>n}+cx{a%;?rKCI?-2FJOd&*RM~) z)(>%daXAbR;wX0pFVki6sX}DXIP*T#nU&4W?xPj_*#`LQo}XA?@^&Qwc3HW(R8ewj zPY4M&VI$XK@(W*fVz{olNhFuu2ag%%gN&l(M>d`5hZ-Ge3!B&bb9O;g@R*TU=FfnZ zUbqeLT%eg*cj6E28LvZgC;ELnOAs4&%^ujgoh<{sn^sxhjim=Yix-JS)Ot92;)c%eIVXQ)Aisl(p7#q2iVmO+Ad~j=*S+sC=c7r18o{Tgvz6*{aOPtc z?Bz<_W2#3j$|0&i*+c!o{!)R@2j54R%{DXLL!obep&H_0PEKx-4 zfWfN58-wncr^WJekEj`^2!Yr#A@HI5c>XHwn$gja$5tMko6>W(I$Nm46=cCiFo(5WsPmsipD3zz&aB zJ_AN|manBo2_*x;LO4Gs3lozoJ|aPa$XAS5S-Eu-9n?>;MhL-PbF*{5nn2}S_djYm zw+#ogdaNNPjE8}*GND~%1w|y=M`!#ImI=gqD>|hGeN19JQ%$DLiUEdX!6u>PIKu%O zj44Yomu;|PPzqhG`Yh5ZSLp)rCQTcr^uk6xK~NFu4( zqs~=~0Tn`4%SpR>qld^m6GKv$8s#Mzn~3DTLaFim@bVFEJu67AF-U)|JgBBn|5I8c<8foCEg=p7Zmr(eR+R03sAY<&|Obyg~dYsWmG7=HAK#aA`Ud0;fAjkLDN^2C^g z5?PL!#Po1wx2bPLFMSdgHGq6gVRmRJVx~ZeHNGo&f>lJf-#hm~ZD4sW`$3wYg*Us; zQ~sWjw$IO86h1sfI51|9Zf_iA`1}r(7s%EQ+d03z9;rHy$_d zn>W++Hrw0sx~bLI$s-mw$*pp_jw@Ozhy_*#ZrceAj42dEcG;UI z=b!wSQGX-#Xpf4GA3=wO`Hhr$O>97F8y+fvml#7glW1tgvUl+^R?W;upid)H11qiUSTY5Ci- zw%gV&Nw)Uf;osgPKkx~5XN9D<+YDZQJrv8i^T{(Xp>7g3-%fLTY{Y}M68`l9nb`dq zaJc=XHTeu!5V#YJ;=gUXzwjC@(^D0r_{-jT)$7Wq-~VX_`$`73yX|7-{u%JVjWQm3 zwlGOB!zb~9MsdKgJ1;iST2r&3J{v}@6S3u-!zKmGC%>CjMLYiB+IpilDlxGNXjLy0 z=_5A{EDKC^=n0aqwZ@?{&YHg7w*H=2X@_+jjMGF>U1`T;Sw@a-W2lig$N>4&08xsx zqc1Gai1ns)DD9v#-GyKZ2{c;h`X&9%)NttZd$!fCH(=*oB!DV=BcicGD*O_HmG~hkd{Tao{*nHEiM5mUT054)Zv=a%oRFVF(`jEboL~M6(({WJ(o3MEvo5%DhufrU1J&pD# z?*)amo;JPcJ?7_7aoyP#&e+8y5?EJhk|nDhv(a>$cf15VH9MP4c_ZFl9M|flcctmM zL^*f9=5@5g;GxP`ZWmcGx*W=Le<}Ykju-K*ot1uZm!Rbc4cOgU0}-Na0GL~*9Zo0>+n?9#E6nhpsvD{Xlr^4mbgC(?#| za>A+Y>YKnYrn=#FTczG&@$92!S+h1IzAV<~e!~aya^ihWq1797R5kzm1%Y+WTYdlS zJ|HwUs2fYMcy1-_U<>@lV*cc(}0x zF;Xv;Bd$wx&}syWi%UGYCLfw1mkl5tC1dVTgD~&uZC1nBuAuQaSPz<@tW5Vn1eH3; zGWD3aJ*AyAfe6s}Jx~sw@a;>L?bvn}S+pT#kind=QG4r=T7zsh&fbumpuSNL1lEqb zFeNsVaPHnTY88IoCrV8I-qR6@^jX@`$qVTv$DfQolxCkR$nq+GR#!~d!`w~S+)K*C z6vp=c=;-*zUuQ4q!C=69F84uLmjy_E8bot%8h?uB+D9A?lv`kH3l8fM{3`+MPh_R5 zVa9c`(`b$C@()R$%8>})w-kz0zp)!Y$3PL~LTH3{Mv{`7C_cq5dG&#n$(F*iG$9?v zL_H+7Sz7Z$m_;%vHW95-ZB+!*{MK=0$jL(dBVWKf>gMi|?ZWna(WLD! z_@(bW>e%+qb$yE#zcAD6SDNZmS(k=}pH)>96`6+=(G_Q!E7*U(hq!vb!akNU9wecJ z`Ruk`KLc)@h;uPF>kAN%mI$elkM4CKepV>#PDC&X#DK<4FNMP17wrDQ>|KK>MHB<; z=`N3IM{s|XFFR8of3a9o>(Ui+(m|8HTkSc1Cv$7Bkfg(z{m>l}R~0VjgV35bQdTM# zu$QEoovZUDGV_I6Eynd&GMEQ>^vA(tkaZ}E$l#XUX+h}8)+I|pL2JF7*wj(a*+jPC z(0dK>wcrgbI@}W%EO0NZN~IAtdjMqrp~5z*-9_h(y`^Wo^hBhGNvHYH$#@gvsZjI4 zIMmwT^uXKtPTkue{y~zTdj1b&0!)KXZ;9Vn>-_-QCS=dl%u$RV0bUir4Q0e8Cgxzf zxY&yaa=7sMan<;P0f6UAxC&>3ET+9f1jE4^W zSA~xjP}Qa{=&7_PHZqIU@Y!=7(Ra}gP%*60ZR$it)!0LPwbg<+ExbLi{g0AWHox#p zR_l)0_j(UsN7pM4Ek)%m@Kd-m=D0r*Sq!|pws!~SSDV#-&(1V?qc}`0g8Jr5pEOzz zBE%TDVP)l*ad8qY$|9Q^L!Enivz2b7`-EqUiL>nU+i0p4+|`C(ZfGZ&HC$?DfbQvy z#C2#gisbvm`=obDeUlCGu&>FQU$Gyr<(srjau5yw8Bg82k~%YlA`U;sOaDsg>i+ zCKimE3R```~{Ydyd4CC~G@)R>iM~@l3C_9FXtmPN4 z#k;tT3FGbAZfD!4e$U2V7(Isn zK}1ao4C<|K~|Mj~Ce;dyo03v~54ftXz9Pg7sXRk*_1?&; zY?%V8WKpCFjew2h9-b=23B8~R`EC_ma zU%NA&cKF4G_#L^8GkR`(SPGEK|1M+>+&;_FblJ=ERO(e;G!In|=zQ@uya#T;+{ zHL5`A^060(9E(>M%Dzj}ip(!Un3cGe^|N{woiA};^*1XCJSNb?eXD*3a<%pN8w@q~ z3&q!LwKy45>w+SZNF6*S?(`~#R$j-l4J#QlpKBD^nYXBsCvJIred%n^cKFP`qv ze!9AbXgs^+;+0sjzjII=V{kszH?#Hl-l7@>YPqaz+bCDan~=LkZ3`d!J+mc7@TMV$ zb=gp<97Ev5>!hrN(7gGE=~!$6l-AK(CZGBBr~Zta`lsY)fX_1^2z2)!Yv$1cLyZ93^tjIcHbI+h+OYHQ+|^yf$IRmijUG6i zm5kf)qD)ES^c?~s)>z}M6q^ITnX5H#z2khs{wn=7a(I|O{5JsJZ1+61?;ILkfFgI7 zy^-6%SW}#%Z#dy=%ir97{KERlh`;x*qZWS06XOpyy;|%kA8NU-VtkFA26xR%r85d_ z7d~fntWdEr@k`8W!ef7J`z&Y1o29VS;rr!nQ|j$xGlW4%kWNrt87AVw#6_H`({X_- zRDunyn~0#ccg?$~EtuMCrfEURPrV{-wD^IvG9jMb8z3p^(m$|oGk6hcR7?Zq{{DC}V_{G9IvNNJUb_C;&;h2-wamxQEu+%i zdjURp1TnC+e@iciz2-hdYOC#0vHIF-Gk(`@Caf3uOox3tpr9DhOLzRT;oI%2=ROARpA6JN!=U=6eQN>oduxP@>mGbd0>l-Z z%ObCwNODZXS~6KaK_?f@4-^WXM#XKc6JL_5io;hIy6$}LPK>_m_V&7=;PA(MLyL4J z`M*a`}SHJ|b>b#+Ph;Po&aKE)0t8|#jzH?3J5$_4TybvFx;R zfZ@AUJ5T?VQF?zLQ|a@g!7pRdP1i`w`M1pA*}3m8tS%w4F>Zo~&NR@%V$&uJ&e-WB zCvh6)Aw=P44Xe;@T(M>5atjGQIvBos*y}WWfZ6HH4!@_{)Z2e0V4nKm`%}GU4snA^ zwr?o)?EcK5@sBY4i}Ku0Ne8|aKily&`z%hHqBAZW%bd(w`IB+oTMDh_U<3$|-A!Mi z>#zxFbdCr~koKt7R2otuu^TGq-92CW>N1*Y>AaM!lMq%s(k!)H`c?C{otFm#e(?=Brl8 z_XmDY2Chn{JOWE}uS!Ew%YI?qF`xMDnH-CqGIi7-up2BE=HSY ztUJwwzk&Jh8n`6)X!J58Yg|vCuh@#|3xqmeC?1&~SBv-j!?2!C# zVsKjFuoJ zsAzZA)K9A@k>f$9#-19E7NYj+bRyik%Nu_5w!g*6 z)!i&w;JEM$t8jk0a@UT-qX&mL%ctTxVnp3AnvLlqv$l8HyN$0N$71`vWN32Hp76SJ z!oDZ&Q(gev0wJ78)y{!Xt;P)(WXwP!K|;iDw-4`96qD8-7diQf2DbI!fiICS*u>8x zj#LE~vynhZACH6VxrCRlbK+bLBSVT^8>pR?+8|mB!GX`NB9HxJ2be5|8VVb|>Dt69 zq8_**P?gY+xg%ksoMGc=<`>}AK!Icuw@!B=mhj8}qG|Z3uxwb^hqL}Roqc8IuyJtCmXzR}*=p!AZpSJ9l(+X52h0koj`6&J)K+(;8Gu$ZZ3KMhRTBD} zCif0eCZ;bT9xn@C5g#%T^-Iq`Q=)wo)5bwJxBcO1d3kS_wHP&z+yamR z^!zvwpJr}{t>l;{=}6Uqb&~BD){_Wl%FG%il6y9bXc)AEW0X12U$%=$@fauVpw}X> zVO{b}lY=rPb4`5U;ilbbOm{Tn4D`Scsq>`%*fN=I+*GH^;i$b!ze2%+-OIjNL$E(3 z!_xO^J+nE8K}S=pmH%4uBKD-en{e! zD*3vF>*-q!$ty@nD7=mqCp~?+K)38>jfWxcY$H{wEHs|9`e^v3fx=C9PmMb=6uRZ?tZh2`04d(Eqv@fMKL?Y+c_?y-qe7 zciAW}*+~Rfw}Cl8N< zp3wI4h;Md@*}}TBiOKcLhrfB}Y<}<@I=$y8Y%*#V1l2@lf$$_eFQj>`voA7lYw2H> z4bCkKd|N|HT2L^)Ew?^REEn#^&;@`(Gl~3Kd5^;gud9|wLe2Aa!<>X>vx*6hpT=>) zrnHQ&te(?-BiUqe`^mx7dCZfJHoebEN`5#&2a-2Q`N7v)qDk;W;dv9*AiX z@OkpryBUoOnACubtR_Y7Toh4LyD|}ZDietsK!e$-=f{4eFy8&!(Ua8g@h5HV(R%gi z`wmXipGsAQi{r5QY)?Znn)^{9r8g_eQR{b3hMjuP`3+tc>{tHWx>^q5m zV*FQ!n@?wD&SYsHmfzExdnJmHn3{zhH0NmQwSIIp=qZ=kVWOeowrUWIAu#y6p zX;%9lG;{%u;*Z9kjxsUp@9XvmJsxq=G8^-B~+R(EIdK z9k2LZcgf7e>o?d_1UV3>-$hrql=W+5$Y6SB{tEbz%vVhKyd?1DoQO!&xSHND$pf*w z-NJl?gpYmWG}rBhxLRjN({ah4TxtjA1`6-*vrMc;t1(pg0E*HyS#QQ-vY-wTx=;ws z-OlPAw)}-|8-#&hqX}9?t+Mav>4WEMYejWrDfZ}-!K5(3z86VN6+p)+wQM4a_RT?YUuB-pYaWgLnD=rr$*Tf17iX%e<6G1y;%VWT0K+|~#u8S>C6b%c1Q0eX zX}w5iG9veH8NJYlb5HLLt$5)jtLBza0_nhgw!ZD%udDaLPOn&6)#vm-$Vu&{i3AZ# zRe-)N*<|xeEc5Tn(jKBtSjKkRw)P!O(y|>Z4VoBLgs%=nvfk;n%)$5w)XjQ4Xc5(* zj|og5M+wEF+>V9icFEdfM5=N2aBB87=UKuWzu20nLQsU1@lP+7`KKGP@=Wfo zRx)a=*lbDNffso=IZ-52s;FY_4Xn^BV7wH}UJUwZN`h2<+K1@GlGfFzQT_*45>1*o zbi6ymsJ#e3!FCQkw00QR+v`LY;FZWR=Hu_u;pEoAWps>~>?oysQX(wdnh zMR6hbw0p3E+Y7(>qff5M&w{|j&zFaWX;yKf-Fvs8l?DMlV5Y>k?m|;6-+1QWprjw=#jJE+QgD9}B6!rHZ30?Sf?}UYJGc z8-dBYdCv~4TFoHhc||GZCC3^eto}Bzn(rUr?yjC&WFkiCD+!@cmYB7bJxo)a-Qz9 zOM5vVa7bc{MKh~yWCvULZ*KpLS2iG`oBt;FyJ6Z;ZhU-x;3_rhd@5(9hE75H@j8bR znuBAJ_u$5ObWzt#pF$W_!#&FSTf_(6`s2p;U|hJC<2pXC>Kk?pm=ygq;1cxiAFg_cUvV8h_8}xdN5+20BGqeu;KlDkD2xylvv_e`X;8diBaQ&Vn*H_>qXq3N zKmMI_kE_*`nof`L2m(3n|A2D*$;BTa(Zb^nG~)9Hj!uX%=Op5Bd5Y--3vdkE&@eAl zGxD(%&=?r6ITKYDRdKl6m=!oxLh6$Fx^_CRXj(4AB_Qfqjg~0WhI6^2XXWnEOklFv zPwV=v2S2;TXMz$xR2C03mLRS7G`+4PrZY-zsMf8Il$smTA1>t`zA6(L-eRzTw=o|JO6&zcC1Z zKDK{8!TuX!|9lYsTAzzi8o=%uU^>L@j>G?0cur;tIhG&Z{Fr4MXc^jn)kLY8Mq|MYBv_nPsFT znRA=+Q$^ZLCYaL7aeB0)I|UD;blt{ckaD}O12XLF`5i-}L8LCbasG!-MoR;GjS5TF z)_aVi+Mv5GyVW+0>xv6YysN8*W}f33=+gQxbgdI35%O`yE-#`nJY=$L;+B)wu>(?H ztAD0DhFVNJ1V5HD+!EtHo_nTV_esFHPL_?i{G1`h?@+FI&N97zj+uh&uP-#Vd>X8A zNG%Gh(PSA2=-+VpxPtn|yQnhuEx&9!=flGfY`oFJq8XYKAtg$69j=9kl6aIp%#I_1 z*`+sHFTxj<=e&tI_hiQlti^P{=Hd`G$Jg!9{`T~vKRhgi8c#uL!FP9lH^cr({rBj) zziko!`-&vAsbE*~D9>9&Z5>i`__@tJ-RgO^L$Xh;kWf>L#+|hmiQ1BG{+p7?CYzi( z)4Fqu(GVN`xlXYq`C)NbhUtwaVollW<^EMbMZ1>&*RwU?41NZrM z=D&_A`riZtvHh;Y|4EG@OZ%OO#Oqs$^iCiw>%iB-fZw8+sj$?JI@mhJj&<=6*8S3R z_LSul8E{8$fL!DXd-U_v(whMs!43=%TsaO3kdh%_twaNgo&3wErb@M?x0@rl4?3Wp zc91@{uA|M=*%Mnz8X?b}*tdLo1+kR0N629YVNSOcC5xLDKfm^j1pn`-!PtAM`TFlh zoo*+^#7i67bIyiqXX8AZ1ZR8Ug_*qGjV;p;QIk7&K(rI_s=}tx{`{-3NY8!H-giWWg^GxO(}`@Ft31Oro&8g}hAStxKt5L9loA+GV{#^~pm)38+ zJdQaxuFzbQl_f3O{4jAp>)~|bXUcEz?#T@G8_-7Z=*v62-Ms2C+TY;hyX%z(p|S67 zJkaQzj9Acd@L~3%M<>5^^4RUBE)gD|xI+wcbt9{kKZv&_XtZr_-1^cWlMePWx#Swk zii><&I9Uc3=@&3+zGc=!yNR^oqNz&B(nvfy=~ILww|3ia2QeL9{Ls!9q1Q8bxbR6h ztNXP`dX)Hfufcmk+c<-i0gWQX^cFycR1ksWk=CWHi8k-PiDzsy6FC^ z)r{)YL7e`{8oYPI&3tZ8$16H3_I!%!o_<+;*fbSo1c#3wDLV{kVZwjDx-8MY0Fhba zxd)YRF*4{BJEyzp^}llxI~t4n?lquDT}bevSGtq)Od)dij83Xe~CqjDGIo(0GOaa)U0cLYeUqg|Cn&tl|uE1!F3rOpAss zZc5nD#X%Cf6wd@x7-H~gdI6#ZUEU1rX`*Q|)Bd)`mH|0zi&n$&s9-rEvJgdEwirkT zU5B_0r-!fo;w_v*`z{aE%vFL7bu1Jsju^#GH{~S?qgDEFd-mCw2h^6K>o;iczgx%) z{`qWU`Ga!EBBjyu2ndKHdm)an8iva}E^VuhFPWi0c{#;Y@^(B(;$B zoG2{5JzrNCM_7+PeiDg((j##{vOipb=J?IA=_0v^NS^xPIRwz$g+IYlF97CKGeetB&?=CctnU?hFTW*Bw1!hy)5U z^yYNOum{l90u$PJF@Js6mfUcg-#o9S0ei3xsQk%Ge1n?%+;)gI+8*}fIA|7}(=z>5 z(L$mqP011P^Vo-{kB-tH4u=Y0@+O^V;=xk6q#`7KDNLa29cDV?8!Z7 zjhTY4uRxAp>j*BIX!oBcW}XcQ>p*Ddi|0%2J#!RwI194M{PM0#UF%U$}221ikCdIS()Rs%0}; zSUtH>+YVIcAjU-x=h0riTV#Ab2iFhE#TKI}qt&KUWq};YAGDXGuKL+CCADX-1?w0$ zq5zz^Z_U&2Jtm2i7$%sTPW;3j|;8AVrz>yd^XOcU+<8fMlkD@^xv zqVa4F2QTKK9i1I2a@%7FHv9!R7gl|45TRdGJ;m(90G9>!p>L);#3%+cGM3-W;%B7; zr^XK_;y!vkh|zBpj>z#a-WthB;VyVfjG)hBCEF%-=p`><6P;u!ZI~?8DiiV=JG|4$yt-f_yg#LveT%E2L&6fh%~^cVQrBY?pE%Q z=3-Rk`Vx(|=)VCEJS84FRZs2nL`H+wurZKj_Ja4prHao2FV$c004=gU9C+nsJW`Af zM9&blKpsm3Vz5q;0lf05f$d&2RgZUosst(=y)3F3>(YwzM<*V8p(*!lFM}vL4P{EV z^4h*LM}8OwH&<)8Qgqob35qvpU7xr_ih>6c!ow7#s&8+#uyhQe!Uc$wX1qno;4{2DDbfIgVepKGOlZ6-WVoJCh;mtW2 zd4e&hGmLNz)srh@{PZR^BK_i+3j35Q(Ly>Dc^`35&Fil9E~D<5P?AzsIlnJUlcw1E znQM`(H55-{3OVESQu8P_1p3+zzv>8k zhv>TykxH*@&16kmdCamlbW<4fN*W%o-be9V?lZRxqF;Y2<P^@m&osVi@rOugSCW z8B;f_pkG*tx3hDQ(ka4O7q0H-ySVtoo0KX&t7a?5aKQuLWX3qS!P3#5aQ$XLVMYgM z)couRN;kojVy}1_mr)5ip9Wgk47{@MX6QPfSg;=h+|FZ3@aP?AV~(pZ-_ zB_`^o-zK#rnEi)agd)v*fsm^oTlm*f+*~EaxF*J9)uv>gCgq-}zlnBeXaCzWsc;7u%i7242J?E`nJU?*xq(mJz%9XR!v(=a-a+uo6<%*&v z)9PBWb~WC#pd$E2xBlToL`B3|EF|aUOrx9I7RYv}H~mX)J~6p}@TqX1UC5&^{n!k8 zwDQ_4f`UE6%XHsI(Cg1@Le0ow^&f0ssYMVLKab&6W>rp|XIxP_BYsA=a1aua55#YOIK6;ONtHeOG=Pn zjXkS7SFjWTM`&;aMOIKPT z1Efs){jvJ3p$*~?MpAK>K8Yjz$yb^WJ&D5f&@)cfVcQzRFEdC_jJhnC2E#e^Kt?loQC-PJX8cGQWSiVbP<=cw~3tA2BWN|+a z)W|LU{+N`>O*OfmIr2p(YFEg&@RVFUpp{c=B9slEOsuGXF23v0>eiP`Dc!3`fb>!_ zmy;X?&a3P(+e78G|A8XFIhaJ=skwtRo}R%#Kd$a?g0^&+vq03M$=5xU!Dr#rZR{wA z<$~w)4?y2xJ0dm%CgL%f{t;ZGtyx#mSbohtDlZQ|Q_U=0pNkvg(x0_j>_s z|f69Z!N3{sjNF&JaBWP-9~dRo=dhalq1h(iZo$C#U^>hLX`X6PqKHQ#?0E>Y5-Lud@&!I6DjGIs2LMEhc@&mT+@k zFuayn$=DMro{=TQiv;?1|3qt)j78ACy2WDPF`tE-R76x|t;6={4Czen++B#$z#QWsFg)DCM zBLJnGjRm^~bK4Z8q2e|S0vVahK5>V=_{U}*GwbkzvY?bN^TH-=0hcx5g(OKeQUmj= z0~((8Xvmc)n|4GGhW}7&EaIWImBxYoou)pHByqF}Oseb-kQ3X(9R_rbjpU3@_4a?0 zN84i+796@+k{KrEwPZuE-N7~7*wT(?86oV7^J0-{Kcw4Dtk$jZYQ1%7YsvnbQ9;{( z#lZYW%OAin|KcS154WbyrPJ0nQCcRREuw|xz)l`f`@7_xFor4!sgsuTBug4_&AIPh z58O2er0x~Ni6fpHTirj?9{uJNoG)cM!Pe+X(bV)V@cy-UupkPPg7$OwM{+5UJA|?u@8=Ck@+WmcjD5 zN=R2cmHwM}ZK2A9j3sqfQtf=%9$3&+=Q`N>8lgu$v7WdV`Q-)o;lODk(J=3<^NPeP z=stGHr=oe|1l?kkn$(a&6O$i|mF{!udPvc<-N9Y&tBy!><70P=+VrNHwi4C4c?OGUNG4)O6yau=s&8 z@7*b$)XiH~z7(m2gXsaRtIJ};6wlzL?ED@L-Bgfpl6 z5nWfei92`3)O1yy2oH!emARuMviTBW@~Z4Im17)-uXI^*0?N$^=ou)d9Jfhi4Uo+q zQRFQf_j8z(F+3~J+n{rYQ6w*Af(-LhKR7))HEz;!%xsiDxZ7)CM)(pzJr-k*A=SE* zA5%|e_-)*MsiHS_t(MvX|5RRYmona+W^G19)pxdMS`+InhmuW zMd_zR_>^cr?;FOgW;{L%SyvyYut{OYWl(LJPhO3iNZNn;{DGRFDO;YXLopjG?XX** z)`}^!YcJR|qv;n`+7}7#c8r$ZRH|w4aAGY)@K~ED29W0~t;it%|^+ zS+S>4I*!r)=+);o(OcHRt(1HahS;I!l&tu_kv-VhhGKWoiVQ`9xs`dIdta#Kbz=XgYe` z9w&a_+X)Z^r(~fsu!Lk1+#ld^dIT?Cf1jFx11B8YcB6E0G8YT6S-W!c`G**9xN*uH zH^#(gV&@oZS2ULnJKZ*6WWde3pJbWxxx>hnS$6A9Ts9zWr=g zD}_{gyl4d9yh>2<+0W?XA}2@H8hF^-zyyz*zryCixXRv5zXEj<>wG@ukp)xWQ_qDk zFlN`n=X7)kmYj6EZrKo8s5~|<8k(t*ibwY{r7$(*gX0vOMuDifFB$lhsG4(G29JX^ z_~-Guli0#Lqr?ym2r+g?mz;2B^{#7YL6qNUT@8z<36fI_y7YN zG!%>-#Kz*A$tHkwq0tyP2kDG2xji0St0C^2{*xpE#@xI|0KC!teC>MVBB+G zNx>Po1=A+)6rW_PrU~2lzG%WFQ@6`zAs>@QXH#ksb)+3l`#jI;wRwWI_QHpfdp1?F z2;4-25{tBy&ZpTtPueb5dBg`a`R_lcjWfW^r*Vgz)NKNpNP%DtneYxy_S=gAzCfuYII_6V%~Iu zUavq8kd4YlA(Zy24vOS#v_#BkKS?r+IGx7wHyYp=&EYeg^diPtsx_%FR= zlzKAmO-;Ws)+Jf+QDT-Wan5|CP1oA07g3MLJQ_sr{_*TmcjV~*(PxImox64ZA?zr?+HsbV<7}K51?tO32`j;Y;4@G zGmNu~7e_n|zwA>QO_s&w1D6qe>~HMdT>x&hc#i(B0C42MRRhejkfc;n%aN|ivvQ=8 zDrvwb1+th-C$2Jdg@d5kS(}#>Er6#B*M@~!e=vKj2%U0IIbT`5?+z7@$>u>)LxWps zUBJcT&lohF%FUfA+8r{uX0GJtf zjY^!&W<2z#y{tCMP_2P{wvfH9X`g2-l@<>u(Sb+h9*-vlPQ&UQa$fle+TIyGaLq@e zJ7@j88FHOoB2PUxlER0DMc-r%Drb1g9xg=AHq%8{;>8WG#Wc*}PcZAcf1Fn5jm2sZ z=#&Ee6eEFLv?r`t7vm1IP`NO~%89CQS^ICVgYxJr~W0=}uv8=;QMc zL1efoNNdKxGi#{#IS*J)D<}M;pjk2_ZMQk01L(z9!S3LcWCcJ_KL>eyCl}P^6H&nl zY+6FhhMOwW=nM#IGu+{oOnCe)Rc!HS!!gU4UerG~Hghre>&gv7t2gb!lyI}pQg^m) zFF_xWq6vawN@f#?kn-@RY|T2bV;CS|A@w9iMU#aePQcrnbZYJL#FmhCMwGJlOgTv3 zl`x#iGQ48EyzacNLsk$eX=k&wr_Fq{T<8o7s-8ZhzeV(Qp;+vavbDW$XCckb+zT(g zLUpfh4Z+j9#DdTt4~Pnk@jjip#_t_TNo_72`7s{dh+-m>dpTWWFgeyqe#^xA&&ofs zvwpnJs@|hj8>#jrb3QH z$>R~`&Ixf*1cStpEMKn6l?lQZiaog!EI1;dihhv)#IgcYFW6vTZLC~RN1Tki^W(hm=2tClo zp%LnkU|h%JjniweL_#?`+rZ&D(}lg(`%P+kH97L_#6{g4K^nJbFtCL=I7&HVEh59H zh|jLLQly&KOxcgh6}E|>9x@UlglzGNS13G1&2?qsR^#~h7~hJq2@o9UTCdNhqUc36 z)4fjCfZ#A)N4`zWSVw>EW@2C7VuQk3x%s*)Mv}s(Gy1HmvY+J;XaGc$$)%v(Z5;PZ zv+DffWgU(3z>yGtTSq{QStphU>ID(Zn@Jtj3~=uS4cJk1jZ1{59?T*9A%9CeR+~4SrNEk{y$|hT=L% zzeL72TRX1HSA;x|UYUg!M52I=Rv=fBITvMI!+2Bg?Ack>O%+nM&uok!G7C>mQT~qhk3dk=bng}TYIj+yfr8L{vhloa0sxT4WFB2A2av{Yh zCZos(^?0mDH+0b0yOy-$p+hYi?bGWjB`16~B*&+cCN#w5R|#v#Bau?xzLMmQWJx}^ zkmYK&E8{OaDnlh0C>VgYl?GLo<;PuCn&se6g}RH_kEX-mv2HOZ0jB^*ku~Y ziyO}b?9H6rq~7_CB-gY|7O@&VdK&0sTvMv=ocOv)#?dRGWxgi(gA|TOVg`jpaMx45&Ee1ls%*l)H0`w3@#o9wwbnd34&1SG)YsnB>8mO1sT0dav;qGg`0k58Vt>>ox7& z4PSLED&IPhD?<#LyM56H5=^4jRs;)JbeUhRw6lc>cN{z>6BeQa7{H81%A}Fqxv1q` zI!a_gaq*dtB;`bEi9}wVkh}(LMrG^AZvGfn7sJYEW*FG34 zepiWcJ(vJk+@HG3XzV;Eb78cF1)}C;OSV;VLC}O7hlk?crFqyh*V3Hg*)yi03EF{=@i7|Fsu# z924Rh@~+=N5h`LeF$Ds|Wca~ka0YVZ&!;rnk7Tjw6OCy74dc{a0@&CAHArNdlCS;U zUgB02mc~J9-WoR%%3&x?Whv7EFpY~V7@t_ob;y=o#mDTr$1iFtZ3DX}o;)Iz0a2W5$!LCE!N`2T#&B*#NE<96|O#lq-7^9j4(xgu>( zcRs+#{J95!+?o5VtpxbdH04cLy>;c|+(LF5LZwIim)3TR(U2>fi9S&SVTQt@J@S`% zY>TTY2U2hx)dxMm2=l7MaBwzBDb=+TIE%seP`aToiQUi2nwr)|koLqrbSV6)V9H6l ztTbF(U0cY%vTI~6qt?#DF;2rg_natNzJxT1 zl{hkyS#t1i3L+VacLzGc@`rqv*fZ-;RZ5ru%I(BOn4>UaM&w~%NH$6%c6~H z7LRR@gV~i+ok0bGk$DK&iwKP-b@qna=>T#KX;k5v^VdsspdKcz~cf0ZK|6dS{58;9_dcxg` zBU|eSy}75HfR8qCQ7Oe6VmO*!TNR`ImI8$Hk}=w^j<}-?r)AArf%{mX#wVNZN2^6& zGDCZ#UUaJN3jK(`hZB)JW_QE%5TAsrXz;7_Q_}wduZO8XXyH6kY13R>yMBJ%%TNLk zhBmKaE6TvlbE!(K%k^UGoL!bQUK)w70P;ze$PBAaJv*JmG~(hd*H$( zqKU=AkFE~EA11FQ=N-Rxv~1eq@e~%1lG9##T0$rT?t310iN#~Kh~^P(8dg2$2CmdK zahIBw(H89U*Mro18fn1pSGB10vz4%ZPjn$4ZTak^Sgk=;-6Tl?1^KGFU=0y9$M%SJ z_8Rmc;wx4Tc+Qdj$&gkTdt!$9DRt-F9hZ!+Ix7F+dU*ak?BAm;!BvI|iqY8nx#lo1 z^>9nCv+ePZ7kDK4&^V5W_cce??Eq}e73aK3h4|kdN|G^cXv`p~nJEi$Z{Yv}G3R*T zU#4nz0_Ku&w%Htqx|ehS8;|$LZ*Fc{jL+;}mVXnnsb+b+aW#)2X~U(%Qso+gnRbN4 zgejGA+0K4q|FmsOo9g(g5ZeuI^SzY4x44{wUtx0g9Q3}y z+fKWPRoi#colhwd2S=*DwR#ss0zJY8-l2Mi-P=^wI=oT$;|ym01(_TUQcR+EZ7sx%;Onp zQr2USeFdC?QU)`&!Fuk$dLr9J|2m-1BB_o>ULlO9I=7V{`H1r?K~cw@ch~Ct4z+1g z%x$~v3F^->FWP%5y*OI|X+0heAX~g@9P^*9WS7bqi#kof2TiSu7_(^(@^xC>Ej!4NS&!7Eddf=jwPp z?wqpVzOTp~YvCfjAzk2zgYk=fMvufpH=(uR7QfkSve8b)QkkiXBZuNL(}=qJB2HcC zu2IOA7_LoK;%s%u#O%V)Xi*t%k*xR%JBjliSKZc~^Ke&*+QqULR(ug0L&s4h=vLPY z8Q+PM%<1RldU4$iBwKqzdBIz32l5;949>E&YX@QRYZg|6`sgQ=EHuRohA=l8@|EjT zn#FZWLfBx0M6)PMV?TAh7{+-doVrfOckk96?TcW2s~PA_+c-A0hi%}?c~K=Gm8EKU|q>g2+W2Eskc&a zzdpl|QTZMnMv%oVxWmYuqs_Mbov3<&$-^d&i%TCd9Ii)|xJGaSL>dJ{+U+=To6(xv zv2r?1hUxVTlbcCUMitZnAmr3A0AFIm+HItFE50j?u&L0+Maa^##+`9ei-XdG9Y5{GUY1!J?P=o?x)NlxR?o*sca7dy=* zo-4*m2B7_I=!6iDJJ?1ytOJO6ZF`J!PhlPAF&|lWfBTpIXXW2C&=dN%914BAxOJUO^#r2%-Nv_AV}PsWl|AsB3&hnVi(ON=zO{0L7C=(24XdEC??J>wo%dG zXVl5R3Ke7b|LED6n-5)Ke!z^OqZ$b+bN(iq0lc@*PNdbP3ql~1aiCmKXlMi`tiBQ@ z{mHSW%2$FxS{KnEE;Zvvi%E&tqj7+qC%2Om+R*{Ixniwz)c9IrKcAEEXm1c?Ku~^R z8PuLGwWu$hdL_k_$*yQOSJ*7ElAPs9V+Z+^{&g*lcXt@{8k)?H=8KyUIyT0Ky z^^h@cEJ~7S?oNx9$6Zp7*qNI4_6=xAHW9mo-EKRc;*g|GzY$BGgvDTII(BDEHHU68 zY(DeFi7nOYwkExcn%bx)oqkx^T-KJoH6W?Z*d0Teb+vM^BkEHhB8qw-peWvIgmAMB zR_4?!>KcYOFyFaTj0$cO$!a&FjwxColA?Aw(zq6~&IY{-86625b*4AkEi7wI2)s*> zUC5SB6QDR;nrsA{ZQI%@PqcmuTz0SBq$h*n*i{7Q~) z-$T+LoF%E|;}B{_COy{+tSBsmhuuW-!cX5@i+B?=9#e_*V(dPG7fV+IC&r86C)Y0{q|f_ z7=Bu8Nzvzgi}506ne&j=TG75N;?OuJ6)~KIk!M@aP&4fF-0t$=gE!)X zCm;J(?w(O!ln=5)Zc`Ehj1aPVs2sCi#0+>qw$RtrVw`y@39sCi2_>saUU{W_rGrm6tC?dPg_o>yA zLJHOnD??SzCnf^k!V-*)w6GYn{qEnJx8On8#_sWpld(IqVnfjHhf8$qL6QOj0s;a8 z0s;a80s;a80s;a80s;aKY&k%y>Ciz+c;dBI{Q8A?N-Sf|Jdzeejfh>@f?SxfH%H__ zQqLn@I>r!cAT!#pYQ5=Xfz6AInd})vEgZlSjF5+qbon`}yLXl60cOFa&4UBDv%6%+v5E+3@<3Jy#jQEKciPyKhSq{HF^aQbT@j3!3-xvo zR6annJw6WBpa%prf`vSgxR8W11kn_Z@)mddp%TL`KLQQC9$k{IiE@BV9eXz%$gEb3 zg@nu)81l$+le;jtNp_G?()liWcLLOwqaqtaY@>=J5yh*#4lL&+g}3Ko?t)t!oYQi} zT@~!J$xc}3if0GN=MOx! zv`#Gi4br*Mo$$`bli=yw(1WGnCH0>f#2)K&x#4hZnX~5JWAm}YVhqp_5D*X$5D*X$ z5D*X$5D*X$5D*X$5D*X$5D;Pe)IX|!nFW*t6fA#vH~#>S(PR_Y+f-kp=Dr9kpqjCm z;5a+RUp3jWW`5!fCIAx54$cMA%>5353u8Qg8^6ft7k+#E0O&5DttYFu&%E64vqz3> zxwB&XuAR8_<@pd+oABoL9sd9ay~MbD`>fdK@3LdJ=k(#(L1wqBvkwco&AV)ythny6 ze7I%(9C5?2f~;SLxOq2R7Z04bxi?uinO`<+HfGC?IQ9@kAA~p}$?E2>0RUw81fNOV*seUmrC(}D>L z@b42oZV!pvw-b)*KM#h?{hi(&dk|TFS7LbXao)D`=HtG>vg7pf;fG}fK>Rc765a4# zvc$9H-EZ;3zsC;$0HdV_2L~=#(CkAA*N;h&iKjZ{7)0I^xd(dR3JEGVE;V6lyc^eM zlPkx%$%Y?$^LBK6{{WQ+!ad&XcX)2_Y?*M&mkpR<*g=v40s;a80s;a80s;a80s;a8 z0s;aICzaxYNmvS3j9i*H*__J;$0)PAZGOTHL-P&I$h&CQ9?Q+Rcru0!h-YaxnYVks z!Enjzt z<}$9sfV6HbsWt$Ne+V~)fUSY5j*$~oh$s9Yeia`cul;#j25Mp+AVb9-@U?YR# z=p(nx8i%X1*U~OM(;3;|$RBi2HW;}%FcT4BlPmY#j>-)5{ch{&@Rhn2UeNGyPVEzm z5!o2tNd$ZdoZml#gP^Z-nYCu2H1za4WjMGz5y~t(z$r2l;4b7Y&9^BtJ{x-Q4VI;< zTB*Z~I(+vfv6~TxCK2Tv-*{x=EssNO+UOyDdTjMww7ZW5k%*30jhW(kx&}z`&))u? z&h-UH=BxW~<^4t3z~l#Dk7&eBB+kxll%J#p_L2*QuE^SiRYy*?P#b`q&C|4CQVwRt zp8~Gfz$37>Wo52@BwU<|v4nP_fByg}b w#n?6$Va>c}fBsu^Id!1Xek113S8?8_lZfH-db=TGz2bL&JNz#D56Xl8+16X#n*aa+ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step8.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/google-calendar-steps/step8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0be6f1f34da07685452a1dbe125cedb1da4bea3c GIT binary patch literal 38138 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 H-2V8IFQ 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 bnf_f-*L+bt;sw6>|5W(!e_v;bpA-KNK{s7U literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/icon-face.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/icon-face.svg new file mode 100644 index 0000000..95876db --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/icon-face.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-paypal.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-paypal.svg new file mode 100644 index 0000000..9c4c788 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-paypal.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-ssa.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-ssa.svg new file mode 100644 index 0000000..12d3cc2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-ssa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-stripe.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-stripe.svg new file mode 100644 index 0000000..a07ce1e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-stripe.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-woocommerce.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-woocommerce.svg new file mode 100644 index 0000000..996927f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/logo-woocommerce.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/no-appointments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/no-appointments.svg new file mode 100644 index 0000000..733c2dc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/no-appointments.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-booking-flows.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-booking-flows.svg new file mode 100644 index 0000000..36f0132 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-booking-flows.svg @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-info.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-info.svg new file mode 100644 index 0000000..458312a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-upsell.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-upsell.svg new file mode 100644 index 0000000..23b06e9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-gravity-forms-upsell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-new-booking-app.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-new-booking-app.svg new file mode 100644 index 0000000..412f574 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-new-booking-app.svg @@ -0,0 +1,833 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-sms.svg new file mode 100644 index 0000000..f8e74c0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/promo-sms.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/review-plugin-card-congrats.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/review-plugin-card-congrats.svg new file mode 100644 index 0000000..e67720e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/review-plugin-card-congrats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-advanced-scheduling.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-advanced-scheduling.svg new file mode 100644 index 0000000..39548be --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-advanced-scheduling.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-blackout.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-blackout.svg new file mode 100644 index 0000000..33acdfe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-blackout.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-calendar-events.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-calendar-events.svg new file mode 100644 index 0000000..0f0c039 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-calendar-events.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-general.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-general.svg new file mode 100644 index 0000000..6d323fa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-general.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-google-calendar.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-google-calendar.svg new file mode 100644 index 0000000..d5252e3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-google-calendar.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-locations.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-locations.svg new file mode 100644 index 0000000..bb034fb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-locations.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-mailchimp.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-mailchimp.svg new file mode 100644 index 0000000..06f2fff --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-mailchimp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications-sms.svg new file mode 100644 index 0000000..cff5361 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications-sms.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications.svg new file mode 100644 index 0000000..cff5361 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-notifications.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-payments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-payments.svg new file mode 100644 index 0000000..10a462f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-payments.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-resources.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-resources.svg new file mode 100644 index 0000000..4746f78 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-resources.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-sms.svg new file mode 100644 index 0000000..821fad8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-sms.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-staff.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-staff.svg new file mode 100644 index 0000000..b742ef6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-staff.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-styles.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-styles.svg new file mode 100644 index 0000000..006300f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-styles.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-tracking.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-tracking.svg new file mode 100644 index 0000000..fa87b15 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-tracking.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translation.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translation.svg new file mode 100644 index 0000000..89d86fe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translation.svg @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translations.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translations.svg new file mode 100644 index 0000000..2b553b5 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-translations.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webex.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webex.svg new file mode 100644 index 0000000..df3f7e0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webex.svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webhooks.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webhooks.svg new file mode 100644 index 0000000..d447cca --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-webhooks.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-zoom.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-zoom.svg new file mode 100644 index 0000000..29bcc96 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/settings-zoom.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-business.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-business.svg new file mode 100644 index 0000000..c5eef14 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-business.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-plus.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-plus.svg new file mode 100644 index 0000000..961b426 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-plus.svg @@ -0,0 +1 @@ + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-pro.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-pro.svg new file mode 100644 index 0000000..acb8174 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-promo-pro.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-zoom.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-zoom.svg new file mode 100644 index 0000000..c8392fb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upgrade-zoom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-card-payments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-card-payments.svg new file mode 100644 index 0000000..61b45ad --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-card-payments.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-google-calendar.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-google-calendar.svg new file mode 100644 index 0000000..027a003 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-google-calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-business.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-business.svg new file mode 100644 index 0000000..5ef2129 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-business.svg @@ -0,0 +1 @@ +Upsell Card Business \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-plus.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-plus.svg new file mode 100644 index 0000000..af08e0a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-pro.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-pro.svg new file mode 100644 index 0000000..7630112 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/images/upsell-promo-pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/img/brown-papersq.png b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/img/brown-papersq.png new file mode 100644 index 0000000000000000000000000000000000000000..3813903dbf9fa7b1fb5bd11d9534c06667d9056f GIT binary patch literal 18198 zcmZsCRajhYlWil7yGw9LaCaw2kl^kP!M%at?m>cka0u>ctf6s&e8CzTLSrGMaSIUS zWM7q;>fa~s$OpT> zFLY-GO$7j;Wl{{7eE9cF?XPU&ukYpLA870A2vBhFvU6lq^RRVx)N{0T2=eQ4J41(5=2G+8;)w1ZEPMkbF2bGnazV|OLZz2Hb@=WyXBX0)f+0o;fWze0N{t<*y ztIiNnZC{LRA&k!$ZY8RSSkRr34SfzyO1FQ1#+`5DKBGKIaW*#IpS|)H)0b)RO)vVT zdmZs``V5~Rd=7^niGNRi-KohFdl7;cLNt=6H%jET$<@@a?HPC}DI+UeV-R$j(|Cgb zovyEp&h`&JS~h*u+dsTgScW2zDVr4f~DH;Zx@cQhlKiyzUik!{j?26_bcGl3n zz;xi(8ENgs!;6LMT9?9^)|SgIm+Xu<9pAn@Jwvr@j|kU$Ps<;yJK|Ptilz{)cF~50 z>3}X}-GE2L$gd5vToUcA;ufTe+vCmq6y;EHLIF1Y)!*mMIk7Ufz`-6@{%j+0t}5by-kjAimHgt*AfoWQ3<}2%HH1G)X=gxwsGTnqo!jS zPp^mHU)Wdo9i$J93f_cGL~o081HVh2MIfFb&r#24&zMhy4-B`@-M4wqKeV5e3rOCk zzfxnXb=ed%7QxZsGFZ!Bk=ojIqXM0lz`=t&N`(ieb`uT$vaWG--x!ps=kokELG7^v z+{LRR;H>H{+#Sy9)~}T-X{s*WDIF9ko?!YOUrBL6c1UTt%|c-C%-R`h{*D&-?xTv6%U;Fy)q@zD7n;Mm&VTYo!f>`4|^@IrUrWqi<2` zIK=%8Y>k7_cJFc62Fm1dsu5V%^D!kOF(oA;3duw z%pO09{DvbtIv+U1{6MQ8Wq|e~4(8RFaZSiu$ z|CJ~BTvRLdM64V`xYr`XpzSoka%-H{0)Ro-jT6+} zT18|CY&T<`K}73~WMQMkzj<-{e`EjOV2Ch(n321C+#16;>MjIhblly|M?Br0UERMA z8yIvk9sVuv0~h)1=S{wY{&V6fDi@0c8|@S!>h`gR_^u~(f!y=uu=3o8U2>$VV-mwV zeJKl8K*mz%0O$3!XmmqEd#rW!>oY?U<|?CBsX=UMCSrinA}B9GA5MTUzn%ILQD=}Q z^-qc}to5D!{UYEBFfSF{7{}5#I2`7!9Xcs|{e!rTVYvNetFc@43N$#e!DM_Y#5_4V z3P*)qJyw97IJGZYj53iEQKK~Zk6QE|wnDAQ6e%ci7WM9yX{3Voy>2v7-{dW*|+Zvy7%^(o^DMc&%_Tp}4@Jo%0Bs7ObY$K2QS=1v19slY*WwV!8B05I;*7gc| zC}iWT!ocL=zoXCa-*EVkQZPGoFVou4>|(ng{&T`5ns(d;`0IWRE4$3aCE zX={pif)xfKL2J&CwL-rbsVhFX~Ast|24AzGCb$6bP zzjP96&p17?0`zA}Cr(1{- zBWmAc^Tih%c@PSpJD39Rtvbpc27|&`W}18q&trP3z4xp%4^t5T!T})zWON*!hQ+0C zGnKXI-(t5+$xcN_*!vy^Ebcn(`}3GQ=EjrR)jEu#)a!Qo+uU^L6Sf!vtQo@-)YCH_ zIkq!}#RQ?#H9Na)c>fA?i%F=AwN>+%6IHG_6~07@;tNMw)pj-py?fm5OAkUXC)Brp z)eG?cTAV-ODy=aRrlcS^!0S!95GOO@_zy6Yr~oZODHiWB(rYDHVW+oP+iSHanvW_2 zD+33#kuvw;P&BQf8OM-`63t1%h)cdnm8}>fIrS=425~>gpk!*nOPF^FRJ!}0{NO(e z1ANE&sU_mPMS;Pw9^8F*v5!k1Dr?=^%?eWij0f~to7y`V{K(<#9fgxsh1qZ}irc;t zApc;fE}TBG^?-(ZYfC3hk)rzA9||a50&`5$fOMODInB^CQQz-%|FVW(Me6cd&RQ!Em*`8(cOiTV*}I0^ zkh9#bz+b`^Achh+t!T{E%m*7Spr8X*#NFvrNeQKR9N#NYImXo$orFW}S#|kp!g) zC|mslRtj z{<(wk5heSmNTLQPjVu+tu`Ax0<Jp<3;sv=x5%C^te-lbQRUIA>ktvMAj}|$FYU$Qp}=T~;pv%9btR=dxklUy zkR9E*9e)3CPHhghYGI4o&yB<6Ek^@&s6_$^hHm%y;$mG#6s2Gj@yUh|7NNvbZ*-CiW>(`$PB*?kxl)}lSZKB^Wx?u%oy%PiU;Ucb|V z|JbtHI`e>wDu43V9mbmTz-O*hsj=x3p@_52uHWdv$KHWXIJ?hAN_O+SE^)}7#rG|6 z_BKM`Ghwpm2fNaI-XM&&0MIfLw+nk~2$Q9!(m1H({sIm*PjV$tD(vHzF8J^I z$5d)V3#P=#{X0~lkvdz*hO?2|P39$67m%BB>cJ;P&i?e>f6oD0A_x(fXnlhN8_iy~ z=8_i6_?scR{Q@F{<_+s`6F0?)4q>Y!TZURG@z1Xg(XF|Uq<7M}+x3!5CKzKPU%EBw zWsc%dMB{e=rbNFynyQz;$Wk>xdNDkRB!r}hPlheoBDRi4NdE0U68C8T=FwmB)E|du zu(3Ry^ER}qt8o=s^t;)ka7?Rw9BkK-AbMm!5YyN{n8j%4(FS=#^NXNFzOKvDh-fh_ ztrMuN#+;}%O*fdC_O-zikI?cL4FkQFbMJ&%;LsLdp2pU1z81byeDrcnfVfSPjd&Tx z0uTNCRa&zYgwCK{AP>=r8Sx{G=0I#zQ4SAF*CLY5@Ge_3>$_ebR&z8QuoP^G_nMbA zR!J5=NfW+bA;6g4yh|56J$}zRiUEt*T!NqU4MM$Ik(YO5ElC z3I>TTR5(&RS-e$~mJ610i3Tb|O!%oihx2Dou=SDi zY8QGbi&iMst0x9N)(Qw|m<=v9=H$h=d9q7_RC$8&xiTCpO(nAT)09jNd*kDz)xA=d zA>mDJMEO}wm=z8%##p8Epux^Z?6*hT+bBf^Yw~9wh1mOBI2*B_&;n6YqN$_sLi+`r zN+}oUEH%!)UEZO0kGwoV{fV0125Liy{XQRjOG;ll15xL$5w(ynu*BE#Y!uUbJlqhC z*)p9Akd=!p3VXT;Mo_Zvej_{xJkq)x&0<&B)@Utjud|co5aPb~dM)3OKXKmRzZ}RD zt~hR#D>70m`e$6d9RY-q2@W6QANld%IvZ*VmwpbdVCzWDJ`&UO%hC*(c9AJ; z8qe|b;=knC|ZRghL9-j+JpIpBjS zLIz{G#rkZ%K&UOs1pgA;bi1JjfXryT;9AV*AdF1(P;A$V^MMS0X10gTzoNjJBTB;U z#kJ5|QkG?|zHY}$^ddtj_$wAkIcd;Wk|&B6^`fnOL3uIPj@Z+b!gftAC_YE@sh~EY z@awBver>U-j(pBMf%*W;OI?#3J3yRO&^PqFHW`#yr|%#0rDM+^ZV zw!IXpiDk0Qo5iL_mNZlA`+m>mgyn-Z9( z1VK4OJry2Iq?o90-NhDNVAP3Niev{MJh~PQ7M5U9?Ob1#H}q=Dgn%~Ng=3b;7jX>n zADv=?=pgaOIN2G2JCr_(7k0YF#OlE0c}by4_|pb-iJ-CYzLbWwHs2A)ZY;uuYwbQMUa1ed5)1G+DXr$;MC*sQ-N@4$xD327+bTrT^ z?kmr?X}=Lu2xf7X5|gkw#k>FEC139#QtL*Y>C)kvvqB=d;fVQ8{+;RhP-)is9rX&jj-Ik zT00%|O4wv`6`(M(&W*hs2A z?qIa9QPvO>*ssTM+$((GcA1>?(C1jm10t6@Dy(k%HtIN+5d!Bk;~J%32ZhcKu$-i2gOM1Ek)Av0js<&PBErK4 zp0BqauJ^Yy7bnHdyGOO!FbWP*qG)O@I>y%wAIOX9eD)7R>ow6xlYRy-h|ZmQaLshv zm7r7H)>I5~>_i>NDSv6k)mCwZu$9K6)JGn#ni#>O5}3aMrYt7e67}_&zNlt_@b&$n z)VO|sK6qnt57(FA0!{d&$}h!DdNgOgYMn=8${CJ>S2YIAe zYh9atd77_K6soYC+WALnJL7SxqnE#(+1G`m^0I56gta@e+L0z>IRG+?>DS@Oe-NlQ z-mQ)F{=7b($L)X@jB5Ot*D*>ceMR8793ItK-tTO`iAnNm-xzYn0#;&=gXJYz8KmnUBrL#cb@ELwnkp?O zZZ{8tSRklRk}8Ts29G>v-&z?qob#qYSe!ek zt^r`X2W(J?(qxhOf%h#^?8D`^&MPbuUE9s z$80u<1iU&&+mQB<4bZeyBaOB}$!d@`^f4+iXS3;h>rXP~*FRrr)Wki^(q)&EwAMt?71xOWwtXa8UsY(_;C*7d*d9Z z-#(@Mu>`+6lrEC|=E^q^u&A=e+P9|#`hdP0Rg9`gUbNqm@!-Gg-V6vL;!*U<4ZtIa zv@cWy_^m4cV=F@sv3lCwx|?r%lb?NGQobaW&#Mi<9dngpq({-uy?xwAR&#MBUtybddE z1Ka>|_TRpK@#mBE#M;ka;RDR*2pXmP#YHG|5qh#YgXDUPD*cs3)>>Co@wnbArjo;_^QGnuQGdUSqu6AMPxBHbW99c9gHFZ*u&-M5cS}n@d z@wWUbV?X7y#NTCaqV_t*)w+Vzpte?L^08$=xiju5lCZ4~#~@34qa{rJM!{y~Tqe5H z-`N}U;ZKj9jnYas%EXCD=*$|XC$h{m@?;&T(uT--QOR_H^PcjyAP~pc&dS&v#J%KN zK|)APC-pnC;EKdibKx8O+Pqef? zY3J^)uf~;VDge4m$gh`Aj{?OYnES!Tftm1kjZwLB-5soBf8q9RaPk~e{SqHq+Gh(R z<}KbtcWaoIC!do+k`h}5s~QzJ&#Ro?TzU_eO^xAgvNoX&oKS7|-8Lm;%2@BRKwb9H4rRICqXPIQLdOMGtG>0(Kh}5xDzW z<`R5ub7|^ov6hX(i^R_d6ZdLQ5t}vu@?2|ueBl^W!CoR=LZ1Urel(cC{`jK##xJ5Z zW6m&PFV^e{7~mrz4!xy@n!O%C(vIRG0g>FrE1t+=n3;z9D!vWHCUjqMi*QAc4!hId zk9MAo2%jf}g*lzYPM7_RYQxo3rJR%jUCd5FoBmmSn@QTM@?QERM*E-uEb}GD!7+W4 z;ucS;Fa1*ZgF9U&8>R&|tjy3FH;93-Kpof^^nCm9kp4U+SFqwi@6}>$jo4)7x?L*p z5eHsG=We;aDoq*x+H6v7x39;dP<1mgK0fQuG+#L+=2<$z#m5Z5 zCEto{j1wIIxQ(7>!yi2iRgQS~c_6N5JHqo=$`q=PD?Y@90#727stD}1n!C~qy z1q^LAqT}jq4r2TFIf&-|vYu|DXI}0>^}2ev5jUXZCM+ZOWL>l4t}d2Pur%y+XM$j(Cc126Ww7ST~4S;g=2q8j3!|OoWynEtKkuUjZ>k za%azP+sS^P^KJ=|`TAdnlNkRHqn@0nFWdFeMoI4-_sH22UA`hq_xA?B;_u;ixDrx%9ajWMqLgzfYCofw8KF`gO zWh92d@!_T((;rc7)Y0;~o3^0R^ALS8opgP}hX%hpsuO^eo@L^`#d1RJD{m2kN6wGw z5T;|y=;jNZl}W2j;Bc$yGn_%Ti(Jtk4%` zDK5cCl`%fdh(p%F! zN4;@Huf@ukLx1k|0(qt;@&Xiw=4#8cVPcfFDX~atn}9jl7(Tz#p-Q|4F%ywo(jlv# z%qISsaHlw>1|(CS*2KqRSCP8NF(6NfJ>HP|lV`v4llSyqeD!0%X_1> zg{vvN5D0m~n!O3#;}}s;n>z%iE0e^EX_%IQaWRp4yx4LOzqV3T+W(;k{udVh!#EJ} zgnXu%H1P~HO=bwcbt57%T)u4QT05g9BA!O6PoHP#DPg-80&W|M33F=n@!{4j6>-=9 zl9KJP6S3H+U>;T?}#WA z_O%upq*IdOTe9b~q#{Y}07vk515LC)Il|+Aa$f}Tcr-&vQOIH)UZ$6& z36g&<+>7?MFwXUe`uwpa`gVyIwLJn~p1QK-H&X5vGa};Wdy^Q_m|$Lgl*a(g9EO{h z##w%7(g(SjboyvXP~vP72(|N1)ZI{XNa-&bPjF54D`q-}^mUm=DGk7I_a#t~zNU)> zJD=vyGTVi2y}*&qMByXD3Tn-Wj|5S#f( z1uWJ`3RnO6rh+Yy?c=B~PUJ?nV_{w6l7FulT#(2M_~r)HsCX+L?$5L39mEvBSU`8$ zYq&EhHXoxg(J-om_c-fe@=~3q#OG#^kYLhMnV)y;ZF6Gqz_mr2P zugbL0xc8{kyxRcLC?m)K&Yj$%)>_B@og|1@e~QPf=dh!p2dBQAtX$a~q4}AI9ArA; za(4@-P0mv5dlML~u;DO#U*_mx8yZv31rn3O5F4pLW;#xXKA<~u3@cMIw&h)_VR
G3S-EN>9CM!{YB*|;6wg-K3V?)eR((z#1 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/app.js b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/app.js new file mode 100644 index 0000000..98a058d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/dist/static/js/app.js @@ -0,0 +1,2 @@ +(function(){var e={46700:function(e,t,i){var a={"./af":63906,"./af.js":63906,"./ar":40902,"./ar-dz":3853,"./ar-dz.js":3853,"./ar-kw":20299,"./ar-kw.js":20299,"./ar-ly":96825,"./ar-ly.js":96825,"./ar-ma":66379,"./ar-ma.js":66379,"./ar-sa":87700,"./ar-sa.js":87700,"./ar-tn":2059,"./ar-tn.js":2059,"./ar.js":40902,"./az":76043,"./az.js":76043,"./be":7936,"./be.js":7936,"./bg":34078,"./bg.js":34078,"./bm":14014,"./bm.js":14014,"./bn":29554,"./bn-bd":17114,"./bn-bd.js":17114,"./bn.js":29554,"./bo":6529,"./bo.js":6529,"./br":65437,"./br.js":65437,"./bs":19647,"./bs.js":19647,"./ca":59951,"./ca.js":59951,"./cs":26113,"./cs.js":26113,"./cv":37965,"./cv.js":37965,"./cy":35858,"./cy.js":35858,"./da":33515,"./da.js":33515,"./de":62831,"./de-at":6263,"./de-at.js":6263,"./de-ch":51127,"./de-ch.js":51127,"./de.js":62831,"./dv":4510,"./dv.js":4510,"./el":68616,"./el.js":68616,"./en-au":24595,"./en-au.js":24595,"./en-ca":73545,"./en-ca.js":73545,"./en-gb":79609,"./en-gb.js":79609,"./en-ie":43727,"./en-ie.js":43727,"./en-il":93302,"./en-il.js":93302,"./en-in":46305,"./en-in.js":46305,"./en-nz":39128,"./en-nz.js":39128,"./en-sg":84569,"./en-sg.js":84569,"./eo":50650,"./eo.js":50650,"./es":26358,"./es-do":64214,"./es-do.js":64214,"./es-mx":38639,"./es-mx.js":38639,"./es-us":30232,"./es-us.js":30232,"./es.js":26358,"./et":47279,"./et.js":47279,"./eu":15515,"./eu.js":15515,"./fa":27981,"./fa.js":27981,"./fi":37090,"./fi.js":37090,"./fil":79208,"./fil.js":79208,"./fo":2799,"./fo.js":2799,"./fr":23463,"./fr-ca":2213,"./fr-ca.js":2213,"./fr-ch":52848,"./fr-ch.js":52848,"./fr.js":23463,"./fy":41468,"./fy.js":41468,"./ga":88163,"./ga.js":88163,"./gd":2898,"./gd.js":2898,"./gl":76312,"./gl.js":76312,"./gom-deva":20682,"./gom-deva.js":20682,"./gom-latn":49178,"./gom-latn.js":49178,"./gu":31400,"./gu.js":31400,"./he":52795,"./he.js":52795,"./hi":17009,"./hi.js":17009,"./hr":46506,"./hr.js":46506,"./hu":69565,"./hu.js":69565,"./hy-am":93864,"./hy-am.js":93864,"./id":5626,"./id.js":5626,"./is":36649,"./is.js":36649,"./it":90151,"./it-ch":95348,"./it-ch.js":95348,"./it.js":90151,"./ja":79830,"./ja.js":79830,"./jv":33751,"./jv.js":33751,"./ka":63365,"./ka.js":63365,"./kk":85980,"./kk.js":85980,"./km":99571,"./km.js":99571,"./kn":25880,"./kn.js":25880,"./ko":16809,"./ko.js":16809,"./ku":96773,"./ku.js":96773,"./ky":65505,"./ky.js":65505,"./lb":50553,"./lb.js":50553,"./lo":51237,"./lo.js":51237,"./lt":91563,"./lt.js":91563,"./lv":61057,"./lv.js":61057,"./me":96495,"./me.js":96495,"./mi":83096,"./mi.js":83096,"./mk":43874,"./mk.js":43874,"./ml":46055,"./ml.js":46055,"./mn":87747,"./mn.js":87747,"./mr":17113,"./mr.js":17113,"./ms":8687,"./ms-my":7948,"./ms-my.js":7948,"./ms.js":8687,"./mt":14532,"./mt.js":14532,"./my":4655,"./my.js":4655,"./nb":56961,"./nb.js":56961,"./ne":2512,"./ne.js":2512,"./nl":48448,"./nl-be":72936,"./nl-be.js":72936,"./nl.js":48448,"./nn":49031,"./nn.js":49031,"./oc-lnc":5174,"./oc-lnc.js":5174,"./pa-in":30118,"./pa-in.js":30118,"./pl":93448,"./pl.js":93448,"./pt":33518,"./pt-br":62447,"./pt-br.js":62447,"./pt.js":33518,"./ro":70817,"./ro.js":70817,"./ru":10262,"./ru.js":10262,"./sd":58990,"./sd.js":58990,"./se":43842,"./se.js":43842,"./si":37711,"./si.js":37711,"./sk":80756,"./sk.js":80756,"./sl":3772,"./sl.js":3772,"./sq":6187,"./sq.js":6187,"./sr":40732,"./sr-cyrl":75713,"./sr-cyrl.js":75713,"./sr.js":40732,"./ss":99455,"./ss.js":99455,"./sv":69770,"./sv.js":69770,"./sw":80959,"./sw.js":80959,"./ta":36459,"./ta.js":36459,"./te":25302,"./te.js":25302,"./tet":67975,"./tet.js":67975,"./tg":71294,"./tg.js":71294,"./th":2385,"./th.js":2385,"./tk":24613,"./tk.js":24613,"./tl-ph":58668,"./tl-ph.js":58668,"./tlh":58190,"./tlh.js":58190,"./tr":74506,"./tr.js":74506,"./tzl":63440,"./tzl.js":63440,"./tzm":69852,"./tzm-latn":42350,"./tzm-latn.js":42350,"./tzm.js":69852,"./ug-cn":70730,"./ug-cn.js":70730,"./uk":40099,"./uk.js":40099,"./ur":72100,"./ur.js":72100,"./uz":96002,"./uz-latn":26322,"./uz-latn.js":26322,"./uz.js":96002,"./vi":14207,"./vi.js":14207,"./x-pseudo":24674,"./x-pseudo.js":24674,"./yo":10570,"./yo.js":10570,"./zh-cn":73644,"./zh-cn.js":73644,"./zh-hk":22591,"./zh-hk.js":22591,"./zh-mo":89503,"./zh-mo.js":89503,"./zh-tw":88080,"./zh-tw.js":88080};function o(e){var t=r(e);return i(t)}function r(e){if(!i.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=r,e.exports=o,o.id=46700},61366:function(e,t,i){"use strict";var a=i(49242),o=i(73396),r=i(87139);const l=(0,o._)("div",{style:{position:"relative"}},[(0,o._)("div",{id:"ariaLiveFoxyEmpty","aria-live":"assertive","aria-atomic":"true","aria-busy":"false",class:"screen-reader-text"})],-1),s={key:1,class:"app-error"},n=["src"],d={class:"md-display-1"},p={href:"https://simplyscheduleappointments.com/guides/plugin-detective-for-plugin-conflicts/",target:"_blank"},f={key:0},u={class:"app-header",key:"header"},c=["src"];function h(e,t,i,h,m,g){const _=(0,o.up)("loading"),y=(0,o.up)("foxy-button"),w=(0,o.up)("foxy-fab"),x=(0,o.up)("foxy-tooltip"),C=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",{id:"app",class:(0,r.C_)({embed:m.isEmbed})},[l,m.loading?((0,o.wg)(),(0,o.j4)(_,{key:0,message:m.loadingMessage},null,8,["message"])):m.error?((0,o.wg)(),(0,o.iD)("div",s,[e.$store.state.api?((0,o.wg)(),(0,o.iD)("img",{key:0,src:e.$store.state.api.admin_static_url+"/images/foxes/fox-sleeping.svg",alt:"Error fox"},null,8,n)):(0,o.kq)("",!0),(0,o._)("h3",d,(0,r.zw)(m.errorHeading),1),(0,o._)("p",null,(0,r.zw)(m.errorIntro)+" "+(0,r.zw)(m.errorMessage),1),m.errorMessage&&-1!==m.errorMessage.indexOf("SyntaxError")?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(m.errorGuidesText)+" ",1),(0,o._)("a",p,(0,r.zw)(m.errorGuidesLinkLabel),1)]),m.errorResponse?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(y,{class:"foxy-warn",onClick:t[0]||(t[0]=e=>m.showErrorResponse=!m.showErrorResponse),mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(m.errorDetails),1)])),_:1}),m.showErrorResponse?((0,o.wg)(),(0,o.iD)("pre",f,(0,r.zw)(m.errorResponse),1)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0)])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[m.isEmbed?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(w,{"wrapper-class":"backToWpBtn",href:e.$store.state.api.admin_url,theme:"blue-grey","data-tooltip-id":"fab-back-dash",icon:"arrow_back","aria-label":m.towp},null,8,["href","aria-label"]),(0,o.Wm)(x,{id:"fab-back-dash",position:"below"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(m.towp),1)])),_:1})],64)),(0,o.Wm)(C,null,{default:(0,o.w5)((({Component:t})=>[(0,o.Wm)(a.W3,{name:"fade",class:"fade-wrapper",tag:"div"},{default:(0,o.w5)((()=>["Hello"!==m.router.currentRoute?.name?((0,o.wg)(),(0,o.iD)("div",u,[(0,o._)("img",{alt:"Simply Schedule Appointments",src:e.$store.state.api.admin_static_url+"/images/logo-ssa.svg"},null,8,c)])):(0,o.kq)("",!0),((0,o.wg)(),(0,o.j4)((0,o.LL)(t),{key:"view"}))])),_:2},1024)])),_:1})],64))],2)}var m=i(20065);const g=[{field:"Name",display:!0,required:!0,icon:"face"},{field:"Email",display:!0,required:!0,icon:"email"},{field:"Phone",display:!1,required:!1,icon:"phone"},{field:"Address",display:!1,required:!1,icon:"place"},{field:"City",display:!1,required:!1,icon:"place"},{field:"State",display:!1,required:!1,icon:"place"},{field:"Zip",display:!1,required:!1,icon:"place"},{field:"Notes",display:!1,required:!1,icon:"assignment"}],_=[{field:"Name",display:!0,required:!0,type:"single-text",icon:"face",values:""},{field:"Email",display:!0,required:!0,type:"single-text",icon:"email",values:""}],y={id:"",color:"light-green",name:""},w={field:"",display:!0,required:!1,type:"single-text",icon:"",values:""},x=["single-text","multi-text","checkboxes","radios","phone"],C={fields:[{field:"admin",send:!0},{field:"customer",send:!0}],notifications_opt_in:{enabled:!1,label:"Receive notifications",description:"Check this box to receive appointment notifications."}},v=["appointment_booked","appointment_customer_information_edited","appointment_canceled"],b=["appointment_booked","appointment_customer_information_edited","appointment_canceled","appointment_start_date"],B=["{{admin_email}}","{{customer_email}}"],S=["{{admin_email}}","{{customer_email}}","{{team_member_email}}"],k=["admin_email","instructions","Appointment.AppointmentType.title","Appointment.web_meeting_url","Appointment.web_meeting_password","Appointment.customer_information_summary","Appointment.customer_information_summary_admin_locale","Appointment.date_timezone","Appointment.customer_timezone","Appointment.public_edit_url","Appointment.customer_start_date","Appointment.business_start_date","Appointment.customer_prev_start_date","Appointment.customer_prev_start_dates","Appointment.business_prev_start_date","Appointment.business_prev_start_dates","location","customer_name","customer_email","attendees_list","Global.home_url","Global.company_name","Global.timezone_string","booking_url","booking_title","booking_post_id","team_member_email","team_member_name","refund_policy","add_to_calendar_link.ics","add_to_calendar_link.gcal","cancelation_note","canceled_by_name","rescheduling_note","rescheduled_by_name","mepr_membership_title","resource_group_title","resource_title","resource_quantity","TEC.venue.name","TEC.venue.address","TEC.venue.city","TEC.venue.state","TEC.venue.province","TEC.venue.zip","TEC.organizer.name","TEC.organizer.phone","TEC.organizer.email","TEC.organizer.website","TEC.categories.category_number",'TEC.categories|join(", " , " and ")'],A={notification_type:[],appointment_type:[],trigger:[],sent_to:[]},M=["booked","pending_payment","pending_form","canceled","abandoned","no_show"],D=["pending_payment","pending_form"],T={time:"upcoming",appointment_type_label_id:[],appointment_type_id:[],status:["booked","canceled","pending_payment","pending_form"],staff:[],date_range_min:null,date_range_max:null,search:""},O=Object.freeze({title:"Consultation Phone Call",duration:"30",label:"",label_id:"1",booking_layout:"week",availability_increment:30,availability_type:"available_blocks",availability:{Monday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Tuesday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Wednesday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Thursday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Friday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Saturday:[],Sunday:[]},availability_end_date:null,availability_start_date:null,booking_end_date:"",booking_start_date:"",capacity:1,capacity_type:"individual",timezone_style:"localized",buffer_before:"0",buffer_after:"0",max_event_count:"0",min_booking_notice:1440..toString(),max_booking_notice:525600..toString(),customer_information:[],notifications:[],google_calendar_booking:"",google_calendars_availability:[],payment_required:"none",shared_calendar_event:1,staff:{required:"",assignment:"random"},staff_ids:[],resource_group_ids:[],has_max_capacity:0,web_meetings:{provider:"",url:""},booking_flow_settings:{booking_flow:"expanded",fallback_booking_flow:"expanded",suggest_first_available:!1,suggest_first_available_within_minutes:0,time_view:"time_of_day_columns",resources_view:"list"},resources_settings:[]}),G=Object.freeze({title:"",description:"",resource_type:"identifiable",quantity:0,resource_ids:[],appointment_type_ids:[]}),E=Object.freeze({title:"",description:"",resource_group_id:""}),U=Object.freeze({required:"",assignment:"random"}),F=Object.freeze({duration:"",label:"",label_id:"",availability_increment:null,availability:{},availability_end_date:null,availability_start_date:null,buffer_before:"",buffer_after:"",max_event_count:"",min_booking_notice:null,customer_information:[],notifications:[],google_calendar_booking:"",google_calendars_availability:[],mailchimp:{}}),I=Object.freeze({accent_color:"rgba(85, 139, 47, 1)",background:"rgba(255, 255, 255, 1)",contrast:!1,font:"Roboto",padding:"1rem",css:""}),z={Arial:"Arial, Helvetica Neue, Helvetica, sans-serif","Arial Black":"Arial Black, Arial Bold, Gadget, sans-serif","Courier New":"Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, monospace",Georgia:"Georgia, Times, Times New Roman, serif",Helvetica:"Helvetica Neue, Helvetica, Arial, sans-serif",Tahoma:"Tahoma, Verdana, Segoe, sans-serif","Times New Roman":"TimesNewRoman, Times New Roman, Times, Baskerville, Georgia,serif","Trebuchet MS":"Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif",Verdana:"Verdana, Geneva, sans-serif"},P=["appointment_booked","appointment_canceled","appointment_edited","appointment_rescheduled"],V=[{code:"AUD",number:"036",digits:2,currency:"Australian Dollar",min:.5,countries:["Australia","Christmas Island","Cocos (Keeling) Islands (The)","Heard Island And Mcdonald Islands","Kiribati","Nauru","Norfolk Island","Tuvalu"]},{code:"BRL",number:"986",digits:2,currency:"Brazilian Real",min:.5,countries:["Brazil"]},{code:"CAD",number:"124",digits:2,currency:"Canadian Dollar",min:.5,countries:["Canada"]},{code:"CZK",number:"203",digits:2,currency:"Czech Koruna",min:15,countries:["Czechia"]},{code:"DKK",number:"208",digits:2,currency:"Danish Krone",min:2.5,countries:["Denmark","Faroe Islands (The)","Greenland"]},{code:"EUR",number:"978",digits:2,currency:"Euro",min:.5,countries:["Andorra","Austria","Belgium","Cyprus","Estonia","European Union","Finland","France","French Guiana","French Southern Territories (The)","Germany","Greece","Guadeloupe","Holy See (The)","Ireland","Italy","Latvia","Lithuania","Luxembourg","Malta","Martinique","Mayotte","Monaco","Montenegro","Netherlands (The)","Portugal","Réunion","Saint Barthélemy","Saint Martin (French Part)","Saint Pierre And Miquelon","San Marino","Slovakia","Slovenia","Spain","Åland Islands"]},{code:"HKD",number:"344",digits:2,currency:"Hong Kong Dollar",min:4,countries:["Hong Kong"]},{code:"ILS",number:"376",digits:2,currency:"New Israeli Sheqel",min:5,countries:["Israel"]},{code:"JPY",number:"392",digits:0,currency:"Japanese Yen",min:50,countries:["Japan"]},{code:"TWD",number:"901",digits:0,currency:"New Taiwan Dollar",min:20,countries:["Taiwan"]},{code:"MYR",number:"458",digits:2,currency:"Malaysian Ringgit",min:2,countries:["Malaysia"]},{code:"MXN",number:"484",digits:2,currency:"Mexican Peso",min:10,countries:["Mexico"]},{code:"NOK",number:"578",digits:2,currency:"Norwegian Krone",min:3,countries:["Bouvet Island","Norway","Svalbard And Jan Mayen"]},{code:"NZD",number:"554",digits:2,currency:"New Zealand Dollar",min:.5,countries:["Cook Islands (The)","New Zealand","Niue","Pitcairn","Tokelau"]},{code:"PHP",number:"608",digits:2,currency:"Philippine Piso",min:5,countries:["Philippines (The)"]},{code:"PLN",number:"985",digits:2,currency:"Zloty",min:2,countries:["Poland"]},{code:"GBP",number:"826",digits:2,currency:"Pound Sterling",min:.3,countries:["Guernsey","Isle Of Man","Jersey","United Kingdom Of Great Britain And Northern Ireland (The)"]},{code:"SGD",number:"702",digits:2,currency:"Singapore Dollar",min:.5,countries:["Singapore"]},{code:"SEK",number:"752",digits:2,currency:"Swedish Krona",min:3,countries:["Sweden"]},{code:"CHF",number:"756",digits:2,currency:"Swiss Franc",min:.5,countries:["Liechtenstein","Switzerland"]},{code:"THB",number:"764",digits:2,currency:"Baht",min:10,countries:["Thailand"]},{code:"USD",number:"840",digits:2,currency:"US Dollar",min:.5,countries:["American Samoa","Bonaire, Sint Eustatius And Saba","British Indian Ocean Territory (The)","Ecuador","El Salvador","Guam","Haiti","Marshall Islands (The)","Micronesia (Federated States Of)","Northern Mariana Islands (The)","Palau","Panama","Puerto Rico","Timor-Leste","Turks And Caicos Islands (The)","United States Minor Outlying Islands (The)","United States Of America (The)","Virgin Islands (British)","Virgin Islands (U.S.)"]},{code:"HUF",number:"348",digits:0,currency:"Hungarian Forint",min:175,countries:["Hungary"]}],W="https://dashboard.stripe.com/payments/",R=[{locale:"da_DK",title:"Danish",title_localized:"Dansk"},{locale:"nl_NL",title:"Dutch",title_localized:"Nederlands"},{locale:"nl_BE",title:"Dutch (Belgium)",title_localized:"Nederlands (België)"},{locale:"nl_NL_formal",title:"Dutch (Formal)",title_localized:"Nederlands (Formeel)"},{locale:"de_DE",title:"German",title_localized:"Deutsch"},{locale:"de_DE_formal",title:"German (Formal)",title_localized:"Deutsch (Sie)"},{locale:"de_CH",title:"German (Switzerland)",title_localized:"Deutsch (Schweiz)"},{locale:"de_CH_informal",title:"German (Switzerland, Informal)",title_localized:"Deutsch (Schweiz, Du)"},{locale:"zh_TW",title:"Chinese (Taiwan)",title_localized:"繁體中文"},{locale:"ko_KR",title:"Korean",title_localized:"한국어"},{locale:"en_GB",title:"English (UK)",title_localized:"English (UK)"},{locale:"et",title:"Estonian",title_localized:"Eesti"},{locale:"hu_HU",title:"Hungarian",title_localized:"Magyar"},{locale:"es_ES",title:"Spanish (Spain)",title_localized:"Español"},{locale:"sl_SI",title:"Slovenian",title_localized:"Slovenščina"},{locale:"es_MX",title:"Spanish (Mexico)",title_localized:"Español de México"},{locale:"es_VE",title:"Spanish (Venezuela)",title_localized:"Español de Venezuela"},{locale:"ro_RO",title:"Romanian",title_localized:"Română"},{locale:"sv_SE",title:"Swedish",title_localized:"Svenska"},{locale:"fr_FR",title:"French (France)",title_localized:"Français"},{locale:"it_IT",title:"Italian (Italy)",title_localized:"Italiano"},{locale:"pl_PL",title:"Polish",title_localized:"Polski"},{locale:"pt_BR",title:"Portuguese (Brazil)",title_localized:"Português do Brasil"},{locale:"pt_PT",title:"Portuguese (Portugal)",title_localized:"Português"},{locale:"ru_RU",title:"Russian",title_localized:"Русский"},{locale:"tr_TR",title:"Turkish",title_localized:"Türkçe"},{locale:"ja",title:"Japanese",title_localized:"日本語"},{locale:"hr",title:"Croatian",title_localized:"Hrvatski"},{locale:"el",title:"Greek",title_localized:"Ελληνικά"},{locale:"sk_SK",title:"Slovak",title_localized:"Slovenčina"},{locale:"nb_NO",title:"Norwegian",title_localized:"Norsk bokmål"},{locale:"is_IS",title:"Icelandic",title_localized:"Íslenska"},{locale:"cs_CZ",title:"Czech",title_localized:"Čeština"},{locale:"lt_LT",title:"Lithuanian",title_localized:"Lietuvių kalba"},{locale:"ar",title:"Arabic",title_localized:"العربية"}],L=["minutes","hours","days","weeks"],j=["customerInformationScreen","confirmationScreen","editRescheduleScreen"],q={appointment_types:[],blackout_dates:{dates:[]},capacity:0,custom_working_hours:0,display_name:"",display_order:1,email:"",manages_blackout_dates:0,manages_working_hours:0,name:"",status:"publish",timezone:"",user_id:0,visibility:"public",working_hours:{Monday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Tuesday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Wednesday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Thursday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Friday:[{time_start:"09:00:00",time_end:"12:00:00"},{time_start:"13:00:00",time_end:"17:00:00"}],Saturday:[],Sunday:[]}},N=["individual","group"],$="YYYY-MM-DD",H=[["Afghanistan (‫افغانستان‬‎)","af","93"],["Albania (Shqipëri)","al","355"],["Algeria (‫الجزائر‬‎)","dz","213"],["American Samoa","as","1684"],["Andorra","ad","376"],["Angola","ao","244"],["Anguilla","ai","1264"],["Antigua and Barbuda","ag","1268"],["Argentina","ar","54"],["Armenia (Հայաստան)","am","374"],["Aruba","aw","297"],["Australia","au","61"],["Austria (Österreich)","at","43"],["Azerbaijan (Azərbaycan)","az","994"],["Bahamas","bs","1242"],["Bahrain (‫البحرين‬‎)","bh","973"],["Bangladesh (বাংলাদেশ)","bd","880"],["Barbados","bb","1246"],["Belarus (Беларусь)","by","375"],["Belgium (België)","be","32"],["Belize","bz","501"],["Benin (Bénin)","bj","229"],["Bermuda","bm","1441"],["Bhutan (འབྲུག)","bt","975"],["Bolivia","bo","591"],["Bosnia and Herzegovina (Босна и Херцеговина)","ba","387"],["Botswana","bw","267"],["Brazil (Brasil)","br","55"],["British Indian Ocean Territory","io","246"],["British Virgin Islands","vg","1284"],["Brunei","bn","673"],["Bulgaria (България)","bg","359"],["Burkina Faso","bf","226"],["Burundi (Uburundi)","bi","257"],["Cambodia (កម្ពុជា)","kh","855"],["Cameroon (Cameroun)","cm","237"],["Canada","ca","1"],["Cape Verde (Kabu Verdi)","cv","238"],["Caribbean Netherlands","bq","599"],["Cayman Islands","ky","1345"],["Central African Republic (République centrafricaine)","cf","236"],["Chad (Tchad)","td","235"],["Chile","cl","56"],["China (中国)","cn","86"],["Christmas Island","cx","61"],["Cocos (Keeling) Islands","cc","61"],["Colombia","co","57"],["Comoros (‫جزر القمر‬‎)","km","269"],["Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)","cd","243"],["Congo (Republic) (Congo-Brazzaville)","cg","242"],["Cook Islands","ck","682"],["Costa Rica","cr","506"],["Côte d’Ivoire","ci","225"],["Croatia (Hrvatska)","hr","385"],["Cuba","cu","53"],["Curaçao","cw","599"],["Cyprus (Κύπρος)","cy","357"],["Czech Republic (Česká republika)","cz","420"],["Denmark (Danmark)","dk","45"],["Djibouti","dj","253"],["Dominica","dm","1767"],["Dominican Republic (República Dominicana)","do","1"],["Ecuador","ec","593"],["Egypt (‫مصر‬‎)","eg","20"],["El Salvador","sv","503"],["Equatorial Guinea (Guinea Ecuatorial)","gq","240"],["Eritrea","er","291"],["Estonia (Eesti)","ee","372"],["Ethiopia","et","251"],["Falkland Islands (Islas Malvinas)","fk","500"],["Faroe Islands (Føroyar)","fo","298"],["Fiji","fj","679"],["Finland (Suomi)","fi","358"],["France","fr","33"],["French Guiana (Guyane française)","gf","594"],["French Polynesia (Polynésie française)","pf","689"],["Gabon","ga","241"],["Gambia","gm","220"],["Georgia (საქართველო)","ge","995"],["Germany (Deutschland)","de","49"],["Ghana (Gaana)","gh","233"],["Gibraltar","gi","350"],["Greece (Ελλάδα)","gr","30"],["Greenland (Kalaallit Nunaat)","gl","299"],["Grenada","gd","1473"],["Guadeloupe","gp","590"],["Guam","gu","1671"],["Guatemala","gt","502"],["Guernsey","gg","44",1],["Guinea (Guinée)","gn","224"],["Guinea-Bissau (Guiné Bissau)","gw","245"],["Guyana","gy","592"],["Haiti","ht","509"],["Honduras","hn","504"],["Hong Kong (香港)","hk","852"],["Hungary (Magyarország)","hu","36"],["Iceland (Ísland)","is","354"],["India (भारत)","in","91"],["Indonesia","id","62"],["Iran (‫ایران‬‎)","ir","98"],["Iraq (‫العراق‬‎)","iq","964"],["Ireland","ie","353"],["Isle of Man","im","44"],["Israel (‫ישראל‬‎)","il","972"],["Italy (Italia)","it","39"],["Jamaica","jm","1876"],["Japan (日本)","jp","81"],["Jersey","je","44"],["Jordan (‫الأردن‬‎)","jo","962"],["Kazakhstan (Казахстан)","kz","7"],["Kenya","ke","254"],["Kiribati","ki","686"],["Kosovo","xk","383"],["Kuwait (‫الكويت‬‎)","kw","965"],["Kyrgyzstan (Кыргызстан)","kg","996"],["Laos (ລາວ)","la","856"],["Latvia (Latvija)","lv","371"],["Lebanon (‫لبنان‬‎)","lb","961"],["Lesotho","ls","266"],["Liberia","lr","231"],["Libya (‫ليبيا‬‎)","ly","218"],["Liechtenstein","li","423"],["Lithuania (Lietuva)","lt","370"],["Luxembourg","lu","352"],["Macau (澳門)","mo","853"],["Macedonia (FYROM) (Македонија)","mk","389"],["Madagascar (Madagasikara)","mg","261"],["Malawi","mw","265"],["Malaysia","my","60"],["Maldives","mv","960"],["Mali","ml","223"],["Malta","mt","356"],["Marshall Islands","mh","692"],["Martinique","mq","596"],["Mauritania (‫موريتانيا‬‎)","mr","222"],["Mauritius (Moris)","mu","230"],["Mayotte","yt","262"],["Mexico (México)","mx","52"],["Micronesia","fm","691"],["Moldova (Republica Moldova)","md","373"],["Monaco","mc","377"],["Mongolia (Монгол)","mn","976"],["Montenegro (Crna Gora)","me","382"],["Montserrat","ms","1664"],["Morocco (‫المغرب‬‎)","ma","212"],["Mozambique (Moçambique)","mz","258"],["Myanmar (Burma) (မြန်မာ)","mm","95"],["Namibia (Namibië)","na","264"],["Nauru","nr","674"],["Nepal (नेपाल)","np","977"],["Netherlands (Nederland)","nl","31"],["New Caledonia (Nouvelle-Calédonie)","nc","687"],["New Zealand","nz","64"],["Nicaragua","ni","505"],["Niger (Nijar)","ne","227"],["Nigeria","ng","234"],["Niue","nu","683"],["Norfolk Island","nf","672"],["North Korea (조선 민주주의 인민 공화국)","kp","850"],["Northern Mariana Islands","mp","1670"],["Norway (Norge)","no","47"],["Oman (‫عُمان‬‎)","om","968"],["Pakistan (‫پاکستان‬‎)","pk","92"],["Palau","pw","680"],["Palestine (‫فلسطين‬‎)","ps","970"],["Panama (Panamá)","pa","507"],["Papua New Guinea","pg","675"],["Paraguay","py","595"],["Peru (Perú)","pe","51"],["Philippines","ph","63"],["Poland (Polska)","pl","48"],["Portugal","pt","351"],["Puerto Rico","pr","1"],["Qatar (‫قطر‬‎)","qa","974"],["Réunion (La Réunion)","re","262"],["Romania (România)","ro","40"],["Russia (Россия)","ru","7"],["Rwanda","rw","250"],["Saint Barthélemy","bl","590"],["Saint Helena","sh","290"],["Saint Kitts and Nevis","kn","1869"],["Saint Lucia","lc","1758"],["Saint Martin (Saint-Martin (partie française))","mf","590"],["Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)","pm","508"],["Saint Vincent and the Grenadines","vc","1784"],["Samoa","ws","685"],["San Marino","sm","378"],["São Tomé and Príncipe (São Tomé e Príncipe)","st","239"],["Saudi Arabia (‫المملكة العربية السعودية‬‎)","sa","966"],["Senegal (Sénégal)","sn","221"],["Serbia (Србија)","rs","381"],["Seychelles","sc","248"],["Sierra Leone","sl","232"],["Singapore","sg","65"],["Sint Maarten","sx","1721"],["Slovakia (Slovensko)","sk","421"],["Slovenia (Slovenija)","si","386"],["Solomon Islands","sb","677"],["Somalia (Soomaaliya)","so","252"],["South Africa","za","27"],["South Korea (대한민국)","kr","82"],["South Sudan (‫جنوب السودان‬‎)","ss","211"],["Spain (España)","es","34"],["Sri Lanka (ශ්‍රී ලංකාව)","lk","94"],["Sudan (‫السودان‬‎)","sd","249"],["Suriname","sr","597"],["Svalbard and Jan Mayen","sj","47"],["Swaziland","sz","268"],["Sweden (Sverige)","se","46"],["Switzerland (Schweiz)","ch","41"],["Syria (‫سوريا‬‎)","sy","963"],["Taiwan (台灣)","tw","886"],["Tajikistan","tj","992"],["Tanzania","tz","255"],["Thailand (ไทย)","th","66"],["Timor-Leste","tl","670"],["Togo","tg","228"],["Tokelau","tk","690"],["Tonga","to","676"],["Trinidad and Tobago","tt","1868"],["Tunisia (‫تونس‬‎)","tn","216"],["Turkey (Türkiye)","tr","90"],["Turkmenistan","tm","993"],["Turks and Caicos Islands","tc","1649"],["Tuvalu","tv","688"],["U.S. Virgin Islands","vi","1340"],["Uganda","ug","256"],["Ukraine (Україна)","ua","380"],["United Arab Emirates (‫الإمارات العربية المتحدة‬‎)","ae","971"],["United Kingdom","gb","44"],["United States","us","1"],["Uruguay","uy","598"],["Uzbekistan (Oʻzbekiston)","uz","998"],["Vanuatu","vu","678"],["Vatican City (Città del Vaticano)","va","39"],["Venezuela","ve","58"],["Vietnam (Việt Nam)","vn","84"],["Wallis and Futuna (Wallis-et-Futuna)","wf","681"],["Western Sahara (‫الصحراء الغربية‬‎)","eh","212"],["Yemen (‫اليمن‬‎)","ye","967"],["Zambia","zm","260"],["Zimbabwe","zw","263"],["Åland Islands","ax","358"]],Z=H.map((([e,t,i])=>({name:e,iso2:t.toUpperCase(),dialCode:i}))),Y=["PST","PDT","MST","MDT","CST","CDT","EST","EDT","US/Pacific-New","EST5EDT","CST6CDT","MST7MDT","PST8PDT","Etc/UTC","CET","EET","WET","HST","Greenwich","MET"],K={default:395,appointment_types:{edit:345,capacity:347,staff:346,advanced_scheduling_enabled:348,google_calendar_enabled:351,web_meetings_enabled:350,web_meetings_google_calendar:387,web_meetings_zoom:388,mailchimp_enabled:389,webhooks_enabled:390,customer_information:391},google_calendar:{enabled:362,account_activated:363},notifications:{list:357,edit:377,sms:359,sms_enabled:358,staff_enabled:393},payments:{all:369,paypal_enabled:371,stripe_enabled:370},support_ticket:{default:412,email:398,scheduled_event:399,twig:400,translation:401,connection_lost:402,loading:403,missing:404,400:405,google:406,hippa:407,gdpr:408,captcha:409},teams:{list:375,edit:376},appointment_details:343,appointment_details_payments_enabled:392,advanced_scheduling_options:361,blackout:360,developer_jobs:380,developer_settings:379,general:354,import_export:378,mailchimp:364,paypal:373,settings:{list:352,license_enabled:353},stripe:372,styles:355,support:381,tracking:374,translations:356,webhooks:367,zoom:365},J={email:["email","notifications","emails","SMTP","mail","confirmation","message"],scheduled_event:["scheduled event","scheduled events","cron","late"],twig:["twig","merge tag","token","syntax"],translation:["translation","translate","language","du","sie","multi-lingual","multilingual","pack"],connection_lost:["connection lost","load","lost connection","not loading","spin","communicating"],loading:["loading","time to load","loading time","performance","slow","seconds"],missing:["missing","won't show","doesn't show","availability","not showing","available","aren't available"],400:["400","OAuth","OAuth 2.0 Policy","redirect_uri_mismatch","redirect uri","google API","Authorization Error","google cloud","unauthorized"],google:["google","block","blocking","conflict","sync","not syncing"],hipaa:["hipaa","hippa","associate business agreement","business associate agreement","encrypt"],gdpr:["gdpr","privacy policy","data protection","data processing"],captcha:["captcha","spam"]},X={durationUnits:[{value:"minutes",text:"Minutes",singular:"Minute"},{value:"hours",text:"Hours",singular:"Hour"},{value:"days",text:"Days",singular:"Day"},{value:"weeks",text:"Weeks",singular:"Week"}],colors:[{value:"red",text:"Red"},{value:"pink",text:"Pink"},{value:"purple",text:"Purple"},{value:"deep-purple",text:"Deep Purple"},{value:"indigo",text:"Indigo"},{value:"blue",text:"Blue"},{value:"light-blue",text:"Light Blue"},{value:"cyan",text:"Cyan"},{value:"teal",text:"Teal"},{value:"green",text:"Green"},{value:"light-green",text:"Light Green"},{value:"lime",text:"Lime"},{value:"yellow",text:"Yellow"},{value:"amber",text:"Amber"},{value:"orange",text:"Orange"},{value:"deep-orange",text:"Deep Orange"},{value:"brown",text:"Brown"},{value:"grey",text:"Grey"},{value:"blue-grey",text:"Blue Grey"}],dateFormats:[{php:"F j, Y",js:"MMMM D, YYYY"},{php:"j F Y",js:"D MMMM YYYY"},{php:"Y-m-d",js:"YYYY-MM-DD"},{php:"m/d/Y",js:"MM/DD/YYYY"},{php:"d/m/Y",js:"DD/MM/YYYY"},{php:"l, F jS, Y",js:"dddd, MMMM Do, YYYY"},{php:"M j, Y",js:"MMM D, YYYY"}],timeFormats:[{php:"g:i a",js:"h:mm a"},{php:"g:i A",js:"h:mm A"},{php:"H:i",js:"HH:mm"},{php:"G:i",js:"H:mm"},{php:"g:ia",js:"h:mma"},{php:"g:iA",js:"h:mmA"}],availabilityTimeIncrements:[10,15,20,30,60],bookingLayouts:["week","month"],bookingFlows:["expanded","express","first_available"],fallBackBookingFlows:["expanded","express"],dateViews:["week","month","only_available"],timeViews:["time_of_day_columns","single_column","rows","block"],resourceViews:["list","radio"],teamViews:["list","radio"],expandedSteps:["date","time"],expressSteps:["appointmentOptions"]};var Q=i(22483);const ee={key:0},te={key:1,class:"hello"},ie=(0,o.uE)('
',1),ae={class:"content-wrap"},oe={class:"md-display-2"},re={class:"md-headline"},le={class:"button-bar transparent"},se={class:"button-bar transparent"},ne=["src"];function de(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.iD)("div",null,[e.settings.global.wizard_completed?((0,o.wg)(),(0,o.iD)("div",ee,[(0,o.Wm)(n)])):((0,o.wg)(),(0,o.iD)("div",te,[ie,(0,o._)("div",ae,[(0,o._)("h1",oe,(0,r.zw)(e.translations.hello.headline),1),(0,o._)("p",re,(0,r.zw)(e.translations.hello.subhead),1),(0,o._)("div",le,[e.settings.installed.license?((0,o.wg)(),(0,o.j4)(d,{key:0,"data-test":"test-wizard-help-me",tag:"md-button",to:"/wizard/license",mode:"raised",class:"md-raised md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.hello.accept),1)])),_:1})):((0,o.wg)(),(0,o.j4)(d,{key:1,"data-test":"test-wizard-help-me",tag:"md-button",to:"/wizard/review",mode:"raised",class:"md-raised md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.hello.accept),1)])),_:1}))]),(0,o._)("div",se,[(0,o.Wm)(d,{to:"/ssa",tag:"md-button",class:"md-primary",onClick:s.updateWizard},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.hello.decline),1)])),_:1},8,["onClick"])]),(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/foxes/fox-sitting-tail-up.svg"},null,8,ne)])]))])}var pe=i(92864),fe=i.n(pe);function ue(e,t,i,a,l,s){const n=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["app-loading",i.size])},[(0,o.Wm)(n,{indeterminate:"",medium:s.isMedium,class:"app-spinner"},null,8,["medium"]),(0,o._)("h3",{class:(0,r.C_)(s.textClass)},(0,r.zw)(i.message)+"… ",3)],2)}var ce={name:"LoadingElement",props:{message:{type:String,default:""},size:{type:String,default:"one"}},data(){return{}},computed:{textClass(){switch(this.size){case"one":return"md-display-1";case"title":return"md-title";case"body":return"md-body-1";default:return"md-display-1"}},spinnerSize(){switch(this.size){case"one":return 50;case"title":return 50;case"body":return 20;default:return 50}},isMedium(){return this.spinnerSize<50}}},he=i(40089);const me=(0,he.Z)(ce,[["render",ue]]);var ge=me,_e={name:"HelloWizard",store:$J,components:{loading:ge},data(){return{moment:fe()}},beforeMount(){this.currentUserCan("ssa_manage_site_settings")&&this.currentUserCan("ssa_manage_appointment_types")||this.$router.push("/ssa"),this.settings.global.wizard_completed&&this.$router.push("/ssa")},mounted(){this.settings.global.wizard_completed||this.saveTimezone()},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.Se)(["detectedTimezone"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{saveTimezone:function(){this.settings.global.timezone_string&&this.detectedTimezone===this.settings.global.timezone_string||(this.updateTimezoneString({settings:this.settings,value:this.detectedTimezone}),this.updateGlobalSettings())},updateWizard(){this.updateWizardCompleted({settings:this.settings,value:fe().utc().format(this.timestampFormat)}),this.updateGlobalSettings()},...(0,m.OI)("global_settings",["updateTimezoneString","updateWizardCompleted"]),...(0,m.nv)("global_settings",["updateGlobalSettings"])}};const ye=(0,he.Z)(_e,[["render",de],["__scopeId","data-v-56133048"]]);var we=ye;const xe=e=>((0,o.dD)("data-v-308f286c"),e=e(),(0,o.Cn)(),e),Ce={class:"settings view-container"},ve={class:"mdc-drawer__header"},be={class:"mdc-drawer__title",style:{"margin-bottom":"0"}},Be=["src"],Se=xe((()=>(0,o._)("div",{class:"mdc-drawer__subtitle"}," Simply Schedule Appointments ",-1))),ke=xe((()=>(0,o._)("hr",{class:"mdc-list-divider"},null,-1))),Ae={class:"banner"},Me={class:"md-subheading"},De={class:"banner"},Te={class:"md-subheading"},Oe={class:"main-app-layout"},Ge={class:"md-toolbar md-primary main-app-toolbar"},Ee={class:"screen-reader-text"},Ue={class:"main-nav-item-content"},Fe={class:"md-whiteframe settings-whiteframe"};function Ie(e,t,i,a,l,s){const n=(0,o.up)("settings-sidenav"),d=(0,o.up)("foxy-drawer"),p=(0,o.up)("errors-banner"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-layout-cell"),h=(0,o.up)("foxy-layout-grid"),m=(0,o.up)("foxy-list-item"),g=(0,o.up)("foxy-list"),_=(0,o.up)("no-permission"),y=(0,o.up)("loading"),w=(0,o.up)("router-view"),x=(0,o.up)("foxy-layout"),C=(0,o.up)("support-guides"),v=(0,o.up)("sidebar-notices");return(0,o.wg)(),(0,o.iD)("div",Ce,[e.currentUserHasNav?((0,o.wg)(),(0,o.j4)(d,{key:0,id:"main-left-drawer",ref:"leftSidenav",modelValue:l.drawerOpen,"onUpdate:modelValue":t[1]||(t[1]=e=>l.drawerOpen=e),type:"dismissible"},{header:(0,o.w5)((()=>[(0,o._)("div",ve,[(0,o._)("div",be,[(0,o._)("img",{style:{width:"-webkit-fill-available"},alt:"Simply Schedule Appointments",src:e.$store.state.api.admin_static_url+"/images/logo-ssa.svg"},null,8,Be)]),Se])])),mainContent:(0,o.w5)((()=>[l.drawerOpen?((0,o.wg)(),(0,o.iD)("div",{key:0,class:"drawerContentLayout",onClick:t[0]||(t[0]=(...e)=>s.closeLeftSidenav&&s.closeLeftSidenav(...e))})):(0,o.kq)("",!0)])),default:(0,o.w5)((()=>[ke,(0,o.Wm)(n)])),_:1},8,["modelValue"])):(0,o.kq)("",!0),s.showErrorBanner?((0,o.wg)(),(0,o.j4)(p,{key:1,errors:e.errorNotices},null,8,["errors"])):(0,o.kq)("",!0),s.showBanner?((0,o.wg)(),(0,o.j4)(h,{key:2},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{span:"12"},{default:(0,o.w5)((()=>[(0,o._)("div",Ae,[(0,o._)("div",Me,[(0,o.Wm)(f,{icon:"warning",theme:"amber"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.errors.noAppointmentTypes),1)]),(0,o.Wm)(u,{mode:"raised",class:"md-primary",onClick:s.addAppointmentType},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.create),1)])),_:1},8,["onClick"])])])),_:1})])),_:1})):(0,o.kq)("",!0),s.showLicenseBanner?((0,o.wg)(),(0,o.j4)(h,{key:3,class:"invalid-license-banner"},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{span:"12"},{default:(0,o.w5)((()=>[(0,o._)("div",De,[(0,o._)("div",Te,[(0,o.Wm)(f,{theme:"amber",icon:"warning"}),(0,o.Uk)(" "+(0,r.zw)(s.getLicenseBannerText),1)]),e.settings.license.license_show_settings?((0,o.wg)(),(0,o.j4)(u,{key:0,mode:"raised",class:"md-primary",onClick:s.handleInvalidLicenseNavigation},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.getLicenseBannerBtnText),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])])),_:1})])),_:1})):(0,o.kq)("",!0),(0,o._)("div",Oe,[(0,o.Wm)(x,{class:(0,r.C_)(["main-settings-col",{"main-settings-col-centered":!e.currentUserCan("ssa_manage_site_settings")}]),"md-column":""},{default:(0,o.w5)((()=>[(0,o._)("div",Ge,[(0,o.Wm)(g,{tag:"nav","aria-orientation":"horizontal","stand-alone":""},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{onClick:s.toggleLeftSidenav,class:(0,r.C_)(["mdc-button",{"md-dense":s.isBasic}]),theme:"onPrimary"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"menu"}),(0,o._)("span",Ee,(0,r.zw)(e.translations.settings.openNavigation),1)])),_:1},8,["onClick","class"]),e.currentUserCan("ssa_manage_appointments")||e.currentUserCan("ssa_manage_others_appointments")?((0,o.wg)(),(0,o.j4)(m,{key:s.currentRoute+"appointments",to:"/ssa/appointments",class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic,active:"appointments"===s.currentRoute}])},{default:(0,o.w5)((()=>[(0,o._)("div",Ue,[(0,o.Wm)(f,{icon:"schedule"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.appointmentsTitle),1)])])),_:1},8,["class"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_appointment_types")?((0,o.wg)(),(0,o.j4)(m,{key:s.currentRoute+"appointmentTypes",to:"/ssa/appointment-types",class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic,active:"appointmentTypes"===s.currentRoute}])},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"view_list"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1)])),_:1},8,["class"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(m,{key:s.currentRoute+"settings",to:"/ssa/settings",class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic,active:"settings"===s.currentRoute}])},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"settings_applications"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.settingsTitle),1)])),_:1},8,["class"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")&&e.supportModule.installed?((0,o.wg)(),(0,o.j4)(m,{key:s.currentRoute+"support",to:"/ssa/support",class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic,active:"support"===s.currentRoute}])},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"help"}),(0,o._)("span",null,(0,r.zw)(e.translations.support.supportTitle),1)])),_:1},8,["class"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")&&s.isBasic?((0,o.wg)(),(0,o.j4)(m,{key:4,href:e.allEditionsUrlParsed(l.allEditionsParams),target:"_blank",class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic}])},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"upload"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.upgrade),1)])),_:1},8,["href","class"])):(0,o.kq)("",!0),e.currentUserIsStaff?((0,o.wg)(),(0,o.j4)(m,{key:s.currentRoute+"staff",to:"/ssa/settings/staff/profile/"+e.currentUserStaffId,class:(0,r.C_)(["mdc-button ssa-menu",{"md-dense":s.isBasic,active:"staff"===s.currentRoute}])},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"account_circle"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.profile),1)])),_:1},8,["to","class"])):(0,o.kq)("",!0)])),_:1})]),(0,o._)("div",Fe,[e.currentUserHasPermissions?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.loading?((0,o.wg)(),(0,o.j4)(y,{key:0,message:e.translations.settings.loadingApptTypes},null,8,["message"])):((0,o.wg)(),(0,o.j4)(w,{key:"settings"}))],64)):((0,o.wg)(),(0,o.j4)(_,{key:0}))])])),_:1},8,["class"]),s.displayRightSidebar?((0,o.wg)(),(0,o.j4)(x,{key:0,class:"side-settings-col side-settings-container","md-column":""},{default:(0,o.w5)((()=>[(0,o.Wm)(C),s.displayNotice?((0,o.wg)(),(0,o.j4)(v,{key:0})):(0,o.kq)("",!0)])),_:1})):(0,o.kq)("",!0)])])}i(76801);const ze={class:"notice-container-layout"};function Pe(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",ze,[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.noticeToDisplay),{onClearAd:l.dismissNotice},null,40,["onClearAd"]))])}const Ve=["href"],We=["src"],Re=(0,o._)("div",{class:"md-title"},[(0,o.Uk)(" Simply Schedule Appointments "),(0,o._)("strong",null,"Plus")],-1),Le={class:"promo-unorder-list"};function je(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-plus",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-promo-plus.svg",alt:"Simply Schedule Appointments Plus",class:"promo-img promo-plus"},null,8,We)],8,Ve)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[Re])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.plusText),1),(0,o._)("ul",Le,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.google),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.customFields),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.classes),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.reminders),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}const qe="https://simplyscheduleappointments.com/purchase-plus?discount=plus1firstyear",Ne="https://simplyscheduleappointments.com/purchase-pro?discount=pro1firstyear",$e="https://simplyscheduleappointments.com/purchase-business?discount=business1firstyear",He="https://simplyscheduleappointments.com/2021/07/08/zoom-web-meetings-how-to-schedule/",Ze="https://simplyscheduleappointments.com/guides/sms-notifications/",Ye="https://simplyscheduleappointments.com/pricing/",Ke="https://simplyscheduleappointments.com/guides/gravity-forms-appointment-field/",Je="https://wordpress.org/support/plugin/simply-schedule-appointments/reviews/#new-post",Xe="https://simplyscheduleappointments.com/guides/booking-flows/",Qe=(e,t)=>{let i=["plus","pro","business"];if(i.includes(t)&&e)return`https://simplyscheduleappointments.com/?upgrade_license=${e}&upgrade_to=${t}`};var et={name:"PromoPlus",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"plus-features",utm_content:"general-plus-sidebar"}}}},data(){return{slug:"promo-plus",purchasePlusLink:qe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const tt=(0,he.Z)(et,[["render",je]]);var it=tt;const at={href:"https://simplyscheduleappointments.com/features",target:"_blank"},ot=["src"],rt=(0,o._)("h2",{class:"md-title"},[(0,o.Uk)(" Simply Schedule Appointments "),(0,o._)("strong",null,"Pro")],-1),lt={key:0},st={key:1};function nt(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-pro",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",at,[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-promo-pro.svg",alt:"Simply Schedule Appointments Pro",class:"promo-img promo-pro"},null,8,ot)])])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[rt])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[i.proText?((0,o.wg)(),(0,o.iD)("p",lt,(0,r.zw)(i.proText),1)):(0,o.kq)("",!0),i.proText?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",st,(0,r.zw)(e.translations.promo.proTextSideBar),1)),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.proTextBullets.payments),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.proTextBullets.reminders),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.proTextBullets.tracking),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.proTextBullets.webhooks),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.proTextBullets.bookingFlows),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.proTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(e.proUpgradeLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.proTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var dt={name:"PromoPro",store:$J,props:{proText:{type:String,default:""},dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"pro-features",utm_content:"general-pro-sidebar"}}}},data(){return{slug:"promo-pro"}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed","proUpgradeLink"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const pt=(0,he.Z)(dt,[["render",nt]]);var ft=pt;const ut=["href"],ct=["src"],ht={class:"md-title"};function mt(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-zoom-upgrade",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upgrade-zoom.svg",alt:"Schedule Zoom Meetings with Simply Schedule Appointments",class:"promo-img promo-plus"},null,8,ct)],8,ut)])),_:1}),(0,o.Wm)(p,{class:"md-card-header-flex"},{default:(0,o.w5)((()=>[(0,o._)("div",ht,(0,r.zw)(e.translations.promo.zoomUpgrade.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.zoomUpgrade.text),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.google),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.customFields),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.capacity),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var gt={name:"PromoZoomUpgrade",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"zoom",utm_content:"zoom-plus-sidebar"}}}},data(){return{slug:"promo-zoom-upgrade",purchasePlusLink:qe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const _t=(0,he.Z)(gt,[["render",mt]]);var yt=_t;const wt={href:"https://simplyscheduleappointments.com/features",target:"_blank"},xt=["src"],Ct={class:"md-title"};function vt(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-zoom-announce",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",wt,[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upgrade-zoom.svg",alt:"Schedule Zoom Meetings with Simply Schedule Appointments",class:"promo-img promo-plus"},null,8,xt)])])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",Ct,(0,r.zw)(e.translations.promo.zoomAnnounce.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.zoomAnnounce.text),1)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.zoomGuide,i.zoomParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.zoomAnnounce.cta),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var bt={name:"PromoZoomAnnounce",store:$J,props:{dismissable:{type:Boolean,default:!0},zoomParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_term:"zoom",utm_content:"zoom-sidebar-setup"}}}},data(){return{slug:"promo-zoom-announce",zoomGuide:He}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const Bt=(0,he.Z)(bt,[["render",vt]]);var St=Bt;const kt=["href"],At=["src"],Mt={class:"md-title"},Dt={class:"md-subhead"},Tt=(0,o._)("span",{style:{flex:"1"}},null,-1),Ot={class:"to-do-list"},Gt=["innerHTML"],Et=["innerHTML"],Ut=["innerHTML"],Ft=["innerHTML"],It=["innerHTML"],zt=["innerHTML"];function Pt(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-card-actions"),c=(0,o.up)("foxy-icon"),h=(0,o.up)("foxy-card-area"),m=(0,o.up)("foxy-card-content"),g=(0,o.up)("foxy-card-expand"),_=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(_,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width sms-setup-promo"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:s.smsUrl,target:"_blank"},[(0,o._)("img",{src:e.api.admin_static_url+"/images/promo-sms.svg",alt:"Simply Schedule Appointments SMS Reminders",class:"promo-img promo-sms"},null,8,At)],8,kt)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("h2",Mt,(0,r.zw)(e.translations.promo.smsSetup.title),1),(0,o._)("p",Dt,(0,r.zw)(e.translations.promo.smsSetup.text),1)])),_:1}),(0,o.Wm)(g,{id:"to-do-list-content"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[Tt,(0,o.Wm)(f,{"trigger-expand":"",onClick:s.handleClickForPinnedNotice,class:"no-animation","trailing-icon":"keyboard_arrow_down"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.smsSetup.viewInstructions),1)])),_:1},8,["onClick"])])),_:1}),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("dl",Ot,[(0,o._)("dt",null,[(0,o.Wm)(c,{icon:s.smsEnabled},null,8,["icon"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.smsSetup.instructionsBullets.enable.title),1)]),(0,o._)("dd",null,[(0,o._)("span",{innerHTML:s.enableSmsDescription},null,8,Gt)]),(0,o._)("dt",null,[(0,o.Wm)(c,{icon:s.twilioSetup},null,8,["icon"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.smsSetup.instructionsBullets.setupTwilio.title),1)]),(0,o._)("dd",null,[(0,o._)("span",{innerHTML:s.setupTwilioDescription},null,8,Et)]),(0,o._)("dt",null,[(0,o.Wm)(c,{icon:s.adminPhone},null,8,["icon"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.smsSetup.instructionsBullets.addPhoneNumber.title),1)]),(0,o._)("dd",null,[(0,o._)("span",{innerHTML:s.addPhoneNumberDescription},null,8,Ut)]),(0,o._)("dt",null,[(0,o.Wm)(c,{icon:s.phoneFields},null,8,["icon"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.smsSetup.instructionsBullets.phoneFields.title),1)]),(0,o._)("dd",null,[(0,o._)("span",{innerHTML:s.phoneFieldsDescription},null,8,Ft)]),(0,o._)("dt",null,[(0,o.Wm)(c,{icon:s.smsNotification},null,8,["icon"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.smsSetup.instructionsBullets.smsNotification.title),1)]),(0,o._)("dd",null,[(0,o._)("span",{innerHTML:s.smsNotificationDescription},null,8,It)])]),(0,o._)("p",null,[(0,o._)("span",{innerHTML:s.moreDetails},null,8,zt)])])),_:1})])),_:1})])),_:1})])),_:1})}var Vt=i(95410),Wt=i.n(Vt);const Rt=i(71067).sprintf;var Lt={name:"SupportSetupSMS",props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_term:"sms",utm_content:"sms_sidebar_setup"}}}},data(){return{slug:"support-setup-sms"}},mounted(){document.querySelectorAll(".localRoute").forEach((e=>{e.addEventListener("click",this.linkClickHandler)}))},beforeUnmount(){document.querySelectorAll(".localRoute").forEach((e=>{e.removeEventListener("click",this.linkClickHandler)}))},computed:{smsEnabled(){return this.settings.sms.enabled?"check_box":"check_box_outline_blank"},twilioSetup(){return this.settings.sms.authorized_date?"check_box":"check_box_outline_blank"},adminPhone(){return this.settings.global.admin_phone?"check_box":"check_box_outline_blank"},phoneFields(){return this.phoneAppointmentTypes&&this.phoneAppointmentTypes.length?"check_box":"check_box_outline_blank"},smsNotification(){let e=this.settings.notifications.notifications.filter((e=>"sms"===e.type));return e.length?"check_box":"check_box_outline_blank"},smsUrl(){const e=Ze.split("?"),t=e[0];let i=e.length>1?Wt().parse(e[1]):{};return i=Object.assign(i,this.upgradeUrlParams),`${t}?${Wt().stringify(i)}`},enableSmsDescription(){return Rt(this.translations.promo.smsSetup.instructionsBullets.enable.description,'',"")},setupTwilioDescription(){return Rt(this.translations.promo.smsSetup.instructionsBullets.setupTwilio.description,'',"",'',"")},addPhoneNumberDescription(){return Rt(this.translations.promo.smsSetup.instructionsBullets.addPhoneNumber.description,'',"")},phoneFieldsDescription(){return Rt(this.translations.promo.smsSetup.instructionsBullets.phoneFields.description,'',"")},smsNotificationDescription(){return Rt(this.translations.promo.smsSetup.instructionsBullets.smsNotification.description,'',"")},moreDetails(){return Rt(this.translations.promo.smsSetup.moreDetails,'',"",'',"")},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.Se)("notifications",["phoneAppointmentTypes"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},handleClickForPinnedNotice(){setTimeout((()=>{let e=document.getElementById("to-do-list-content").classList.contains("md-active");e?this.maybeSaveNoticeAsPinned(this.slug):this.maybeUnpinNotice(this.slug)}),150,this.maybeSaveNoticeAsPinned,this.maybeUnpinNotice,this.slug)},linkClickHandler(e){e.preventDefault(),this.linkTo(e)},linkTo(e){if(e.target.dataset?.href){if(this.$router.currentRoute.value.path===e.target.dataset.href)return;if("/ssa/support"===e.target.dataset.href&&"/ssa/support/help"===this.$router.currentRoute.value.path)return;this.$router.push(e.target.dataset.href)}},...(0,m.nv)("notices",["maybeSaveNoticeAsPinned","maybeUnpinNotice"])}};const jt=(0,he.Z)(Lt,[["render",Pt]]);var qt=jt;const Nt=["href"],$t=["src"],Ht={class:"md-title"};function Zt(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-card-header"),u=(0,o.up)("foxy-card-area"),c=(0,o.up)("foxy-button"),h=(0,o.up)("foxy-card-actions"),m=(0,o.up)("foxy-card-content"),g=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(g,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width booking-flow-notice",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.bookingFlowsGuide,i.bookingFlowsGuideUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/promo-booking-flows.svg",alt:"Cuztomize your booking form layout with Simply Schedule Appointments",class:"promo-img promo-plus"},null,8,$t)],8,Nt)])),_:1}),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o._)("div",Ht,[(0,o.Wm)(p,{theme:"deep-orange",icon:"grade"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.bookingFlowsPromo.available.title),1)])])),_:1}),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.available.text1),1),(0,o._)("p",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.text2),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.time),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.availability),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.customization),1)])])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.bookingFlowsGuide,i.bookingFlowsGuideUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.bookingFlowsPromo.available.textCta),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var Yt={name:"PromoBookingFlows",store:$J,props:{dismissable:{type:Boolean,default:!0},bookingFlowsGuideUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_term:"booking-flows",utm_content:"booking-flows-sidebar-setup"}}}},data(){return{slug:"promo-booking-flows",bookingFlowsGuide:Xe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const Kt=(0,he.Z)(Yt,[["render",Zt]]);var Jt=Kt;const Xt=["href"],Qt=["src"],ei={class:"md-title"};function ti(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-card-header"),u=(0,o.up)("foxy-card-area"),c=(0,o.up)("foxy-button"),h=(0,o.up)("foxy-card-actions"),m=(0,o.up)("foxy-card-content"),g=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(g,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width booking-flow-notice",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchaseProLink,i.bookingFlowsPromoUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/promo-booking-flows.svg",alt:"Unlock booking form layout customizations with Simply Schedule Appointments",class:"promo-img promo-plus"},null,8,Qt)],8,Xt)])),_:1}),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o._)("div",ei,[(0,o.Wm)(p,{theme:"deep-orange",icon:"grade"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.promo.bookingFlowsPromo.unavailable.title),1)])])),_:1}),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.unavailable.text1),1),(0,o._)("p",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.text2),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.time),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.availability),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.bookingFlowsPromo.bookingFlowsPromoTextBullets.customization),1)])])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.purchaseProLink,i.bookingFlowsPromoUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.bookingFlowsPromo.unavailable.textCta),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var ii={name:"UnlockBookingFlowsPromo",store:$J,props:{dismissable:{type:Boolean,default:!0},bookingFlowsPromoUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"booking-flows",utm_content:"booking-flows-pro-sidebar"}}}},data(){return{slug:"unlock-booking-flows-promo",purchaseProLink:Ne}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const ai=(0,he.Z)(ii,[["render",ti]]);var oi=ai;const ri=["href"],li=["src"],si={class:"md-title"};function ni(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width sidebar-promo gravity-form-upsell",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/promo-gravity-forms-upsell.svg",alt:"",class:"promo-img promo-plus"},null,8,li)],8,ri)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",si,(0,r.zw)(e.translations.promo.gravityFormsUpsell.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{class:"md-card-text-area","md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.gravityFormsUpsell.text),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.gravityFormsUpsell.textBullets.features),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.gravityFormsUpsell.textBullets.compatibility),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.gravityFormsUpsell.textBullets.paymentOptions),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.gravityFormsUpsell.textBullets.gravityPerks),1)])])),_:1}),(0,o.Wm)(c,{class:"card-action-bar"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var di={name:"GravityFormsUpsell",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"gravity-forms",utm_content:"gravity-forms-plus-sidebar"}}}},data(){return{slug:"gravity-forms-upsell",purchasePlusLink:qe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const pi=(0,he.Z)(di,[["render",ni],["__scopeId","data-v-00a9ce14"]]);var fi=pi;const ui=["href"],ci=["src"],hi={class:"md-title"};function mi(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-payment-upsell",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(e.proUpgradeLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-card-payments.svg",alt:"Get Paid for Your Time and Expertise",class:"promo-img promo-pro"},null,8,ci)],8,ui)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",hi,(0,r.zw)(e.translations.promo.paymentsUpsell.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.paymentsUpsell.text),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.paymentsUpsell.textBullets.markAppointment),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.paymentsUpsell.textBullets.availability),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.paymentsUpsell.textBullets.authentication),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.proTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(e.proUpgradeLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.proTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var gi={name:"PaymentsUpsell",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"payments",utm_content:"payments-pro-sidebar"}}}},data(){return{slug:"payments-upsell"}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed","proUpgradeLink"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const _i=(0,he.Z)(gi,[["render",mi]]);var yi=_i;const wi=["href"],xi=["src"],Ci={class:"md-title"};function vi(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width promo-google-calendar",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-google-calendar.svg",alt:"Schedule Google Calendar Meetings with Simply Schedule Appointments",class:"promo-img promo-plus"},null,8,xi)],8,wi)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",Ci,(0,r.zw)(e.translations.promo.googleCalendar.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.googleCalendar.text),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.googleCalendar.textBullets.checkConflicts),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.googleCalendar.textBullets.automaticInvites),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.googleCalendar.textBullets.generateLinks),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.googleCalendar.textBullets.eventInfo),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"outlined",theme:"deep-orange",style:{"margin-right":"0.5rem"},href:e.allEditionsUrlParsed(i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.view),1)])),_:1},8,["href"]),(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.plusTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var bi={name:"PromoGoogleCalendar",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"google-calendar",utm_content:"google-calendar-sidebar"}}}},data(){return{slug:"promo-google-calendar",purchasePlusLink:qe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","allEditionsUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const Bi=(0,he.Z)(bi,[["render",vi]]);var Si=Bi;const ki=["href"],Ai=["src"],Mi={class:"md-title"};function Di(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:l.gravityFormsGuideLink,target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/promo-gravity-forms-info.svg",alt:"Gravity Forms Integration Available Now!",class:"promo-img promo-pro"},null,8,Ai)],8,ki)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",Mi,(0,r.zw)(e.translations.promo.gravityFormsInfo.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.gravityFormsInfo.text1),1),(0,o._)("p",null,(0,r.zw)(e.translations.promo.gravityFormsInfo.text2),1)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(l.gravityFormsGuideLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.gravityFormsInfo.textCta),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var Ti={name:"GravityFormsInfo",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"support-help",utm_term:"gravity-forms",utm_content:"gravity-forms-sidebar-setup"}}}},data(){return{slug:"gravity-forms-info",gravityFormsGuideLink:Ke}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const Oi=(0,he.Z)(Ti,[["render",Di]]);var Gi=Oi;const Ei=["src","alt"],Ui={class:"md-title"},Fi={class:"md-subheading"},Ii={class:"fade"},zi={class:"md-subheading"},Pi={class:"fade"};function Vi(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card-expand"),g=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(g,{transition:"fade","md-column":"",class:"limited-width"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/review-plugin-card-congrats.svg",alt:e.translations.promo.AprilTwentyThreeReview.imgAltText,class:"promo-img"},null,8,Ei)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",Ui,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.title),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.text1),1),(0,o._)("p",null,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.text2),1)])),_:1}),(0,o.Wm)(m,{class:(0,r.C_)({"md-active":l.isExpandActive})},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{style:{"padding-left":"0","justify-content":"space-between"}},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",class:"md-primary no-animation",style:{"margin-right":"0.5rem","flex-grow":"1"},theme:"fantastic"===l.activeTrigger?"green":"blue-grey",onClick:s.handleFantastic},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.AprilTwentyThreeReview.actions.fantastic),1)])),_:1},8,["theme","onClick"]),(0,o.Wm)(u,{mode:"raised",class:"md-primary no-animation",style:{"flex-grow":"1"},onClick:s.handleBetter,theme:"better"===l.activeTrigger?"red":"blue-grey"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.AprilTwentyThreeReview.actions.better),1)])),_:1},8,["onClick","theme"])])),_:1}),(0,o.Wm)(h,{style:{padding:"15px 0 0 0"}},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>["fantastic"===l.activeTrigger?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("h3",Fi,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.yippee),1),(0,o._)("p",Ii,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.leaveUsReview),1),(0,o.Wm)(u,{mode:"raised",class:"md-primary",style:{"margin-right":"0.5rem",width:"100%"},href:l.ssaDotOrgReviewLink,target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.AprilTwentyThreeReview.actions.leaveReview),1)])),_:1},8,["href"])],64)):"better"===l.activeTrigger?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("h3",zi,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.sorryToHear),1),(0,o._)("p",Pi,(0,r.zw)(e.translations.promo.AprilTwentyThreeReview.letUsKnow),1),(0,o.Wm)(u,{mode:"raised",icon:"feedback",onClick:s.openSupportForm,style:{"margin-right":"0.5rem",width:"100%"}},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.AprilTwentyThreeReview.actions.shareFeedback),1)])),_:1},8,["onClick"])],64)):(0,o.kq)("",!0)])),_:1})])),_:1})])),_:1},8,["class"])])),_:1})])),_:1})}var Wi=i(44870);const Ri=(0,Wi.qj)({events:{}}),Li={$on(e,t){Ri.events[e]||(Ri.events[e]=[]),Ri.events[e].push(t)},$off(e,t){if(Ri.events[e]){const i=Ri.events[e].indexOf(t);i>-1&&Ri.events[e].splice(i,1)}},$emit(e,...t){Ri.events[e]&&Ri.events[e].forEach((e=>e(...t)))}};var ji={name:"AprilTwentyThreeReviewPrompt",props:{dismissable:{type:Boolean,default:!0}},data(){return{slug:"april-twenty-three-review-prompt",isExpandActive:!1,activeTrigger:null,ssaDotOrgReviewLink:Je}},computed:{...(0,m.rn)("translations",["translations"])},watch:{isExpandActive(e){!1===e&&(this.activeTrigger=null)}},methods:{clearAd(){this.$emit("clearAd",this.slug)},handleFantastic(){"fantastic"===this.activeTrigger?this.isExpandActive=!this.isExpandActive:this.isExpandActive=!0,this.activeTrigger="fantastic"},handleBetter(){"better"===this.activeTrigger?this.isExpandActive=!this.isExpandActive:this.isExpandActive=!0,this.activeTrigger="better"},openSupportForm(){"support-help"===this.$route.name&&"open-form"===this.$route.params.param||this.$router.push({name:"support-help",params:{param:"open-form"}}),Li.$emit("openContactForm")}}};const qi=(0,he.Z)(ji,[["render",Vi],["__scopeId","data-v-6dc5dc26"]]);var Ni=qi,$i={name:"SidebarNotices",components:{PromoPlus:it,PromoPro:ft,PromoZoomUpgrade:yt,PromoZoomAnnounce:St,SupportSetupSms:qt,GravityFormsUpsell:fi,PaymentsUpsell:yi,PromoGoogleCalendar:Si,GravityFormsInfo:Gi,AprilTwentyThreeReviewPrompt:Ni,PromoBookingFlows:Jt,UnlockBookingFlowsPromo:oi},computed:{...(0,m.rn)("notices",["noticeToDisplay"])},methods:{dismissNotice(e){this.clearNoticeToDisplay(),this.saveDismissedNotice(e)},...(0,m.nv)("notices",["saveDismissedNotice"]),...(0,m.OI)("notices",["clearNoticeToDisplay"])}};const Hi=(0,he.Z)($i,[["render",Pe],["__scopeId","data-v-497a9619"]]);var Zi=Hi;function Yi(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list");return(0,o.wg)(),(0,o.j4)(p,null,{default:(0,o.w5)((()=>[e.currentUserCan("ssa_manage_appointments")||e.currentUserCan("ssa_manage_others_appointments")?((0,o.wg)(),(0,o.j4)(d,{key:0,to:"/ssa/appointments"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"schedule"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.appointmentsTitle),1)])),_:1})):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_appointment_types")?((0,o.wg)(),(0,o.j4)(d,{key:1,to:"/ssa/appointment-types"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"view_list"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1)])),_:1})):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(d,{to:"/ssa/settings"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"settings_applications"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.settingsTitle),1)])),_:1}),(0,o.Wm)(d,{class:"sub-item",to:"/ssa/settings/general"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"tune"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.general.title),1)])),_:1}),(0,o.Wm)(d,{to:"/ssa/settings/styles",class:"sub-item"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"palette"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.styles.title),1)])),_:1}),(0,o.Wm)(d,{to:"/ssa/settings/translations",class:"sub-item"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"language"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.translations.title),1)])),_:1}),(0,o.Wm)(d,{to:"/ssa/settings/notifications",class:"sub-item"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"notifications"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.notifications.title),1)])),_:1}),e.settings.blackout_dates.enabled?((0,o.wg)(),(0,o.j4)(d,{key:0,class:"sub-item",to:"/ssa/settings/blackout"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"event_busy"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.blackout.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.advanced_scheduling.enabled?((0,o.wg)(),(0,o.j4)(d,{key:1,class:"sub-item",to:"/ssa/settings/advanced-scheduling"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"settings"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.advanced_scheduling.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.google_calendar&&e.settings.google_calendar.enabled?((0,o.wg)(),(0,o.j4)(d,{key:2,class:"sub-item",to:"/ssa/settings/google-calendar"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"calendar_today"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.google_calendar.title),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(d,{class:"sub-item",to:"/ssa/settings/calendar-events"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"event"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.calendar_events.card_title),1)])),_:1}),e.settings.mailchimp&&e.settings.mailchimp.enabled?((0,o.wg)(),(0,o.j4)(d,{key:3,class:"sub-item",to:"/ssa/settings/mailchimp"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"email"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.mailchimp.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.webhooks&&e.settings.webhooks.enabled?((0,o.wg)(),(0,o.j4)(d,{key:4,class:"sub-item",to:"/ssa/settings/webhooks"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"link"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.webhooks.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.payments&&e.settings.payments.enabled?((0,o.wg)(),(0,o.j4)(d,{key:5,class:"sub-item",to:"/ssa/settings/payments"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"payment"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.payments.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.tracking&&e.settings.tracking.enabled?((0,o.wg)(),(0,o.j4)(d,{key:6,class:"sub-item",to:"/ssa/settings/tracking"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"track_changes"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.tracking.title),1)])),_:1})):(0,o.kq)("",!0),e.settings.staff&&e.settings.staff.enabled&&e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.j4)(d,{key:7,class:"sub-item",to:"/ssa/settings/staff"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"people"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.staff.title),1)])),_:1})):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(d,{key:3,to:"/ssa/support"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"help"}),(0,o._)("span",null,(0,r.zw)(e.translations.support.supportTitle),1)])),_:1})):(0,o.kq)("",!0),e.currentUserIsStaff?((0,o.wg)(),(0,o.j4)(d,{key:4,to:"/ssa/settings/staff/profile/"+e.currentUserStaffId},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"account_circle"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.staff.profile),1)])),_:1},8,["to"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")&&s.isBasic?((0,o.wg)(),(0,o.j4)(d,{key:5,href:e.allEditionsUrlParsed(l.allEditionsParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"upload"}),(0,o._)("span",null,(0,r.zw)(e.translations.settings.upgrade),1)])),_:1},8,["href"])):(0,o.kq)("",!0)])),_:1})}var Ki={name:"SettingsSidenav",data(){return{allEditionsParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade",utm_content:"upgrade-tab"}}},computed:{isBasic(){return!this.settings.installed.license},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("staff",["currentUserCan","currentUserIsStaff","currentUserStaffId"]),...(0,m.Se)(["allEditionsUrlParsed"])}};const Ji=(0,he.Z)(Ki,[["render",Yi]]);var Xi=Ji;function Qi(e,t,i,a,r,l){const s=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.j4)(s,{icon:e.api.admin_static_url+"/images/foxes/fox-sleeping.svg",label:e.translations.errors.noPermission,description:e.translations.errors.noPermissionDesc},null,8,["icon","label","description"])}var ea={name:"NoPermission",data(){return{}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api"])}};const ta=(0,he.Z)(ea,[["render",Qi]]);var ia=ta;const aa={class:"md-title"},oa=["href"],ra=["src"],la=["innerHTML"],sa={class:"md-subhead"};function na(e,t,i,a,l,s){const n=(0,o.up)("foxy-card-header"),d=(0,o.up)("foxy-progress-circular"),p=(0,o.up)("foxy-card-content"),f=(0,o.up)("foxy-avatar"),u=(0,o.up)("foxy-list-item"),c=(0,o.up)("foxy-list"),h=(0,o.up)("foxy-button"),m=(0,o.up)("foxy-card-actions"),g=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(g,{class:"ssa-guides"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{style:{display:"flex","justify-content":"space-between","align-items":"baseline"}},{default:(0,o.w5)((()=>[(0,o._)("h2",aa,(0,r.zw)(e.translations.support.guides.title),1),(0,o._)("a",{href:s.helpCenterUrl,target:"_blank",class:"link"},(0,r.zw)(e.translations.support.guides.visit),9,oa)])),_:1}),e.guidesLoading?((0,o.wg)(),(0,o.j4)(p,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{indeterminate:""})])),_:1})):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[e.currentGuides.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(c,{"stand-alone":""},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.dipslayGuides,(e=>((0,o.wg)(),(0,o.j4)(u,{key:e.id,href:e.link,target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.icon,alt:""},null,8,ra)])),_:2},1024),(0,o._)("div",{class:"ssa-guide-label",innerHTML:e.title},null,8,la)])),_:2},1032,["href"])))),128))])),_:1}),e.currentGuides.length>3?((0,o.wg)(),(0,o.j4)(m,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{style:{width:"100%"},onClick:t[0]||(t[0]=e=>l.showAllGuides=!l.showAllGuides)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(this.showAllGuides?e.translations.support.guides.less:e.translations.support.guides.more),1)])),_:1})])),_:1})):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),e.currentGuideKey&&0===e.currentGuides.length?((0,o.wg)(),(0,o.j4)(p,{key:1},{default:(0,o.w5)((()=>[(0,o._)("p",sa,(0,r.zw)(e.translations.support.guides.notFound),1)])),_:1})):(0,o.kq)("",!0)],64))])),_:1})}var da=i(11658),pa=i.n(da),fa={name:"SupportGuides",data(){return{showAllGuides:!1}},watch:{currentGuides:function(e){e.length&&(this.showAllGuides=!1)}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("guides",["guidesLoading","currentGuideKey"]),...(0,m.Se)("guides",["currentGuides"]),dipslayGuides(){const e=this.showAllGuides?this.currentGuides:this.currentGuides.slice(0,3);return e.map((e=>{let t={...e};const i={utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_content:pa()(e.title,{lower:!0,strict:!0})};return t.link=`${e.link}?${Wt().stringify(i)}`,t}))},helpCenterUrl(){const e="https://simplyscheduleappointments.com/help-center/",t={utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_content:"visit-help-center"};return`${e}?${Wt().stringify(t)}`}}};const ua=(0,he.Z)(fa,[["render",na]]);var ca=ua;const ha={class:"container errors-container"},ma={class:"md-whiteframe banner"},ga={class:"md-subheading"};function _a(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-layout");return(0,o.wg)(),(0,o.iD)("div",ha,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.errors,(e=>((0,o.wg)(),(0,o.j4)(p,{key:e.id},{default:(0,o.w5)((()=>[(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",ma,[(0,o._)("div",ga,[(0,o.Wm)(n,{theme:s.getTheme(e.type),icon:s.getType(e.type)},null,8,["theme","icon"]),(0,o.Uk)(" "+(0,r.zw)(e.message),1)]),s.isExternalLink(e.link)?((0,o.wg)(),(0,o.j4)(d,{key:0,mode:"raised",href:e.link,target:"_blank",icon:"keyboard_arrow_right"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.link_message),1)])),_:2},1032,["href"])):((0,o.wg)(),(0,o.j4)(d,{key:1,tag:"md-button",to:e.link,"trailing-icon":"keyboard_arrow_right"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.link_message),1)])),_:2},1032,["to"]))])])),_:2},1024)])),_:2},1024)))),128))])}var ya=i(74806),wa=i.n(ya),xa={name:"ErrorsBanner",props:{errors:{type:Array,default(){return[]}}},data(){return{}},methods:{getTheme(e){return wa().isEmpty(e)?"":"error"===e?"deep-orange":"amber"},getType(e){let t=["warning","error"];return!wa().isEmpty(e)&&t.includes(e)?e:"error"},isExternalLink(e){return e?.includes("http")}}};const Ca=(0,he.Z)(xa,[["render",_a],["__scopeId","data-v-2438a4e5"]]);var va=Ca,ba={name:"SettingsScreen",components:{NoPermission:ia,Loading:ge,SidebarNotices:Zi,SettingsSidenav:Xi,SupportGuides:ca,ErrorsBanner:va},data(){return{loading:!0,drawerOpen:!1,allEditionsParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade",utm_content:"upgrade-tab"}}},beforeRouteEnter(e,t,i){i((t=>{if(e.matched.some((e=>"/ssa/appointments"===e.path))){if(t.currentUserCan("ssa_manage_appointments")||t.currentUserCan("ssa_manage_others_appointments"))return!0}else if(e.matched.some((e=>"/ssa/appointment/:id"===e.path))){if(t.currentUserCan("ssa_manage_appointments")||t.currentUserCan("ssa_manage_others_appointments"))return!0}else if(e.matched.some((e=>"/ssa/appointment-types"===e.path))){if(t.currentUserCan("ssa_manage_appointment_types"))return!0}else if(e.matched.some((e=>"/ssa/settings"===e.path))){if(t.currentUserCan("ssa_manage_site_settings"))return!0}else if(e.matched.some((e=>"/ssa/settings/staff/profile/:id?"===e.path))){if(t.currentUserCan("ssa_manage_appointments")&&t.user.staff_id.toString()===t.$route.params.id.toString())return!0}else if(e.matched.some((e=>"/ssa/support"===e.path))){if(t.currentUserCan("ssa_manage_site_settings"))return!0}else t.defaultRoutes()}))},onBeforeRouteUpdate(e,t,i){this.$refs.leftSidenav&&this.$refs.leftSidenav.close(),i()},mounted(){"undefined"===typeof this.appointmentTypes?this.fetchAppointmentTypes().then((()=>{this.loading=!1})).catch((e=>{console.log(e)})):this.loading=!1},computed:{showBanner(){return"undefined"!==typeof this.appointmentTypes&&this.editableAppointmentTypes&&!this.editableAppointmentTypes.length&&"appointment-type-single"!==this.$route.name},showErrorBanner(){return!wa().isEmpty(this.errorNotices)},showLicenseBanner(){if(this.isBasic||this.showBanner)return!1;let e=["empty","invalid","expired","disabled"],t=this.settings.license.license_status;return e.includes(t)},getLicenseBannerText(){if(!this.showLicenseBanner)return;let e,t=this.settings.license.license_status;switch(t){case"empty":e=this.translations.errors.licenseNotFound;break;case"invalid":e=this.translations.errors.invalidLicense;break;case"expired":e=this.settings.license.license_status_message+this.translations.errors.renewLicense;break;case"disabled":e=this.translations.errors.licenseRefunded;break;default:e=""}return e},getLicenseBannerBtnText(){if(!this.showLicenseBanner)return;let e,t=this.settings.license.license_status;switch(t){case"empty":case"invalid":e=this.translations.settings.license.addLicense;break;case"expired":e=this.translations.settings.license.renewLicense;break;case"disabled":e=this.translations.settings.license.purchaseLicense;break;default:e=""}return e},isBasic(){return!this.settings.installed.license},displayRightSidebar(){return this.currentUserCan("ssa_manage_site_settings")},displayNotice(){return!!this.settings||!wa().isEmpty(this.noticeToDisplay)},routePath(){return this.$route.path},currentRoute(){const e=this.routePath;return e?e.startsWith("/ssa/settings/staff")?"staff":e.startsWith("/ssa/support/")?"support":e.startsWith("/ssa/settings")?"settings":e.startsWith("/ssa/appointment-types")?"appointmentTypes":e.startsWith("/ssa/appointment")?"appointments":"":""},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","user"]),...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.rn)("notices",["noticeToDisplay","errorNotices"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes"]),...(0,m.Se)("staff",["currentUserCan","currentUserHasPermissions","currentUserHasNav","currentUserIsStaff","currentUserStaffId"]),...(0,m.Se)("support",["supportModule"]),...(0,m.Se)(["allEditionsUrlParsed"])},methods:{addAppointmentType(){this.createNewAppointmentType(),mY.push("/ssa/appointment-types/type")},handleInvalidLicenseNavigation(){const e=this.settings.license.license_renewal_link,t=Ye;let i=this.settings.license.license_status;"invalid"===i||"empty"===i?mY.push("/ssa/settings/license"):"expired"===i?window.open(e,"_blank"):"disabled"===i&&window.open(t,"_blank")},defaultRoutes(){this.currentUserCan("ssa_manage_appointments")||this.currentUserCan("ssa_manage_others_appointments")?this.$router.push("/ssa/appointments"):this.currentUserCan("ssa_manage_appointment_types")?this.$router.push("/ssa/appointment-types"):this.currentUserCan("ssa_manage_site_settings")?this.$router.push("/ssa/settings"):this.currentUserCan("ssa_manage_staff")&&this.$router.push("/ssa/settings/staff")},toggleLeftSidenav(){this.drawerOpen=!this.drawerOpen},closeLeftSidenav(){this.drawerOpen=!1},...(0,m.nv)("appointment_types",["createNewAppointmentType","fetchAppointmentTypes"]),...(0,m.OI)(["updateCurrentSettings"])}};const Ba=(0,he.Z)(ba,[["render",Ie],["__scopeId","data-v-308f286c"]]);var Sa=Ba;const ka={class:"appointments"},Aa={key:0,class:"app-error"},Ma=["src"],Da={class:"md-display-1"},Ta={style:{"text-align":"right"}},Oa={style:{"margin-top":"0"}},Ga=(0,o._)("p",null,null,-1),Ea={class:"md-list-text-container"},Ua=["innerHTML"],Fa={key:1},Ia=["innerHTML"];function za(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("appointment-filter"),p=(0,o.up)("loading"),f=(0,o.up)("appointments-list-item"),u=(0,o.up)("foxy-list"),c=(0,o.up)("foxy-progress-circular"),h=(0,o.up)("foxy-empty"),m=(0,o.up)("AppointmentCancelDialog"),g=(0,o.up)("AppointmentAbandonDialog"),_=(0,o.up)("foxy-dialog-title"),y=(0,o.up)("foxy-notification"),w=(0,o.up)("foxy-list-item"),x=(0,o.up)("foxy-dialog-content"),C=(0,o.up)("foxy-dialog-button"),v=(0,o.up)("foxy-dialog-footer"),b=(0,o.up)("foxy-dialog"),B=(0,o.up)("foxy-icon"),S=(0,o.up)("foxy-icon-button");return(0,o.wg)(),(0,o.iD)("div",ka,[l.error?((0,o.wg)(),(0,o.iD)("div",Aa,[(0,o._)("img",{src:e.api.admin_static_url+"/images/foxes/fox-sleeping.svg",alt:"Error fox"},null,8,Ma),(0,o._)("h3",Da,(0,r.zw)(e.translations.errors.heading),1),(0,o._)("p",null,(0,r.zw)(e.translations.errors.intro)+" "+(0,r.zw)(e.translations.errors.appointmentLoading),1)])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("div",Ta,[e.currentUserCan("ssa_manage_appointments")?((0,o.wg)(),(0,o.j4)(n,{key:0,id:"bookingButtonHeader",onClick:s.loadBookingEmbed,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.general.bookAppointment),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),(0,o.Wm)(d,{loading:l.loading,onUpdate:s.loadAppointments},null,8,["loading","onUpdate"]),l.loading?((0,o.wg)(),(0,o.j4)(p,{key:0,message:e.translations.settings.loadingAppointments},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[e.displayAppointments.length&&l.displayAllAppointments?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.displayAppointments,((e,t)=>((0,o.wg)(),(0,o.j4)(f,{key:e.start_date+"-"+t,appointment:e,onConfirmCancel:s.confirmCancel,onConfirmAbandon:s.confirmAbandon,onConfirmBook:s.confirmBook},null,8,["appointment","onConfirmCancel","onConfirmAbandon","onConfirmBook"])))),128))])),_:1}),l.loadingMore?((0,o.wg)(),(0,o.j4)(c,{key:0,medium:"",indeterminate:""})):((0,o.wg)(),(0,o.j4)(n,{key:1,class:"md-primary",onClick:t[0]||(t[0]=e=>s.loadMoreAppointments()),disabled:e.loadedAll},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.loadMore),1)])),_:1},8,["disabled"]))],64)):e.displayAppointments.length&&!l.displayAllAppointments?((0,o.wg)(),(0,o.j4)(h,{key:1,label:e.translations.appointments.tooManyToDisplay.headline},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.appointments.tooManyToDisplay.explanation),1),(0,o.Wm)(n,{class:"md-primary",onClick:s.toggleDisplayAllAppointments},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.tooManyToDisplay.action),1)])),_:1},8,["onClick"])])),_:1},8,["label"])):((0,o.wg)(),(0,o.j4)(h,{key:2,label:s.emptyLabel,icon:s.emptyIcon},{default:(0,o.w5)((()=>["upcoming"===e.filter.time?((0,o.wg)(),(0,o.j4)(n,{key:0,id:"bookingButtonEmptyState",class:"md-primary",onClick:s.loadBookingEmbed,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.general.bookAppointment),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])),_:1},8,["label","icon"]))],64)),(0,o.Wm)(m,(0,o.dG)({appointment:l.currentAppointment,availableCustomerInformation:s.availableCustomerInformation},{ref:"cancelDialog"}),null,16),(0,o.Wm)(g,(0,o.dG)({appointment:l.currentAppointment,availableCustomerInformation:s.availableCustomerInformation},{ref:"abandonDialog"}),null,16),(0,o.Wm)(b,{ref:"confirmBook"},{default:(0,o.w5)((()=>[(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.markAsBookedConfirm),1)])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(y,{icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o._)("p",Oa,(0,r.zw)(e.translations.appointments.bypassPaymentWarning),1)])),_:1}),Ga,l.currentAppointment?((0,o.wg)(),(0,o.j4)(u,{key:0},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.availableCustomerInformation,((t,i,a)=>((0,o.wg)(),(0,o.j4)(w,{key:a},{default:(0,o.w5)((()=>[(0,o._)("div",Ea,[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.customer_information[i]?e.translations.appointmentTypes.customer_information[i]:i),1),"string"===typeof t?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:t},null,8,Ua)):((0,o.wg)(),(0,o.iD)("span",Fa,(0,r.zw)(t.join(", ")),1))])])),_:2},1024)))),128))])),_:1})):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(v,null,{default:(0,o.w5)((()=>[(0,o.Wm)(C,{action:"dismiss",onClick:s.cancelBook},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(C,{action:"accept",onClick:s.markAsBooked},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.markAsBookedConfirmOK),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(b,{ref:"bookingDialog",class:"ssa-booking-dialog","onMdcdialog:closed":s.loadAppointments},{default:(0,o.w5)((()=>[(0,o.Wm)(S,{class:"close",size:"smaller",mode:"raised",onClick:t[1]||(t[1]=t=>e.$refs.bookingDialog.close())},{default:(0,o.w5)((()=>[(0,o.Wm)(B,{icon:"close"})])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o._)("div",{class:"ssa-booking-iframe-container",innerHTML:e.bookingEmbed},null,8,Ia)])),_:1}),(0,o.Wm)(v,null,{default:(0,o.w5)((()=>[e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(n,{key:0,tag:"md-button",mode:"outlined",class:"md-raised md-primary",onClick:s.navigateToAvailabilityDetective},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.support.availabilityDetective.title),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])),_:1})])),_:1},8,["onMdcdialog:closed"])],64))])}function Pa(e,t,i,a,r,l){const s=(0,o.up)("appointments-list-item-single"),n=(0,o.up)("appointments-list-item-multi");return l.isSingle?((0,o.wg)(),(0,o.j4)(s,{key:0,appointment:i.appointment.appointments[0],onConfirmCancel:l.confirmCancel,onConfirmAbandon:l.confirmAbandon,onConfirmBook:l.confirmBook},null,8,["appointment","onConfirmCancel","onConfirmAbandon","onConfirmBook"])):((0,o.wg)(),(0,o.j4)(n,{key:1,appointments:i.appointment.appointments,group_id:i.appointment.group_id,onConfirmCancel:l.confirmCancel},null,8,["appointments","group_id","onConfirmCancel"]))}const Va=["src","alt"],Wa={class:"foxy-list-text-container"},Ra={key:2,style:{"font-weight":"600"}},La={key:3,style:{"font-weight":"600"}},ja={key:0,class:"staff-with"},qa={class:"appointment-item_third-line"},Na={key:0,class:"no-show"},$a={class:"md-list-text-container"},Ha=["href"],Za={class:"md-list-text-container"},Ya={key:0},Ka={key:1},Ja=["href"],Xa={key:2},Qa={class:"md-list-text-container"},eo={class:"md-list-text-container"},to={key:0},io=["href"],ao={key:1},oo={class:"md-list-text-container"},ro={key:0},lo={class:"md-list-text-container"},so={class:"md-list-text-container"},no={class:"md-list-text-container"},po={class:"expand-actions"};function fo(e,t,i,a,l,s){const n=(0,o.up)("foxy-tooltip"),d=(0,o.up)("foxy-avatar"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-list-item"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-list"),h=(0,o.up)("foxy-list-item-expand");return(0,o.wg)(),(0,o.j4)(h,{class:(0,r.C_)(["status-"+i.appointment.status,{"pending-appointment":"pending_payment"==i.appointment.status||"pending_form"==i.appointment.status}]),uid:i.appointment.id},{expand:(0,o.w5)((()=>[(0,o.Wm)(c,{class:(0,r.C_)(["nested-list",{"md-double-line":!s.isBasic}])},{default:(0,o.w5)((()=>[i.appointment.web_meeting_url?((0,o.wg)(),(0,o.j4)(f,{key:0,class:"md-inset"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"video_call",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",$a,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.webMeetings.label),1),(0,o._)("span",null,[(0,o._)("a",{href:i.appointment.web_meeting_url,class:"link",target:"_blank"},(0,r.zw)(i.appointment.web_meeting_url),9,Ha)])])])),_:1})):(0,o.kq)("",!0),s.isBasic?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:1},(0,o.Ko)(s.basicCustomerInformation,((t,a,l)=>((0,o.wg)(),(0,o.j4)(f,{key:l,class:"md-inset"},{default:(0,o.w5)((()=>["Email"===a?((0,o.wg)(),(0,o.j4)(p,{key:0,theme:i.appointment.type_label,icon:"email"},null,8,["theme"])):"Name"===a?((0,o.wg)(),(0,o.j4)(p,{key:1,theme:i.appointment.type_label,icon:"face"},null,8,["theme"])):"Phone"===a?((0,o.wg)(),(0,o.j4)(p,{key:2,theme:i.appointment.type_label,icon:"phone"},null,8,["theme"])):"Address"===a?((0,o.wg)(),(0,o.j4)(p,{key:3,theme:i.appointment.type_label,icon:"place"},null,8,["theme"])):"City"===a&&e.isAddressDisplayed(s.basicCustomerInformation,"City")?((0,o.wg)(),(0,o.j4)(p,{key:4,theme:i.appointment.type_label,icon:"place"},null,8,["theme"])):"State"===a&&e.isAddressDisplayed(s.basicCustomerInformation,"State")?((0,o.wg)(),(0,o.j4)(p,{key:5,theme:i.appointment.type_label,icon:"place"},null,8,["theme"])):"Zip"===a&&e.isAddressDisplayed(s.basicCustomerInformation,"Zip")?((0,o.wg)(),(0,o.j4)(p,{key:6,theme:i.appointment.type_label,icon:"place"},null,8,["theme"])):"Notes"===a?((0,o.wg)(),(0,o.j4)(p,{key:7,theme:i.appointment.type_label,icon:"assignment"},null,8,["theme"])):(0,o.kq)("",!0),(0,o._)("span",null,(0,r.zw)(t),1)])),_:2},1024)))),128)):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},["pending_form"===i.appointment.status?((0,o.wg)(),(0,o.j4)(f,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"information",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",Za,[Object.keys(this.appointment.customer_information).length?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",Ya,(0,r.zw)(e.translations.appointments.noAvailableInformation),1)),-1!=l.expiresIn?((0,o.wg)(),(0,o.iD)("span",Ka,[(0,o.Uk)((0,r.zw)(e.translations.appointments.abandonedIn)+" "+(0,r.zw)(l.expiresIn)+" ",1),(0,o._)("a",{href:s.appointmentStatusGuideUrl,target:"_blank",class:"link"},(0,r.zw)(e.translations.appointments.learnMorePending),9,Ja)])):((0,o.wg)(),(0,o.iD)("span",Xa,(0,r.zw)(e.translations.appointments.abandonedOn)+" "+(0,r.zw)(l.moment.utc(this.appointment.expiration_date).tz(this.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment)),1))])])),_:1})):(0,o.kq)("",!0),"pending_payment"===i.appointment.status?((0,o.wg)(),(0,o.j4)(f,{key:1},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"information",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",Qa,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.apptReserved),1)])])),_:1})):(0,o.kq)("",!0),"pending_payment"===i.appointment.status?((0,o.wg)(),(0,o.j4)(f,{key:2},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"payment",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",eo,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.waiting)+" "+(0,r.zw)(i.appointment.payment_method),1),-1!=l.expiresIn?((0,o.wg)(),(0,o.iD)("span",to,[(0,o.Uk)((0,r.zw)(e.translations.appointments.abandonedIn)+" "+(0,r.zw)(l.expiresIn)+" ",1),(0,o._)("a",{class:"link",href:s.appointmentStatusGuideUrl,target:"_blank"},(0,r.zw)(e.translations.appointments.learnMorePending),9,io)])):((0,o.wg)(),(0,o.iD)("span",ao,(0,r.zw)(e.translations.appointments.abandonedOn)+" "+(0,r.zw)(l.moment.utc(i.appointment.expiration_date).tz(e.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment)),1))])])),_:1})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.paidCustomerInformation,((t,a,l)=>((0,o.wg)(),(0,o.j4)(f,{key:l},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{theme:i.appointment.type_label,icon:s.icons[a]?s.icons[a]:"bookmark"},null,8,["theme","icon"]),(0,o._)("div",oo,[(0,o._)("span",null,(0,r.zw)(a),1),(0,o._)("span",null,["string"===typeof t?((0,o.wg)(),(0,o.iD)("span",ro,(0,r.zw)(e.removeNewLineBreaks(t)),1)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(t.join(", ")),1)],64))])])])),_:2},1024)))),128))],64)),i.appointment.selected_resources?.length>0&&s.displayResources.length>0?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:3},(0,o.Ko)(s.displayResources,(t=>((0,o.wg)(),(0,o.j4)(f,{key:t.id},{default:(0,o.w5)((()=>["identifiable"==t.resourceType?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(p,{icon:"workspaces",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",lo,[(0,o._)("span",null,(0,r.zw)(t.resourceGroup.title),1),(0,o._)("span",null,(0,r.zw)(t.resourceTitle),1)])],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(p,{icon:"inventory",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",so,[(0,o._)("span",null,(0,r.zw)(t.resourceGroup.title),1),(0,o._)("span",null,(0,r.zw)(e.translations.resourceGroups.oneItem),1)])],64))])),_:2},1024)))),128)):(0,o.kq)("",!0),parseFloat(i.appointment.payment_received)?((0,o.wg)(),(0,o.j4)(f,{key:4},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"payment",theme:i.appointment.type_label},null,8,["theme"]),(0,o._)("div",no,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.paymentReceived),1),(0,o._)("span",null,(0,r.zw)(e.displayPrice(i.appointment.payment_received,s.currency)),1)])])),_:1})):(0,o.kq)("",!0),(0,o._)("li",po,[(0,o._)("span",null,[(0,o.Wm)(u,{tag:"md-button",to:"/ssa/appointment/"+i.appointment.id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.viewDetails),1)])),_:1},8,["to"]),s.isCancelable?((0,o.wg)(),(0,o.j4)(u,{key:0,onClick:t[0]||(t[0]=e=>s.confirmCancel(i.appointment.id))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancel),1)])),_:1})):(0,o.kq)("",!0),s.canMarkAsAbandoned?((0,o.wg)(),(0,o.j4)(u,{key:1,onClick:t[1]||(t[1]=e=>s.confirmAbandon(i.appointment.id))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.abandon),1)])),_:1})):(0,o.kq)("",!0),s.canMarkAsBooked?((0,o.wg)(),(0,o.j4)(u,{key:2,onClick:t[2]||(t[2]=e=>s.confirmBook(i.appointment.id))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.book),1)])),_:1})):(0,o.kq)("",!0),s.canMarkAsNoShow?((0,o.wg)(),(0,o.j4)(u,{key:3,onClick:s.markAsNoShow},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.markAsNoShow),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])])])),_:1},8,["class"])])),default:(0,o.w5)((()=>[e.wpUserGravatar(i.appointment.customer_id)?((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((()=>[(0,o._)("img",{"data-tooltip-id":"tooltip-wpUserGravatar",src:e.wpUserGravatar(i.appointment.customer_id),alt:e.wpUserName(i.appointment.customer_id)},null,8,Va),(0,o.Wm)(n,{id:"tooltip-wpUserGravatar"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.wpUserName(i.appointment.customer_id)),1)])),_:1})])),_:1})):((0,o.wg)(),(0,o.j4)(p,{key:1,class:"md-primary md-size-2x",icon:"person",theme:i.appointment.type_label},null,8,["theme"])),(0,o._)("div",Wa,[(0,o._)("span",null,["canceled"===i.appointment.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.canceled)+": ",1)],64)):(0,o.kq)("",!0),"abandoned"===i.appointment.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.general.abandoned)+": ",1)],64)):(0,o.kq)("",!0),"pending_payment"===i.appointment.status?((0,o.wg)(),(0,o.iD)("span",Ra,(0,r.zw)(e.translations.appointments.statuses.pending_payment),1)):(0,o.kq)("",!0),"pending_form"===i.appointment.status?((0,o.wg)(),(0,o.iD)("span",La,(0,r.zw)(e.translations.appointments.statuses.pending_form),1)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(s.appointmentName),1)]),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(s.appointmentTypeTitle)+" ",1),e.appointmentStaffNames(i.appointment)?((0,o.wg)(),(0,o.iD)("span",ja,(0,r.zw)(e.translations.settings.staff.appointment.with)+" "+(0,r.zw)(e.appointmentStaffNames(i.appointment)),1)):(0,o.kq)("",!0)]),(0,o._)("p",qa,[(0,o._)("span",null,(0,r.zw)(s.appointmentDisplayDate),1),"no_show"===i.appointment.meta.status?((0,o.wg)(),(0,o.iD)("span",Na,[(0,o.Wm)(p,{icon:"event_busy",theme:"grey"})])):(0,o.kq)("",!0)])])])),_:1},8,["class","uid"])}var uo={name:"AppointmentsListItemSingle",props:{appointment:{type:Object,default(){return{}}}},data(){return{moment:fe(),expiresIn:"",expirationDate:fe().utc(this.appointment.expiration_date),countDownInterval:null}},mounted(){this.isPending&&(this.countDown(),this.countDownInterval=setInterval(this.countDown,6e4))},beforeUnmount(){clearInterval(this.countDownInterval)},computed:{appointmentDisplayDate(){let e=fe()(this.appointment.start_date,this.timestampFormat).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment);return this.shouldDisplayTimezone&&(e+=" "+fe().utc(this.appointment.start_date).tz(this.settings.global.timezone_string).format("z")),e},appointmentName(){return this.appointment.customer_information.name?this.appointment.customer_information.name:this.appointment.customer_information.Name},appointmentType(){let e=this.appointmentTypes.filter((e=>e.id===this.appointment.appointment_type_id));return e[0]},appointmentTypeTitle(){return this.appointment.type_title?this.appointment.type_title:this.translations.appointments.deletedType},availableCustomerInformation(){if(!this.appointment)return[];let e={};return Object.keys(this.appointment.customer_information).forEach((t=>{this.appointment.customer_information[t]?.length&&(e[t]=this.appointment.customer_information[t])})),e},basicCustomerInformation(){if(!this.appointment||!this.isBasic)return[];let e={};return Object.keys(this.availableCustomerInformation).forEach((t=>{"name"!==t&&(e[t]=this.appointment.customer_information[t])})),e},paidCustomerInformation(){if(!this.appointment||this.isBasic)return[];let e={};return Object.keys(this.availableCustomerInformation).forEach((t=>{"Name"!==t&&(e[t]=this.appointment.customer_information[t])})),e},currency(){return this.appointmentType&&Object.prototype.hasOwnProperty.call(this.appointmentType,"payments")&&this.appointmentType.payments.currency?this.appointmentType.payments.currency:Object.prototype.hasOwnProperty.call(this.settings,"payments")&&this.settings.payments.default_currency?this.settings.payments.default_currency:null},icons(){let e={};return this.appointmentType&&this.appointmentType.custom_customer_information.forEach((t=>{e[t.field]=t.icon})),e},isBasic(){return!this.settings.installed.license},isCancelable(){return this.isInFuture(this.appointment)&&"canceled"!==this.appointment.status&&!this.isPending&&"abandoned"!==this.appointment.status},isPending(){return this.appointment.status.match(/pending.*/)},shouldDisplayTimezone(){return this.detectedTimezone!==this.settings.global.timezone_string},appointmentStatusGuideUrl(){const e="https://simplyscheduleappointments.com/guides/booking-status-overview/",t={utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_term:"pending-appointment",utm_content:"booking-status-overview"};return`${e}?${Wt().stringify(t)}`},displayResources(){let e=[];return Object.values(this.appointment.selected_resources).forEach((t=>{let i=this.getResourceGroupInformation(t.resource_group_id),a=this.getResourceTitle(t.resource_id);e.push({resourceGroup:i,resourceTitle:a,resourceType:i.resource_type})})),e},canMarkAsNoShow(){return"booked"===this.appointment.status&&!this.isInFuture(this.appointment)&&"no_show"!==this.appointment.meta.status},canMarkAsAbandoned(){return this.isInFuture(this.appointment)&&"pending_payment"===this.appointment.status||"pending_form"===this.appointment.status},canMarkAsBooked(){return this.isInFuture(this.appointment)&&"pending_payment"===this.appointment.status},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.rn)("resources",["resourceGroups","resources"]),...(0,m.Se)(["detectedTimezone","removeNewLineBreaks"]),...(0,m.Se)("appointments",["wpUserGravatar","wpUserName","isInFuture"]),...(0,m.Se)("payments",["displayPrice"]),...(0,m.Se)("staff",["appointmentStaffNames"]),...(0,m.Se)("appointments",["isAddressDisplayed"])},methods:{confirmCancel(e){this.$emit("confirmCancel",e)},confirmAbandon(e){this.$emit("confirmAbandon",e)},confirmBook(e){this.$emit("confirmBook",e)},countDown(){fe().duration(this.expirationDate.diff(fe().utc()))<=0?(this.expiresIn=-1,clearInterval(this.countDownInterval)):this.expiresIn=fe().duration(this.expirationDate.diff(fe().utc())).humanize(!0)},getResourceGroupInformation(e){let t=this.resourceGroups.find((t=>t.id==e));return{title:t.title,resource_type:t.resource_type}},getResourceTitle(e){if(0!=e){let t=this.resources.find((t=>t.id==e));return t.title}},markAsNoShow(){if(!this.canMarkAsNoShow)return;const e={status:"no_show"};this.saveAppointmentMeta({id:this.appointment.id,meta:e}).then((()=>{})).catch((e=>{console.log(e)}))},...(0,m.nv)("appointments",["saveAppointmentMeta"])}};const co=(0,he.Z)(uo,[["render",fo],["__scopeId","data-v-0548cc7e"]]);var ho=co;const mo={class:"foxy-list-text-container"},go={key:0,class:"staff-with"},_o={key:1,class:"staff-with"},yo={class:"foxy-list-text-container"},wo={class:"name-and-status"},xo={key:1,class:"no-show"},Co={style:{"font-size":"14px"}},vo=["onClick"],bo=["onClick"],Bo={class:"expand-actions"};function So(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon"),d=(0,o.up)("router-link"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-list"),c=(0,o.up)("foxy-list-item-expand");return(0,o.wg)(),(0,o.j4)(c,{class:(0,r.C_)("status-"+e.groupAppointmentStatus(this.appointments)),uid:i.appointments[0].id},{expand:(0,o.w5)((()=>[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.appointments,((t,i)=>((0,o.wg)(),(0,o.j4)(p,{key:i,class:(0,r.C_)("status-"+t.status)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{style:{"font-size":"42px","margin-right":"18px"},icon:"person",theme:s.appointmentInfo.type_label},null,8,["theme"]),(0,o._)("div",yo,[(0,o._)("span",wo,["canceled"===t.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.canceled)+": ",1)],64)):(0,o.kq)("",!0),(0,o._)("span",null,(0,r.zw)(t.customer_information.Name),1),"no_show"===t.meta?.status?((0,o.wg)(),(0,o.iD)("span",xo,[(0,o.Wm)(n,{icon:"event_busy",theme:"grey"})])):(0,o.kq)("",!0)]),(0,o._)("span",Co,(0,r.zw)(t.customer_information.Email),1),(0,o._)("p",null,[(0,o.Wm)(d,{class:"link",to:"/ssa/appointment/"+t.id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.viewDetails),1)])),_:2},1032,["to"]),s.cancelable(t)?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)(" | "),(0,o._)("button",{class:"link",onClick:e=>s.confirmCancel(t.id)},(0,r.zw)(e.translations.appointments.cancel),9,vo)],64)):(0,o.kq)("",!0),s.canMarkAsNoShow(t)?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)(" | "),(0,o._)("button",{class:"link",onClick:e=>s.confirmNoShow(t)},(0,r.zw)(e.translations.appointments.markAsNoShow),9,bo)],64)):(0,o.kq)("",!0)])])])),_:2},1032,["class"])))),128)),(0,o._)("li",Bo,[(0,o._)("span",null,[(0,o.Wm)(f,{tag:"md-button",to:"/ssa/event/"+i.group_id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.viewDetails),1)])),_:1},8,["to"])])])])),_:1})])),default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"md-primary md-size-2x",icon:"people",theme:s.appointmentInfo.type_label},null,8,["theme"]),(0,o._)("div",mo,[(0,o._)("span",null,["canceled"===e.groupAppointmentStatus(this.appointments)?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.canceled)+": ",1)],64)):(0,o.kq)("",!0),"abandoned"===e.groupAppointmentStatus(this.appointments)?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.general.abandoned)+": ",1)],64)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(i.appointments.length)+" "+(0,r.zw)(e.translations.appointments.group.people)+" ",1),s.uniqueStatuses.length>1?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:2},(0,o.Ko)(s.statusCounts,((t,i)=>((0,o.wg)(),(0,o.iD)("i",{key:i,class:"labeled"},(0,r.zw)(t)+" "+(0,r.zw)(e.translations.appointments.statuses[i]),1)))),128)):(0,o.kq)("",!0)]),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(s.appointmentInfo.type_title)+" ",1),e.appointmentStaffNames(i.appointments)?((0,o.wg)(),(0,o.iD)("span",go,(0,r.zw)(e.translations.settings.staff.appointment.with)+" "+(0,r.zw)(e.appointmentStaffNames(i.appointments)),1)):(0,o.kq)("",!0),e.appointmentResourcesNames(i.appointments)&&!e.appointmentStaffNames(i.appointments)?((0,o.wg)(),(0,o.iD)("span",_o," - "+(0,r.zw)(e.appointmentResourcesNames(i.appointments)),1)):(0,o.kq)("",!0)]),(0,o._)("p",null,(0,r.zw)(s.appointmentDisplayDate),1)])])),_:1},8,["class","uid"])}var ko={name:"AppointmentsListItemMulti",props:{group_id:{type:[Number,String],required:!1,default:""},appointments:{type:Array,default(){return[]}}},data(){return{moment:fe()}},computed:{appointmentDisplayDate(){let e=fe()(this.appointmentInfo.start_date,this.timestampFormat).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment);return e},appointmentInfo(){let e=this.appointments[0];return{start_date:e.start_date,type_label:e.type_label,type_title:e.type_title?e.type_title:this.translations.appointments.deletedType}},staffNames(){let e=this.appointment.staff_ids.map((e=>this.staff.find((t=>parseInt(e,10)===parseInt(t.id,10))).display_name));return e.join(", ")},statusCounts(){let e={};return this.uniqueStatuses.map((t=>{let i=this.appointments.filter((e=>e.status===t));e[t]=i.length})),e},uniqueStatuses(){let e=this.appointments.map((e=>e.status));return wa().uniq(e)},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.Se)(["detectedTimezone"]),...(0,m.Se)("appointments",["groupAppointmentStatus","isInFuture"]),...(0,m.Se)("staff",["appointmentStaffNames"]),...(0,m.Se)("resources",["appointmentResourcesNames"])},methods:{confirmCancel(e){this.$emit("confirmCancel",e)},canMarkAsNoShow(e){return!this.isInFuture(e)&&"booked"===e.status&&"no_show"!==e.meta?.status},cancelable(e){return this.isInFuture(e)&&"canceled"!==e.status},confirmNoShow(e){if(!this.canMarkAsNoShow(e))return;const t={status:"no_show"};this.saveAppointmentMeta({id:e.id,meta:t}).then((()=>{})).catch((e=>{console.log(e)}))},...(0,m.nv)("appointments",["saveAppointmentMeta"])}};const Ao=(0,he.Z)(ko,[["render",So]]);var Mo=Ao,Do={name:"AppointmentsListItem",props:{appointment:{type:Object,default(){return{}}}},components:{AppointmentsListItemSingle:ho,AppointmentsListItemMulti:Mo},data(){return{}},computed:{isSingle(){return 1===this.appointment.appointments.length}},methods:{confirmCancel(e){this.$emit("confirmCancel",e)},confirmAbandon(e){this.$emit("confirmAbandon",e)},confirmBook(e){this.$emit("confirmBook",e)}}};const To=(0,he.Z)(Do,[["render",Pa]]);var Oo=To;const Go={class:"appointment-filter"},Eo=(0,o._)("div",{class:"md-show",style:{flex:"1"}},null,-1),Uo={key:0,class:"search"},Fo={key:0,class:"appointment-filter-bar",ref:"filterToolbar"},Io={class:"md-subheading"},zo=(0,o._)("div",{class:"clear"},null,-1),Po={key:0,class:"appointment-filter-bar-wrap"},Vo={class:"filter-field"},Wo={class:"filter-field"},Ro={class:"appointment-filter-bar-wrap exception"},Lo={class:"filter-field"},jo={class:"filter-field"},qo={key:0,class:"filter-field"},No={key:1,class:"filter-button"},$o={key:1,class:"appointment-filter-bar-wrap"},Ho={class:"filter-button full-width"};function Zo(e,t,i,l,s,n){const d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-select"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-icon-button"),c=(0,o.up)("foxy-button"),h=(0,o.up)("foxy-menu"),m=(0,o.up)("foxy-menu-anchor"),g=(0,o.up)("foxy-toolbar"),_=(0,o.up)("foxy-dialog-title"),y=(0,o.up)("foxy-dialog-content"),w=(0,o.up)("foxy-dialog-button"),x=(0,o.up)("foxy-dialog-footer"),C=(0,o.up)("foxy-dialog"),v=(0,o.up)("foxy-snackbar"),b=(0,o.up)("date-time-picker"),B=(0,o.up)("foxy-mixed-checkboxes"),S=(0,o.up)("foxy-select-multiple");return(0,o.wg)(),(0,o.iD)("div",Go,[(0,o.Wm)(g,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{label:e.translations.appointments.filter.timeLabel,fullwidth:!1,name:"filter-time",id:"filter-time",modelValue:n.filterTime,"onUpdate:modelValue":t[0]||(t[0]=e=>n.filterTime=e),"aria-label":e.translations.appointments.filter.timeLabel},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{"data-value":"upcoming",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.upcoming),1)])),_:1}),(0,o.Wm)(d,{"data-value":"past",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.past),1)])),_:1}),(0,o.Wm)(d,{"data-value":"range",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.dateRange),1)])),_:1})])),_:1},8,["label","modelValue","aria-label"]),Eo,s.searching?((0,o.wg)(),(0,o.iD)("div",Uo,[(0,o.Wm)(u,{onClick:t[1]||(t[1]=e=>n.closeSearch())},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"keyboard_arrow_left"})])),_:1}),(0,o.wy)((0,o._)("input",{ref:"searchInput",type:"text",id:"filterSearchInput","onUpdate:modelValue":t[2]||(t[2]=e=>n.searchString=e),placeholder:"Search"},null,512),[[a.nr,n.searchString]]),(0,o.wy)((0,o.Wm)(u,{class:"clearFilterSearchInput",onClick:n.clearSearch,size:"small"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"close"})])),_:1},8,["onClick"]),[[a.F8,n.searchString]])])):(0,o.kq)("",!0),s.searching?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:1,ref:"searchInputAnchor",onClick:t[3]||(t[3]=e=>n.openSearch()),icon:"search",indicator:""!=n.searchString},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.search),1)])),_:1},8,["indicator"])),(0,o.Wm)(c,{id:"filterListButton",class:"md-primary",onClick:n.toggleFilters,icon:"filter_list",indicator:e.filterApplied},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(n.filterLabel),1)])),_:1},8,["onClick","indicator"]),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,{class:"md-primary",disabled:!e.displayAppointments.length,onClick:t[4]||(t[4]=e=>s.openMenu=!0),icon:"get_app"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.export),1)])),_:1},8,["disabled"]),(0,o.Wm)(h,{modelValue:s.openMenu,"onUpdate:modelValue":t[5]||(t[5]=e=>s.openMenu=e),"items-no-wrap":""},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:"md-primary indicator-button",onClick:n.openDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.subscribe),1)])),_:1},8,["onClick"]),(0,o.Wm)(d,{class:"md-primary indicator-button",onClick:n.exportAppointments},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.download),1)])),_:1},8,["onClick"])])),_:1},8,["modelValue"])])),_:1})])),_:1}),(0,o.Wm)(C,{ref:"icsSubscribeDialog",id:"icsSubscribeDialog"},{default:(0,o.w5)((()=>[(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.modal.title),1)])),_:1}),(0,o.Wm)(y,null,{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.appointments.filter.modal.instructions),1),(0,o._)("p",null,[(0,o._)("code",{ref:"icsURL"},(0,r.zw)(e.fetchAppointmentsFilteredIcs),513),(0,o.Wm)(u,{onClick:n.copyIcsURL},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"file_copy"})])),_:1},8,["onClick"])])])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,{action:"dismiss",class:"md-primary",onClick:n.closeDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.close),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(v,{position:"top center",modelValue:s.isURLNoticeVisible,"onUpdate:modelValue":t[6]||(t[6]=e=>s.isURLNoticeVisible=e),message:e.translations.appointments.filter.modal.urlCopied},null,8,["modelValue","message"]),s.openFilters?((0,o.wg)(),(0,o.iD)("fieldset",Fo,[(0,o._)("legend",Io,(0,r.zw)(e.translations.appointments.filter.title),1),zo,"range"===n.filterTime?((0,o.wg)(),(0,o.iD)("div",Po,[(0,o._)("div",Vo,[(0,o.Wm)(b,{label:e.translations.appointments.filter.startDate,modelValue:n.rangeMin,"onUpdate:modelValue":t[7]||(t[7]=e=>n.rangeMin=e)},null,8,["label","modelValue"])]),(0,o._)("div",Wo,[(0,o.Wm)(b,{label:e.translations.appointments.filter.endDate,modelValue:n.rangeMax,"onUpdate:modelValue":t[8]||(t[8]=e=>n.rangeMax=e)},null,8,["label","modelValue"])])])):(0,o.kq)("",!0),(0,o._)("div",Ro,[(0,o._)("div",Lo,[(0,o.Wm)(B,{options:e.apptTypesAndLabelsFilterOptions,modelValue:n.filterAppointmentTypesAndLabels,"onUpdate:modelValue":t[9]||(t[9]=e=>n.filterAppointmentTypesAndLabels=e),label:e.translations.appointments.filter.typesAndLabels,"parent-aria-label":e.translations.appointments.filter.selectAllTypes,"hide-empty-parents":""},null,8,["options","modelValue","label","parent-aria-label"])]),(0,o._)("div",jo,[(0,o.Wm)(S,{options:n.appointmentStatusesOptions,modelValue:n.filterAppointmentStatuses,"onUpdate:modelValue":t[10]||(t[10]=e=>n.filterAppointmentStatuses=e),label:e.filter.status.length?e.translations.appointments.filter.statusLabel+" ("+e.filter.status.length+" "+e.translations.appointments.filter.selected+")":e.translations.appointments.filter.statusLabel},null,8,["options","modelValue","label"])]),e.currentUserCan("ssa_manage_others_appointments")&&e.staffStatusPublish.length?((0,o.wg)(),(0,o.iD)("div",qo,[(0,o.Wm)(S,{options:n.staffStatusPublishOptions,modelValue:n.filterAppointmentStaff,"onUpdate:modelValue":t[11]||(t[11]=e=>n.filterAppointmentStaff=e),label:e.filter.staff.length?e.translations.appointments.filter.staffLabel+" ("+e.filter.staff.length+" "+e.translations.appointments.filter.selected+")":e.translations.appointments.filter.staffLabel},null,8,["options","modelValue","label"])])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_others_appointments")?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",No,[(0,o.Wm)(c,{class:"md-primary",onClick:n.resetFilter,disabled:!e.filterApplied||i.loading,icon:"delete_sweep"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.reset),1)])),_:1},8,["onClick","disabled"])]))]),e.currentUserCan("ssa_manage_others_appointments")?((0,o.wg)(),(0,o.iD)("div",$o,[(0,o._)("div",Ho,[(0,o.Wm)(c,{class:"md-primary",onClick:n.resetFilter,disabled:!e.filterApplied||i.loading,icon:"delete_sweep"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.reset),1)])),_:1},8,["onClick","disabled"])])])):(0,o.kq)("",!0)],512)):(0,o.kq)("",!0)])}const Yo={class:"date-time-picker-wrapper"},Ko={class:"foxy-textfield-with-icon-wrapper"},Jo={ref:"rome"};function Xo(e,t,i,r,l,s){const n=(0,o.up)("foxy-textfield"),d=(0,o.up)("foxy-icon"),p=(0,o.up)("foxy-icon-button"),f=(0,o.up)("foxy-dialog-content"),u=(0,o.up)("foxy-dialog-button"),c=(0,o.up)("foxy-dialog-footer"),h=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",Yo,[(0,o._)("div",Ko,[(0,o.Wm)(n,{label:i.label,type:"text",id:l.id,ref:"input",readonly:"",modelValue:s.displayDateTime,"onUpdate:modelValue":t[0]||(t[0]=e=>s.displayDateTime=e),valid:i.isValid,onClick:s.openPicker,onKeydown:[(0,a.D2)(s.openPicker,["enter"]),(0,a.D2)((0,a.iM)(s.openPicker,["prevent"]),["space"])],class:"textfield-with-icon",helptext:i.errorText,"helptext-persistent":"","helptext-validation":""},null,8,["label","id","modelValue","valid","onClick","onKeydown","helptext"]),(0,o.wy)((0,o.Wm)(p,{"data-test":"test-clear-datetime-picker",class:"foxy-textfield-action-button",onClick:s.clearValue},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"clear"})])),_:1},8,["onClick"]),[[a.F8,s.displayDateTime]])]),(0,o.Wm)(h,{ref:"picker",class:"date-picker"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{style:{padding:"0"}},{default:(0,o.w5)((()=>[(0,o._)("div",Jo,null,512)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{action:"accept",onClick:s.closePicker},{default:(0,o.w5)((()=>[(0,o.Uk)(" OK ")])),_:1},8,["onClick"])])),_:1})])),_:1},512)])}var Qo=i(48254),er=i.n(Qo),tr={name:"DateTime",props:{modelValue:{type:String,default:""},label:{type:String,required:!0},isValid:{type:Boolean,default:!0},errorText:{type:String,default:""}},emits:["update:modelValue"],data(){return{id:null,rome:er(),moment:fe(),picker:null}},mounted:function(){this.id="picker-"+this._uid,this.picker=er()(this.$refs.rome,{weekStart:this.settings.global.start_of_week,initialValue:this.initialValue,timeFormat:this.settings.global.time_format_moment}).on("data",(e=>{this.convertToUTC(e)}))},beforeUnmount(){this.picker&&this.picker.destroy()},computed:{isValueValid(){return fe().utc(this.modelValue,this.timestampFormat).isValid()},displayDateTime:{get(){return this.isValueValid?fe().utc(this.modelValue,this.timestampFormat).tz(this.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment+" z"):null},set(){}},initialValue(){return this.isValueValid?fe().utc(this.modelValue,this.timestampFormat).tz(this.settings.global.timezone_string).format(this.timestampFormat):fe()().startOf("day")},...(0,m.rn)(["settings","timestampFormat"])},methods:{convertToUTC(e){let t=fe().tz(e,this.timestampFormat,this.settings.global.timezone_string).utc().format(this.timestampFormat);this.$emit("update:modelValue",t)},clearValue(){this.$emit("update:modelValue",null)},openPicker(){this.picker.setValue(this.initialValue),this.picker.refresh(),this.$refs.picker.open()},closePicker(){this.$refs.picker.close()}}};const ir=(0,he.Z)(tr,[["render",Xo]]);var ar=ir;const or=["aria-hidden","id"],rr={key:0,class:"content-container md-primary"},lr={class:"screen-reader-text"},sr=["value","aria-label","aria-checked","aria-controls"],nr=(0,o._)("span",{class:"checkmark"},null,-1),dr={key:0,class:"checkmark-indeterminate"},pr={key:0},fr={class:"container"},ur=["value","checked","id"],cr=(0,o._)("span",{class:"checkmark"},null,-1);function hr(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["foxy-mixed-checkbox-menu",{"checkbox-menu-filled":s.isAnySelected}])},[(0,o.Wm)(n,{label:i.label,type:"button",id:s.inputFieldId,"aria-haspopup":"dialog","aria-controls":s.dialogId,class:"ellipsis","trailing-icon":l.isMenuVisible?"keyboard_arrow_up":"keyboard_arrow_down",modelValue:s.checkedItems,"onUpdate:modelValue":t[0]||(t[0]=e=>s.checkedItems=e),onClick:s.toggleMenu,readonly:"","aria-disabled":i.disabled,disabled:i.disabled},null,8,["label","id","aria-controls","trailing-icon","modelValue","onClick","aria-disabled","disabled"]),l.isMenuVisible?((0,o.wg)(),(0,o.iD)("div",{key:0,role:"dialog","aria-hidden":!l.isMenuVisible,class:(0,r.C_)(["menu-popup",i.popupClasses]),id:s.dialogId},[(0,o._)("div",{class:(0,r.C_)(["popupOverlay",{active:l.isMenuVisible}])},null,2),l.isMenuVisible?((0,o.wg)(),(0,o.iD)("div",rr,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.optionsComputed,(e=>((0,o.wg)(),(0,o.iD)("fieldset",{class:"option",key:e.value},[(0,o._)("legend",lr,(0,r.zw)(e.label),1),(0,o._)("div",{role:"checkbox",value:e.value,class:"parent-checkbox container checkboxes","aria-label":i.parentAriaLabel+" "+e.label,"aria-checked":s.optionState(e.value),"aria-controls":s.getSuboptionsIds(e.value),onClick:t[1]||(t[1]=(...e)=>s.handleInputParent&&s.handleInputParent(...e)),onKeypress:t[2]||(t[2]=(...e)=>s.handleKeyPress&&s.handleKeyPress(...e)),tabindex:"0"},[(0,o._)("span",null,(0,r.zw)(e.label),1),nr,s.isIndeterminate(e.value)?((0,o.wg)(),(0,o.iD)("span",dr)):(0,o.kq)("",!0)],40,sr),e.suboptions?((0,o.wg)(),(0,o.iD)("ul",pr,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.suboptions,(e=>((0,o.wg)(),(0,o.iD)("li",{class:"suboption-container",key:e.value},[(0,o._)("label",fr,[(0,o._)("span",null,(0,r.zw)(e.label),1),(0,o._)("input",{class:"nested-checkbox checkboxes",type:"checkbox",value:e.value,checked:s.isSuboptionChecked(e.value),onInput:t[3]||(t[3]=(...e)=>s.handleInputChildren&&s.handleInputChildren(...e)),id:s.getSuboptionId(e)},null,40,ur),cr])])))),128))])):(0,o.kq)("",!0)])))),128))])):(0,o.kq)("",!0)],10,or)):(0,o.kq)("",!0)],2)}var mr={name:"FoxyMixedCheckboxes",props:{options:{type:Array,required:!0},modelValue:{type:Object,required:!0},label:{type:String,required:!0},hideEmptyParents:{type:Boolean,default:!1},parentAriaLabel:{type:String,required:!0},disabled:{type:Boolean,default:!1},popupClasses:{type:String,default:""}},emits:["update:modelValue"],data(){return{isMenuVisible:!1}},computed:{optionsComputed(){return this.hideEmptyParents?this.options.filter((e=>!wa().isEmpty(e.suboptions))):this.options},inputFieldId(){let e=this.label.replace(/[^a-zA-Z0-9_-]/g,"");return"menu-trigger-"+e},dialogId(){let e=this.label.replace(/[^a-zA-Z0-9_-]/g,"");return"popup-menu-container-"+e},selectedOptions:{get(){return this.modelValue.selectedOptions?this.modelValue.selectedOptions:[]},set(e){this.$emit("update:modelValue",{selectedOptions:!0,value:e})}},selectedSuboptions:{get(){return this.modelValue.selectedSuboptions?this.modelValue.selectedSuboptions:[]},set(e){this.$emit("update:modelValue",{selectedSuboptions:!0,value:e})}},checkedItems(){let e=[];return this.optionsComputed.forEach((t=>{this.selectedOptions.includes(t.value)&&e.push(t.label),t.suboptions.forEach((t=>{this.selectedSuboptions.includes(t.value)&&e.push(t.label)}))})),e.join(", ").toString()},isAnySelected(){return this.checkedItems.length>0},checkboxes(){if(!this.isMenuVisible)return[];let e=document.querySelectorAll(".checkboxes");return e||[]},firstCheckboxElement(){return this.isMenuVisible&&this.checkboxes.length?this.checkboxes[0]:null},lastCheckboxElement(){return this.isMenuVisible&&this.checkboxes.length?this.checkboxes[this.checkboxes.length-1]:null}},mounted(){document.addEventListener("click",this.overlayClickHandler),document.addEventListener("keydown",this.keyDownHandler)},beforeUnmount(){document.removeEventListener("click",this.overlayClickHandler),document.removeEventListener("keydown",this.keyDownHandler)},methods:{toggleMenu(){this.isMenuVisible=!this.isMenuVisible},overlayClickHandler(e){this.isMenuVisible&&e.target.matches(".popupOverlay")&&this.hideMenu()},keyDownHandler(e){this.isMenuVisible&&("Escape"!==e.key?9===e.keyCode&&(e.shiftKey?document.activeElement===this.firstCheckboxElement&&(e.preventDefault(),this.lastCheckboxElement.focus()):document.activeElement===this.lastCheckboxElement&&(e.preventDefault(),this.firstCheckboxElement.focus())):this.hideMenu())},hideMenu(){this.isMenuVisible=!1},getSuboptionsIds(e){let t=this.optionsComputed.find((t=>t.value===e)),i=t.suboptions.map((e=>this.getSuboptionId(e)));return i?i.join(" "):""},getSuboptionId(e){return"suboption-"+e.label.replace(/[^a-zA-Z0-9_-]/g,"")+"-"+e.value.replace(/[^a-zA-Z0-9_-]/g,"")},optionState(e){return this.isOptionChecked(e)?"true":this.isIndeterminate(e)?"mixed":"false"},isOptionChecked(e){return this.selectedOptions.includes(e)},isSuboptionChecked(e){return this.selectedSuboptions.includes(e)},handleInputChildren(e){if(e.target.checked){let t=[...this.selectedSuboptions];t.push(e.target.value),this.selectedSuboptions=t,this.maybeCheckParent(e.target)}else this.selectedSuboptions=this.selectedSuboptions.filter((t=>t!==e.target.value)),this.maybeUncheckParent(e.target)},maybeUncheckParent(e){let t=e.closest(".option"),i=t.querySelector(".parent-checkbox"),a=i.getAttribute("value");this.isOptionChecked(a)&&(this.selectedOptions=this.selectedOptions.filter((e=>e!==a)))},maybeCheckParent(e){let t=e.closest(".option"),i=t.querySelectorAll(".nested-checkbox"),a=[];for(const r of i)a.push(r.checked);let o=a.every((e=>!0===e));if(o){let e=t.querySelector(".parent-checkbox"),i=e.getAttribute("value"),a=[...this.selectedOptions];a.push(i),this.selectedOptions=a}},handleKeyPress(e){32==e.keyCode&&(e.preventDefault(),this.handleInputParent(e))},handleInputParent(e){let t;t="SPAN"===e.target.tagName?e.target.parentElement:e.target;let i=t.getAttribute("value"),a=this.isOptionChecked(i);if(a)this.selectedOptions=this.selectedOptions.filter((e=>e!==i)),this.uncheckAllSuboptions(i);else{let e=[...this.selectedOptions];e.push(i),this.selectedOptions=e,this.checkAllSuboptions(i)}},checkAllSuboptions(e){let t=this.optionsComputed.find((t=>t.value===e)),i=t.suboptions.map((e=>e.value)),a=[...i,...this.selectedSuboptions];this.selectedSuboptions=wa().uniq(a)},uncheckAllSuboptions(e){let t=this.optionsComputed.find((t=>t.value===e)),i=t.suboptions.map((e=>e.value));this.selectedSuboptions=this.selectedSuboptions.filter((e=>!i.includes(e)))},isIndeterminate(e){if(this.selectedOptions.includes(e))return!1;let t=this.optionsComputed.find((t=>t.value===e));return t.suboptions.some((e=>this.selectedSuboptions.includes(e.value)))}}};const gr=(0,he.Z)(mr,[["render",hr]]);var _r=gr,yr={name:"AppointmentFilter",store:$J,components:{DateTimePicker:ar,FoxyMixedCheckboxes:_r},props:{loading:{type:Boolean,default:!1}},data(){return{appointmentStatuses:M,defaultAppointmentFilter:T,openFilters:!1,searching:!1,openMenu:!1,isURLNoticeVisible:!1}},mounted(){if(this.localStorageGet("ssaAppointmentFilter")){try{this.setFilter(JSON.parse(this.localStorageGet("ssaAppointmentFilter"))),this.localStorageSet("ssaAppointmentFilter",this.localStorageGet("ssaAppointmentFilter"),36e5)}catch(e){localStorage.removeItem("ssaAppointmentFilter")}this.openFilters=this.isFilterOpenState}},beforeUnmount(){this.setIsFilterOpenState(this.openFilters)},computed:{filterAppointmentStatuses:{get(){return this.filter.status},set(e){let t=JSON.stringify(this.filter.status),i=JSON.stringify(e);t!==i&&this.emitFilterUpdate(),this.setFilter({key:"status",value:e})}},filterAppointmentTypesAndLabels:{get(){return{selectedOptions:this.filter.appointment_type_label_id?wa().cloneDeep(this.filter.appointment_type_label_id):[],selectedSuboptions:this.filter.appointment_type_id?wa().cloneDeep(this.filter.appointment_type_id):[]}},set(e){let t=JSON.stringify(this.filter.appointment_type_label_id),i=JSON.stringify(this.filter.appointment_type_id),a=JSON.stringify(e.value);t!==a&&i!==a&&this.emitFilterUpdate(),e.selectedOptions?this.setFilter({key:"appointment_type_label_id",value:e.value}):this.setFilter({key:"appointment_type_id",value:e.value})}},filterAppointmentStaff:{get(){return this.filter.staff},set(e){let t=JSON.stringify(this.filter.staff),i=JSON.stringify(e);t!==i&&this.emitFilterUpdate(),this.setFilter({key:"staff",value:e})}},filterLabel(){return this.openFilters?this.translations.appointments.filter.filterClose:this.translations.appointments.filter.filter},filterTime:{get(){return this.filter.time},set(e){let t=JSON.stringify(this.filter.time),i=JSON.stringify(e);t!==i&&"range"!==e&&this.emitFilterUpdate(),"range"===e&&(this.openFilters=!0),this.setFilter({key:"date_range_min",value:null}),this.setFilter({key:"date_range_max",value:null}),this.setFilter({key:"time",value:e})}},rangeMin:{get(){return this.filter.date_range_min},set(e){let t=JSON.stringify(this.filter.date_range_min),i=JSON.stringify(e);t!==i&&this.emitFilterUpdate(),this.setFilter({key:"date_range_min",value:e})}},rangeMax:{get(){return this.filter.date_range_max},set(e){let t=JSON.stringify(this.filter.date_range_max),i=JSON.stringify(e);t!==i&&this.emitFilterUpdate(),this.setFilter({key:"date_range_max",value:e})}},searchString:{get(){return this.filter.search},set(e){let t=JSON.stringify(this.filter.search),i=JSON.stringify(e).toLowerCase();t!==i&&this.filter.search.length>0&&this.emitFilterUpdate(),this.setFilter({key:"search",value:e.toLowerCase()})}},appointmentStatusesOptions(){return this.appointmentStatuses.map((e=>({value:e,label:this.translations.appointments.statuses[e]})))},staffStatusPublishOptions(){return this.staffStatusPublish.length?this.staffStatusPublish.map((e=>({value:e.id,label:e.display_name}))):[]},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.rn)("appointments",["filter","isFilterOpenState"]),...(0,m.Se)(["localStorageGet","localStorageSet"]),...(0,m.Se)("appointments",["displayAppointments","filterApplied","csvExportFile","fetchAppointmentsFilteredIcs","apptTypesAndLabelsFilterOptions"]),...(0,m.Se)("staff",["currentUserCan","staffStatusPublish"])},methods:{emitFilterUpdate:wa().debounce((function(){this.localStorageSet("ssaAppointmentFilter",JSON.stringify(this.filter),36e5),this.setLoadedAll(!1),this.setPage(1),this.$emit("update")}),1e3),exportAppointments(){let e=[];this.displayAppointments.map((t=>{e=e.concat(t.appointments)})),this.csvExportFile(e)},resetFilter(){this.setFilter(T),this.emitFilterUpdate(),this.openFilters=!1},toggleFilters(){this.openFilters=!this.openFilters},openDialog(){this.$refs["icsSubscribeDialog"].open()},closeDialog(){this.$refs["icsSubscribeDialog"].close()},copyIcsURL(){let e=this.$refs["icsURL"].textContent,t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999em",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t),this.isURLNoticeVisible=!0},openSearch(){this.searching=1,this.$nextTick((()=>this.$refs.searchInput.focus())),document.addEventListener("keydown",this.keyPressEsc)},keyPressEsc(e){if("Escape"===e.key){if(this.searchString&&"filterSearchInput"===e.target?.id)return void(this.searchString="");this.closeSearch(),document.removeEventListener("keydown",this.keyPressEsc)}},closeSearch(){this.searchString="",this.searching=0,this.$nextTick((()=>this.$refs.searchInputAnchor.$el?.querySelector("button")?.focus()))},clearSearch(){this.searchString="",this.$nextTick((()=>this.$refs.searchInput.focus()))},...(0,m.OI)("appointments",["setFilter","setLoadedAll","setPage","setIsFilterOpenState"])}};const wr=(0,he.Z)(yr,[["render",Zo]]);var xr=wr;const Cr={class:"md-list-text-container"},vr={class:"md-list-text-container"},br={class:"md-list-text-container"},Br=["innerHTML"],Sr={key:1},kr={id:"cancelationNoteHelperText",class:"screen-reader-text"};function Ar(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-title"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-dialog-content"),c=(0,o.up)("foxy-dialog-button"),h=(0,o.up)("foxy-dialog-footer"),m=(0,o.up)("foxy-dialog");return i.appointment?((0,o.wg)(),(0,o.j4)(m,{key:0,class:"cancel-dialog",ref:"confirmCancel"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirm),1)])),_:1}),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,null,{default:(0,o.w5)((()=>["pending_form"==i.appointment.status?((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((()=>[(0,o._)("div",Cr,[(0,o._)("span",null,(0,r.zw)(e.translations.settings.notifications.filter.fields.appointment_type),1),(0,o._)("span",null,(0,r.zw)(e.getAppointmentTypeById(i.appointment.appointment_type_id).title),1)])])),_:1})):(0,o.kq)("",!0),"pending_form"==i.appointment.status?((0,o.wg)(),(0,o.j4)(d,{key:1},{default:(0,o.w5)((()=>[(0,o._)("div",vr,[(0,o._)("span",null,(0,r.zw)(e.translations.support.appointmentStartDate),1),(0,o._)("span",null,(0,r.zw)(s.appointmentDisplayDate),1)])])),_:1})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.availableCustomerInformation,((t,i)=>((0,o.wg)(),(0,o.j4)(d,{key:i},{default:(0,o.w5)((()=>[(0,o._)("div",br,[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.customer_information[i]?e.translations.appointmentTypes.customer_information[i]:i),1),"string"===typeof t?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:t},null,8,Br)):((0,o.wg)(),(0,o.iD)("span",Sr,(0,r.zw)(t.join(", ")),1))])])),_:2},1024)))),128))])),_:1}),(0,o.Wm)(f,{modelValue:l.cancelationNote,"onUpdate:modelValue":t[0]||(t[0]=e=>l.cancelationNote=e),label:e.translations.appointments.cancelationNote,helptext:e.translations.appointments.visibleToCustomers,"helptext-persistent":"",multiline:"",cols:"60",rows:"3",fullwidth:"",id:"cancelationNote"+i.appointment.id,"aria-describedby":"cancelationNoteHelperText","leading-icon":"speaker_notes"},null,8,["modelValue","label","helptext","id"]),(0,o._)("span",kr,(0,r.zw)(e.translations.appointments.visibleToCustomers),1)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,{action:"dismiss",onClick:s.closeDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirmCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(c,{action:"accept",mode:"raised","is-default":"",onClick:s.cancelAppt},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirmOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)):(0,o.kq)("",!0)}var Mr={name:"AppointmentCancelDialog",props:{appointment:{type:Object,default(){return{}}},availableCustomerInformation:{type:Object,default(){return{}}}},data(){return{cancelationNote:null}},computed:{appointmentDisplayDate(){let e=fe()(this.appointment.start_date,this.timestampFormat).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment);return this.shouldDisplayTimezone&&(e+=" "+fe().utc(this.appointment.start_date).tz(this.settings.global.timezone_string).format("z")),e},shouldDisplayTimezone(){return this.detectedTimezone!==this.settings.global.timezone_string},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["user","settings","timestampFormat"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"]),...(0,m.Se)(["detectedTimezone"])},methods:{openDialog(){this.clearCancelationNote(),this.$nextTick((()=>{this.$refs["confirmCancel"].open()}))},closeDialog(){this.clearCancelationNote(),this.$refs["confirmCancel"].close()},cancelAppt(){var e=this.appointment.id,t={status:"canceling"};this.setAppointmentData({id:e,appt:t});var i={id:e,status:"canceled"};this.saveAppointment(i).then((()=>{})).catch((e=>{console.log(e)})),this.maybeSaveCancelationNote(e),this.closeDialog()},maybeSaveCancelationNote(e){if(!wa().isEmpty(this.cancelationNote)&&!wa().isEmpty(e)){var t={cancelation_note:this.cancelationNote,canceled_by_user_id:this.user.user_id};this.saveAppointmentMeta({id:e,meta:t}).then((()=>{})).catch((e=>{console.log(e)}))}},clearCancelationNote(){this.cancelationNote=null},...(0,m.nv)("appointments",["saveAppointment","saveAppointmentMeta"]),...(0,m.OI)("appointments",["setAppointmentData"])}};const Dr=(0,he.Z)(Mr,[["render",Ar]]);var Tr=Dr;const Or={class:"md-list-text-container"},Gr={class:"md-list-text-container"},Er={class:"md-list-text-container"},Ur=["innerHTML"],Fr={key:1};function Ir(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-title"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list"),f=(0,o.up)("foxy-dialog-content"),u=(0,o.up)("foxy-dialog-button"),c=(0,o.up)("foxy-dialog-footer"),h=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.j4)(h,{ref:"confirmAbandon"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.markAsAbandonConfirm),1)])),_:1}),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[i.appointment?((0,o.wg)(),(0,o.j4)(p,{key:0},{default:(0,o.w5)((()=>["pending_form"==i.appointment.status?((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((()=>[(0,o._)("div",Or,[(0,o._)("span",null,(0,r.zw)(e.translations.settings.notifications.filter.fields.appointment_type),1),(0,o._)("span",null,(0,r.zw)(e.getAppointmentTypeById(i.appointment.appointment_type_id).title),1)])])),_:1})):(0,o.kq)("",!0),"pending_form"==i.appointment.status?((0,o.wg)(),(0,o.j4)(d,{key:1},{default:(0,o.w5)((()=>[(0,o._)("div",Gr,[(0,o._)("span",null,(0,r.zw)(e.translations.support.appointmentStartDate),1),(0,o._)("span",null,(0,r.zw)(s.appointmentDisplayDate),1)])])),_:1})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.availableCustomerInformation,((t,i,a)=>((0,o.wg)(),(0,o.j4)(d,{key:a},{default:(0,o.w5)((()=>[(0,o._)("div",Er,[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.customer_information[i]?e.translations.appointmentTypes.customer_information[i]:i),1),"string"===typeof t?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:t},null,8,Ur)):((0,o.wg)(),(0,o.iD)("span",Fr,(0,r.zw)(t.join(", ")),1))])])),_:2},1024)))),128))])),_:1})):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{action:"dismiss",onClick:s.closeDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirmCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(u,{action:"accept",onClick:s.markAsAbandoned},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.markAsAbandonconfirmOK),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)}var zr={name:"AppointmentAbandonDialog",props:{appointment:{type:Object,default(){return{}}},availableCustomerInformation:{type:Object,default(){return{}}}},computed:{appointmentDisplayDate(){let e=fe()(this.appointment.start_date,this.timestampFormat).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment);return this.shouldDisplayTimezone&&(e+=" "+fe().utc(this.appointment.start_date).tz(this.settings.global.timezone_string).format("z")),e},shouldDisplayTimezone(){return this.detectedTimezone!==this.settings.global.timezone_string},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"]),...(0,m.Se)(["detectedTimezone"])},methods:{openDialog(){this.$nextTick((()=>{this.$refs["confirmAbandon"].open()}))},closeDialog(){this.$refs["confirmAbandon"].close()},markAsAbandoned(){var e=this.appointment.id,t={status:"abandoning"};this.setAppointmentData({id:e,appt:t});var i={id:e,status:"abandoned"};this.saveAppointment(i).then((()=>{})).catch((e=>{console.log(e)})),this.closeDialog()},...(0,m.nv)("appointments",["saveAppointment"]),...(0,m.OI)("appointments",["setAppointmentData"])}};const Pr=(0,he.Z)(zr,[["render",Ir]]);var Vr=Pr,Wr={name:"AppointmentsList",store:$J,components:{loading:ge,appointmentsListItem:Oo,AppointmentFilter:xr,AppointmentCancelDialog:Tr,AppointmentAbandonDialog:Vr},data(){return{currentAppointment:null,displayAllAppointments:!0,error:!1,fetchedStaff:!1,fetchedResourceGroups:!1,fetchedResources:!1,fetchedAppointments:!1,loading:!0,loadingMore:!1,moment:fe()}},mounted(){this.init(),this.maybeFetchAppointments()},watch:{$route:"maybeFetchAppointments"},computed:{emptyIcon(){return this.filterApplied?"":"upcoming"===this.filter.time?this.api.admin_static_url+"/images/no-appointments.svg":""},emptyLabel(){return this.filterApplied?this.translations.appointments.emptyAll:"upcoming"===this.filter.time?this.translations.appointments.emptyUpcoming:"past"===this.filter.time?this.translations.appointments.emptyPast:this.translations.appointments.emptyAll},showTz(){let e=this.detectedTimezone;return e!==this.settings.global.timezone_string},availableCustomerInformation(){if(!this.currentAppointment)return[];let e={};return Object.keys(this.currentAppointment.customer_information).forEach((t=>{this.currentAppointment.customer_information[t]?.length&&(e[t]=this.currentAppointment.customer_information[t])})),e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["timestampFormat","settings","api"]),...(0,m.rn)("booking_embed",["bookingEmbed"]),...(0,m.rn)("appointments",["appointments","filter","loadedAll","page","perPage","refreshMomentAppts"]),...(0,m.rn)("staff",["staff"]),...(0,m.rn)("resources",["resourceGroups","resources"]),...(0,m.Se)(["detectedTimezone"]),...(0,m.Se)("appointments",["appointmentCount","definedRange","displayAppointments","filterApplied"]),...(0,m.Se)("payments",["paymentsModule"]),...(0,m.Se)("staff",["currentUserCan","staffModule"]),...(0,m.Se)("resources",["resourcesModule"])},methods:{toggleDisplayAllAppointments(){this.displayAllAppointments=!this.displayAllAppointments},calculateDisplayAllAppointments(){const e="range"===this.filter.time,t=this.filter.date_range_min?fe()(this.filter.date_range_min).utc().format(this.timestampFormat):null,i=this.filter.date_range_max?fe()(this.filter.date_range_max).utc().format(this.timestampFormat):null,a=e&&t&&i;this.displayAllAppointments=this.displayAppointments.length<101&&!a},confirmCancel(e){this.currentAppointment=this.appointments.find((t=>t.id.toString()===e.toString())),this.$nextTick((()=>{this.$refs.cancelDialog.openDialog()}))},confirmAbandon(e){this.currentAppointment=this.appointments.find((t=>t.id.toString()===e.toString())),this.$nextTick((()=>{this.$refs.abandonDialog.openDialog()}))},navigateToAvailabilityDetective(){this.$refs.bookingDialog.close(),this.$router.push("/ssa/support/availability-detective")},markAsBooked(){var e=this.currentAppointment.id,t={status:"booking"};this.setAppointmentData({id:e,appt:t});var i={id:e,status:"booked"};this.saveAppointment(i).then((()=>{})).catch((e=>{console.log(e)})),this.$refs["confirmBook"].close()},cancelBook(){this.$refs["confirmBook"].close()},confirmBook(e){this.currentAppointment=this.appointments.find((t=>t.id.toString()===e.toString())),this.$refs["confirmBook"].open()},init(){return!this.staffModule.enabled||this.staff||this.fetchedStaff?!this.resourcesModule.enabled||this.resourceGroups||this.fetchedResourceGroups?!this.resourcesModule.enabled||this.resources||this.fetchedResources?this.displayAppointments.length||this.fetchedAppointments?void(this.loading=!1):(this.loading=!0,void this.fetchAppointmentsFiltered().then((()=>{this.init(),this.fetchedAppointments=!0})).catch((e=>{this.error=!0,this.loading=!1,this.fetchedAppointments=!0,console.log(e)}))):(this.loading=!0,void this.fetchResources().then((()=>{this.init(),this.fetchedResource=!0})).catch((e=>{this.error=!0,this.loading=!1,this.fetchedResources=!0,console.log(e)}))):(this.loading=!0,void this.fetchResourceGroups().then((()=>{this.init(),this.fetchedResourceGroups=!0})).catch((e=>{this.error=!0,this.loading=!1,this.fetchedResourceGroups=!0,console.log(e)}))):(this.loading=!0,void this.fetchStaff().then((()=>{this.init(),this.fetchedStaff=!0})).catch((e=>{this.error=!0,this.loading=!1,this.fetchedStaff=!0,console.log(e)})))},loadAppointments(){this.displayAppointments.length||(this.loading=!0),this.definedRange&&(this.loading=!0),this.fetchAppointmentsFiltered().then((()=>{this.calculateDisplayAllAppointments(),this.loading=!1})).catch((e=>{this.error=!0,this.loading=!1,console.log(e)}))},loadMoreAppointments(){this.loadingMore=!0;let e=this.page;this.setPage(e+1),this.fetchAppointmentsFiltered().then((()=>{this.loadingMore=!1})).catch((e=>{this.error=!0,this.loadingMore=!1,console.log(e)}))},loadBookingEmbed(){this.fetchBookingEmbed().then((()=>{this.$refs.bookingDialog.open()}))},maybeFetchAppointments(){if(wa().isEmpty(this.refreshMomentAppts))return void this.resetRefreshMomentAppts();let e=fe()().subtract(2,"minutes");e>this.refreshMomentAppts&&(this.fetchAppointmentsFiltered(),this.resetRefreshMomentAppts())},...(0,m.nv)("booking_embed",["fetchBookingEmbed"]),...(0,m.nv)("appointments",["fetchAppointmentsFiltered","saveAppointment"]),...(0,m.nv)("staff",["fetchStaff"]),...(0,m.nv)("resources",["fetchResourceGroups","fetchResources"]),...(0,m.OI)("appointments",["setAppointmentData","setPage","resetRefreshMomentAppts"])}};const Rr=(0,he.Z)(Wr,[["render",za]]);var Lr=Rr;const jr=e=>((0,o.dD)("data-v-9ad3d1c4"),e=e(),(0,o.Cn)(),e),qr={class:"appointment"},Nr=jr((()=>(0,o._)("span",{class:"screen-reader-text"},"View all appointments",-1))),$r={class:"md-title",style:{flex:"1"}},Hr={class:"single-appointment"},Zr={class:"customer-name"},Yr=["src","alt"],Kr={key:2,style:{"margin-left":"0.5rem"}},Jr={class:"type"},Xr={class:"time"},Qr={key:0,class:"meeting"},el=["href"],tl={key:1,class:"customer-information"},il={key:2,class:"customer-information"},al={key:0},ol={class:"md-list-text-container"},rl={key:1},ll={class:"md-list-text-container"},sl={key:0},nl=["href"],dl={key:1},pl={key:2},fl={class:"md-list-text-container"},ul={key:0},cl=["href"],hl={key:1},ml=["innerHTML"],gl={key:1},_l={class:"md-list-text-container"},yl={class:"md-list-text-container"},wl={class:"appointment-details"},xl={class:"appointment-detail"},Cl={key:0,class:"status-meta"},vl={class:"screen-reader-text"},bl={key:3},Bl={key:4},Sl={key:0,class:"appointment-detail"},kl={key:0},Al={key:1},Ml={key:1,class:"appointment-detail"},Dl={class:"appointment-detail__reschedulingHistory"},Tl={class:"appointment-detail"},Ol={key:2,class:"appointment-detail"},Gl=["href"],El={key:3,class:"appointment-detail"},Ul=["href"],Fl={class:"appointment-detail"},Il={key:4,class:"appointment-detail"},zl=["href"],Pl={key:6,class:"appointment-payments"},Vl={class:"md-title"},Wl={class:"payment-list"},Rl={key:7,style:{"margin-top":"18px","margin-bottom":"18px"}},Ll={key:0},jl={class:"md-list-text-container"},ql=["innerHTML"],Nl={key:1},$l={class:"ssa-dialog-iframe-container"},Hl=["src"];function Zl(e,t,i,a,l,s){const n=(0,o.up)("foxy-empty"),d=(0,o.up)("loading"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-icon-button"),c=(0,o.up)("foxy-list-item"),h=(0,o.up)("foxy-menu"),m=(0,o.up)("foxy-menu-anchor"),g=(0,o.up)("foxy-toolbar"),_=(0,o.up)("foxy-tooltip"),y=(0,o.up)("foxy-avatar"),w=(0,o.up)("appointment-edit-staff-dialog"),x=(0,o.up)("appointment-meta"),C=(0,o.up)("router-link"),v=(0,o.up)("appointment-payment-item"),b=(0,o.up)("revisions"),B=(0,o.up)("foxy-accordion-item"),S=(0,o.up)("foxy-accordion"),k=(0,o.up)("AppointmentCancelDialog"),A=(0,o.up)("AppointmentAbandonDialog"),M=(0,o.up)("AppointmentEditStatusDialog"),D=(0,o.up)("foxy-dialog-title"),T=(0,o.up)("foxy-notification"),O=(0,o.up)("foxy-dialog-content"),G=(0,o.up)("foxy-dialog-button"),E=(0,o.up)("foxy-dialog-footer"),U=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",qr,[l.error?((0,o.wg)(),(0,o.j4)(n,{key:0,icon:e.api.admin_static_url+"/images/foxes/fox-sleeping.svg",label:l.errorLabel,description:l.errorDescription},null,8,["icon","label","description"])):l.loading?((0,o.wg)(),(0,o.j4)(d,{key:1,message:l.loadingMessage},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(p,{to:"/ssa/appointments",icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.viewAll)+" ",1),Nr])),_:1}),(0,o.Wm)(g,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("h2",$r,(0,r.zw)(e.translations.appointments.appointmentDetails),1),(0,o.Wm)(m,{"md-direction":"bottom left",class:"appointmentDetailEditMenu myAnchor"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{onClick:t[0]||(t[0]=e=>l.openDotMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"more_vert"})])),_:1}),(0,o.Wm)(h,{modelValue:l.openDotMenu,"onUpdate:modelValue":t[1]||(t[1]=e=>l.openDotMenu=e)},{default:(0,o.w5)((()=>[s.cancelable?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[s.isReservedStatus?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"confirmAbandon",onClick:s.confirmAbandon},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(this.translations.general.abandon),1)])),_:1},8,["onClick"])):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"confirmCancel",onClick:s.confirmCancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(this.translations.general.cancel),1)])),_:1},8,["onClick"])),(0,o.Wm)(c,{class:"editAsCustomer",onClick:s.editAppointment},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.editAsCustomer),1)])),_:1},8,["onClick"])],64)):(0,o.kq)("",!0),(0,o.Wm)(c,{class:"confirmDelete",onClick:s.confirmDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.delete),1)])),_:1},8,["onClick"])])),_:1},8,["modelValue"])])),_:1})])),_:1}),(0,o._)("div",Hr,[(0,o._)("h3",Zr,[e.wpUserGravatar(l.appointment.customer_id)?((0,o.wg)(),(0,o.j4)(y,{key:0},{default:(0,o.w5)((()=>[(0,o._)("img",{"data-tooltip-id":"tooltip_customer_id",src:e.wpUserGravatar(l.appointment.customer_id),alt:e.wpUserName(l.appointment.customer_id)},null,8,Yr),(0,o.Wm)(_,{id:"tooltip_customer_id"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.wpUserName(l.appointment.customer_id)),1)])),_:1})])),_:1})):((0,o.wg)(),(0,o.j4)(f,{key:1,class:"md-primary md-size-2x",icon:"face",theme:l.appointment.type_label},null,8,["theme"])),"pending_form"==l.appointment.status?((0,o.wg)(),(0,o.iD)("span",Kr,(0,r.zw)(e.translations.appointments.statuses.pending_form),1)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(s.appointmentName),1)]),(0,o._)("p",Jr,[(0,o.Uk)((0,r.zw)(l.appointment.type_title)+" ",1),e.appointmentStaffNames(l.appointment)?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.appointment.with)+" "+(0,r.zw)(e.appointmentStaffNames(l.appointment)),1)],64)):(0,o.kq)("",!0),s.displayEditstaff?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("button",{class:"link edit-staff-link",onClick:t[2]||(t[2]=(...e)=>s.editStaff&&s.editStaff(...e))},(0,r.zw)(e.translations.appointments.editStaffDialog.editTeam),1),(0,o.Wm)(w,(0,o.dG)({appointment:l.appointment,triggerElement:l.triggerElement},{ref:"editStaffDialog"}),null,16)],64)):(0,o.kq)("",!0)]),(0,o._)("p",Xr,(0,r.zw)(l.moment(l.appointment.start_date,e.timestampFormat).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment))+" "+(0,r.zw)(l.moment.utc(l.appointment.start_date).tz(e.settings.global.timezone_string).format("z"))+" ("+(0,r.zw)(e.displayDuration(l.appointment.duration))+") ",1),l.appointment.web_meeting_url?((0,o.wg)(),(0,o.iD)("p",Qr,[(0,o.Wm)(f,{icon:"video_call",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("strong",null,(0,r.zw)(e.translations.appointments.webMeetings.label),1),(0,o._)("a",{class:"link text-break-all",href:l.appointment.web_meeting_url,target:"_blank"},(0,r.zw)(l.appointment.web_meeting_url),9,el)])):(0,o.kq)("",!0),s.isBasic?((0,o.wg)(),(0,o.iD)("ul",tl,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.basicCustomerInformation,((t,i,a)=>((0,o.wg)(),(0,o.iD)("li",{key:a},["Email"===i?((0,o.wg)(),(0,o.j4)(f,{key:0,icon:"email",theme:l.appointment.type_label},null,8,["theme"])):"Name"===i?((0,o.wg)(),(0,o.j4)(f,{key:1,icon:"face",theme:l.appointment.type_label},null,8,["theme"])):"Phone"===i?((0,o.wg)(),(0,o.j4)(f,{key:2,icon:"phone",theme:l.appointment.type_label},null,8,["theme"])):"Address"===i?((0,o.wg)(),(0,o.j4)(f,{key:3,icon:"place",theme:l.appointment.type_label},null,8,["theme"])):"City"===i&&e.isAddressDisplayed(s.basicCustomerInformation,"City")?((0,o.wg)(),(0,o.j4)(f,{key:4,icon:"place",theme:l.appointment.type_label},null,8,["theme"])):"State"===i&&e.isAddressDisplayed(s.basicCustomerInformation,"State")?((0,o.wg)(),(0,o.j4)(f,{key:5,icon:"place",theme:l.appointment.type_label},null,8,["theme"])):"Zip"===i&&e.isAddressDisplayed(s.basicCustomerInformation,"Zip")?((0,o.wg)(),(0,o.j4)(f,{key:6,icon:"place",theme:l.appointment.type_label},null,8,["theme"])):"Notes"===i?((0,o.wg)(),(0,o.j4)(f,{key:7,icon:"assignment",theme:l.appointment.type_label},null,8,["theme"])):(0,o.kq)("",!0),(0,o._)("span",null,(0,r.zw)(t),1)])))),128))])):((0,o.wg)(),(0,o.iD)("ul",il,["pending_payment"===l.appointment.status?((0,o.wg)(),(0,o.iD)("li",al,[(0,o.Wm)(f,{icon:"information",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("div",ol,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.apptReserved),1)])])):(0,o.kq)("",!0),"pending_form"===l.appointment.status?((0,o.wg)(),(0,o.iD)("li",rl,[(0,o.Wm)(f,{icon:"information",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("div",ll,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.noAvailableInformation),1),-1!=l.expiresIn?((0,o.wg)(),(0,o.iD)("span",sl,[(0,o.Uk)((0,r.zw)(e.translations.appointments.abandonedIn)+" "+(0,r.zw)(l.expiresIn)+" ",1),(0,o._)("a",{href:s.appointmentStatusGuideUrl,target:"_blank",class:"link"},(0,r.zw)(e.translations.appointments.learnMorePending),9,nl)])):((0,o.wg)(),(0,o.iD)("span",dl,(0,r.zw)(e.translations.appointments.abandonedOn)+" "+(0,r.zw)(l.moment.utc(l.appointment.expiration_date).tz(e.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment)),1))])])):(0,o.kq)("",!0),"pending_payment"===l.appointment.status?((0,o.wg)(),(0,o.iD)("li",pl,[(0,o.Wm)(f,{icon:"payment",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("div",fl,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.waiting)+" "+(0,r.zw)(l.appointment.payment_method),1),-1!=l.expiresIn?((0,o.wg)(),(0,o.iD)("span",ul,[(0,o.Uk)((0,r.zw)(e.translations.appointments.abandonedIn)+" "+(0,r.zw)(l.expiresIn)+" ",1),(0,o._)("a",{href:s.appointmentStatusGuideUrl,target:"_blank",class:"link"},(0,r.zw)(e.translations.appointments.learnMorePending),9,cl)])):((0,o.wg)(),(0,o.iD)("span",hl,(0,r.zw)(e.translations.appointments.abandonedOn)+" "+(0,r.zw)(l.moment.utc(l.appointment.expiration_date).tz(e.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment)),1))])])):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.paidCustomerInformation,((e,t,i)=>((0,o.wg)(),(0,o.iD)("li",{key:i},[(0,o.Wm)(f,{icon:s.icons[t]?s.icons[t]:"bookmark",theme:l.appointment.type_label},null,8,["icon","theme"]),(0,o._)("span",null,[(0,o._)("span",null,(0,r.zw)(t),1),"string"===typeof e?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:e},null,8,ml)):((0,o.wg)(),(0,o.iD)("span",gl,(0,r.zw)(e.join(", ")),1))])])))),128)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.displayResources,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id},["identifiable"==t.resourceType?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(f,{icon:"workspaces",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("div",_l,[(0,o._)("span",null,(0,r.zw)(t.resourceGroup.title),1),(0,o._)("span",null,(0,r.zw)(t.resourceTitle),1)])],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(f,{icon:"inventory",theme:l.appointment.type_label},null,8,["theme"]),(0,o._)("div",yl,[(0,o._)("span",null,(0,r.zw)(t.resourceGroup.title),1),(0,o._)("span",null,(0,r.zw)(e.translations.resourceGroups.oneItem),1)])],64))])))),128))])),l.loadingMeta?((0,o.wg)(),(0,o.j4)(d,{key:3,size:"body",message:e.translations.appointments.metaLoading},null,8,["message"])):!l.loading&&l.appointment&&l.appointment.meta?((0,o.wg)(),(0,o.j4)(x,{key:4,"appointment-id":i.id},null,8,["appointment-id"])):(0,o.kq)("",!0),(0,o._)("div",wl,[(0,o._)("dl",xl,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.status),1),(0,o._)("dd",null,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.statuses[l.appointment.status]),1),"no_show"===l.appointment.meta?.status?((0,o.wg)(),(0,o.iD)("span",Cl,[(0,o._)("span",null,(0,r.zw)(e.translations.appointments.statuses[l.appointment.meta?.status]),1),(0,o._)("button",{ref:"removeNoShowStatusButton",onClick:t[3]||(t[3]=(...e)=>s.confirmRemoveNoShowStatus&&s.confirmRemoveNoShowStatus(...e))},[(0,o.Wm)(f,{style:{"pointer-events":"none"},theme:"gray",icon:"close"}),(0,o._)("span",vl,(0,r.zw)(e.translations.appointments.removeNoShowStatusConfirm),1)],512)])):(0,o.kq)("",!0),s.statusEditable?((0,o.wg)(),(0,o.iD)("button",{key:1,class:"link",onClick:t[4]||(t[4]=(...e)=>s.openChangeStatusDialog&&s.openChangeStatusDialog(...e)),"aria-haspopup":"dialog"},(0,r.zw)(e.translations.actions.edit),1)):(0,o.kq)("",!0),"0"!==l.appointment.rescheduled_to_appointment_id?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Uk)(" - "+(0,r.zw)(e.translations.appointments.rescheduled),1)],64)):(0,o.kq)("",!0),"0"!==l.appointment.rescheduled_from_appointment_id&&s.rescheduledFromAppointment?((0,o.wg)(),(0,o.iD)("div",bl,[(0,o._)("strong",null,(0,r.zw)(e.translations.appointments.viewOriginal)+":",1),(0,o.Uk)(),(0,o.Wm)(C,{to:"/ssa/appointment/"+l.appointment.rescheduled_from_appointment_id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.rescheduledFromDatetime),1)])),_:1},8,["to"])])):(0,o.kq)("",!0),"0"!==l.appointment.rescheduled_to_appointment_id&&s.rescheduledToAppointment?((0,o.wg)(),(0,o.iD)("div",Bl,[(0,o._)("strong",null,(0,r.zw)(e.translations.appointments.viewRescheduled)+":",1),(0,o.Uk)(),(0,o.Wm)(C,{to:"/ssa/appointment/"+l.appointment.rescheduled_to_appointment_id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.rescheduledToDatetime),1)])),_:1},8,["to"])])):(0,o.kq)("",!0)])]),s.isPhoneAppointment&&s.isSmsEnabled?((0,o.wg)(),(0,o.iD)("dl",Sl,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.sms),1),s.allowSms?((0,o.wg)(),(0,o.iD)("dd",kl,(0,r.zw)(e.translations.appointments.smsStatuses.optedin),1)):(0,o.kq)("",!0),s.allowSms?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("dd",Al,(0,r.zw)(e.translations.appointments.smsStatuses.optedout),1))])):(0,o.kq)("",!0),s.rescheduledFromStartDates?((0,o.wg)(),(0,o.iD)("dl",Ml,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.reschedulingHistory),1),(0,o._)("dd",null,[(0,o._)("div",Dl,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.rescheduledFromStartDates,((e,t)=>((0,o.wg)(),(0,o.iD)("p",{key:t,class:"outdated"},(0,r.zw)(e),1)))),128))])])])):(0,o.kq)("",!0),(0,o._)("dl",Tl,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.created),1),(0,o._)("dd",null,(0,r.zw)(l.moment.utc(l.appointment.date_created).tz(e.settings.global.timezone_string).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment+" z")),1)]),e.wpUserName(l.appointment.customer_id)?((0,o.wg)(),(0,o.iD)("dl",Ol,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.customer),1),(0,o._)("dd",null,[(0,o._)("a",{href:e.wpUserLink(l.appointment.customer_id),class:"link"},(0,r.zw)(e.wpUserName(l.appointment.customer_id)),9,Gl)])])):(0,o.kq)("",!0),e.wpUserName(l.appointment.author_id)?((0,o.wg)(),(0,o.iD)("dl",El,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.author),1),(0,o._)("dd",null,[(0,o._)("a",{href:e.wpUserLink(l.appointment.author_id),class:"link"},(0,r.zw)(e.wpUserName(l.appointment.author_id)),9,Ul)])])):(0,o.kq)("",!0),(0,o._)("dl",Fl,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.lastMod),1),(0,o._)("dd",null,(0,r.zw)(l.moment.utc(l.appointment.date_modified,e.timestampFormat).tz(e.settings.global.timezone_string).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment+" z")),1)]),s.cancelable?((0,o.wg)(),(0,o.iD)("dl",Il,[(0,o._)("dt",null,(0,r.zw)(e.translations.appointments.cancelRescheduleLink),1),(0,o._)("dd",null,[(0,o._)("a",{href:l.appointment.public_edit_url,class:"link",target:"_blank"},(0,r.zw)(e.translations.appointments.cancelRescheduleLinkOpen),9,zl)])])):(0,o.kq)("",!0)]),l.loadingPayments?((0,o.wg)(),(0,o.j4)(d,{key:5,message:e.translations.appointments.paymentLoading},null,8,["message"])):l.appointment.payments&&l.appointment.payments.length>0?((0,o.wg)(),(0,o.iD)("div",Pl,[(0,o._)("h2",Vl,(0,r.zw)(e.translations.appointments.paymentInformation),1),(0,o._)("div",Wl,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.appointment.payments,(e=>((0,o.wg)(),(0,o.j4)(v,{payment:e,key:e.id},null,8,["payment"])))),128))])])):(0,o.kq)("",!0),s.displayHistory?((0,o.wg)(),(0,o.iD)("div",Rl,[(0,o.Wm)(S,null,{default:(0,o.w5)((()=>[(0,o.Wm)(B,{label:e.translations.wizard.appointment.revisions,message:e.translations.wizard.appointment.revisionsMessage,section:"revisions",index:"0",onUpdateActive:s.updateSection,open:l.section},{default:(0,o.w5)((()=>[(0,o.Wm)(b,{id:l.appointment.id,theme:l.appointment.type_label,type:"appointment"},null,8,["id","theme"])])),_:1},8,["label","message","onUpdateActive","open"])])),_:1})])):(0,o.kq)("",!0)])],64)),(0,o.Wm)(k,(0,o.dG)({appointment:l.appointment,availableCustomerInformation:s.availableCustomerInformation},{ref:"cancelDialog"}),null,16),(0,o.Wm)(A,(0,o.dG)({appointment:l.appointment,availableCustomerInformation:s.availableCustomerInformation},{ref:"abandonDialog"}),null,16),l.displayStatusDialog?((0,o.wg)(),(0,o.j4)(M,(0,o.dG)({key:3},{appointment:l.appointment,triggerElement:l.triggerElement},{ref:"changeStatusDialog",onCancelAppointment:s.confirmCancel,onClose:t[5]||(t[5]=e=>l.displayStatusDialog=!1)}),null,16,["onCancelAppointment"])):(0,o.kq)("",!0),(0,o.Wm)(U,{id:"ssa-delete-appt-dialog",class:"ssa-iframe--delete-dialog",ref:"confirmDelete"},{default:(0,o.w5)((()=>[(0,o.Wm)(D,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.deleteConfirm),1)])),_:1}),(0,o.Wm)(O,null,{default:(0,o.w5)((()=>[(0,o.Wm)(T,{theme:"amber",icon:"warning"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.deleteConfirmExplanation)+" ",1),s.cancelable?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.appointments.deleteConfirmExplanationCancelable),1)],64)):(0,o.kq)("",!0)])),_:1}),l.appointment?((0,o.wg)(),(0,o.iD)("ul",Ll,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.availableCustomerInformation,((t,i)=>((0,o.wg)(),(0,o.iD)("li",{key:i},[(0,o._)("div",jl,[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.customer_information[i]?e.translations.appointmentTypes.customer_information[i]:i),1),"string"===typeof t?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:t},null,8,ql)):((0,o.wg)(),(0,o.iD)("span",Nl,(0,r.zw)(t.join(", ")),1))])])))),128))])):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(E,null,{default:(0,o.w5)((()=>[(0,o.Wm)(G,{action:"dismiss",onClick:s.cancelDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(G,{action:"accept","is-default":"",onClick:s.deleteAppt},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(U,{ref:"editDialog",class:"ssa-iframe-dialog","onMdcdialog:closed":s.refreshAppointment},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{class:"close",size:"smaller",mode:"raised",onClick:t[6]||(t[6]=t=>e.$refs.editDialog.close())},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"close"})])),_:1}),(0,o.Wm)(O,null,{default:(0,o.w5)((()=>[(0,o._)("div",$l,[(0,o._)("iframe",{src:l.editEmbedSrc,loading:"eager"},null,8,Hl)])])),_:1})])),_:1},8,["onMdcdialog:closed"]),(0,o.Wm)(U,{id:"ssa-remove-no-show-status-dialog",class:"ssa-iframe",ref:"removeNoShowStatusDialog","onMdcdialog:closing":s.onRemoveNoShowStatusDialogClose},{default:(0,o.w5)((()=>[(0,o.Wm)(D,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.removeNoShowStatusConfirm),1)])),_:1}),(0,o.Wm)(E,null,{default:(0,o.w5)((()=>[(0,o.Wm)(G,{action:"dismiss",onClick:s.cancelRemoveNoShowStatus},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelRemoveNoShowStatusCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(G,{mode:"raised",action:"accept",onClick:s.removeNoShowStatus},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelRemoveNoShowStatusOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},8,["onMdcdialog:closing"])])}const Yl={class:"payment-row"},Kl={class:"currency"},Jl={class:"status"},Xl={class:"payment-row"},Ql={class:"gateway"},es={class:"gateway-name"},ts=["href"],is={class:"mode"},as={class:"payment-row"},os={class:"date"},rs={key:0,class:"payment-row"},ls={key:1,class:"payment-row"},ss={class:"cc"},ns={class:"cc-number"};function ds(e,t,i,a,l,s){const n=(0,o.up)("foxy-chip-single");return(0,o.wg)(),(0,o.iD)("div",{class:"payment-list-item",key:i.payment.id},[(0,o._)("div",Yl,[(0,o._)("div",{class:(0,r.C_)(["amount",i.payment.status])},[(0,o.Uk)((0,r.zw)(s.formattedPrice)+" ",1),(0,o._)("span",Kl,(0,r.zw)(i.payment.currency),1)],2),(0,o._)("div",Jl,[(0,o.Wm)(n,{theme:s.statusTheme},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.payments.statuses[i.payment.status]),1)])),_:1},8,["theme"])])]),(0,o._)("div",Xl,[(0,o._)("div",Ql,[(0,o._)("span",es,(0,r.zw)(e.displayGateway(i.payment.gateway)),1),"stripe"===i.payment.gateway?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)(" - "),(0,o._)("a",{href:l.stripePaymentLink+s.gatewayTransactionId,class:"gateway-id",target:"_blank"},(0,r.zw)(s.gatewayTransactionId),9,ts)],64)):(0,o.kq)("",!0)]),(0,o._)("div",is,[(0,o._)("span",{class:(0,r.C_)(["mode-tag",i.payment.payment_mode])},(0,r.zw)(e.translations.appointments.payments.modes[i.payment.payment_mode]),3)])]),(0,o._)("div",as,[(0,o._)("div",os,["stripe"===i.payment.gateway?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(s.stripePaymentCreated),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(l.moment.utc(i.payment.date_created).tz(e.settings.global.timezone_string).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment+" z")),1)],64))])]),i.payment.notes?((0,o.wg)(),(0,o.iD)("div",rs,[(0,o._)("p",null,(0,r.zw)(i.payment.notes),1)])):(0,o.kq)("",!0),s.displayStripeCardInfo?((0,o.wg)(),(0,o.iD)("div",ls,[(0,o._)("div",ss,[(0,o.Uk)((0,r.zw)(s.stripeCardBrand)+" ",1),(0,o._)("span",ns," • • • • "+(0,r.zw)(s.stripeCardLast4),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.appointments.payments.expires)+" "+(0,r.zw)(s.stripeCardExpMonth)+"/"+(0,r.zw)(s.stripeCardExpYear),1)])])):(0,o.kq)("",!0)])}var ps={name:"PaymentItem",props:{payment:{type:Object,default(){return{}}}},data(){return{moment:fe(),stripePaymentLink:W}},computed:{statusTheme(){let e="";switch(this.payment.status){case"succeeded":e="green";break;case"pending":e="amber";break;case"failed":e="orange";break}return e},formattedPrice(){let e=this.payment.amount_paid;return"succeeded"!==this.payment.status&&(e=this.payment.amount_attempted),this.displayPrice(e,this.payment.currency)},charge(){return this.payment.gateway_response.charges?.data[0]||this.payment.gateway_response.latest_charge},errorCode(){return this.payment.gateway_payload?.error?.code},paymentMethod(){return this.charge?this.charge.payment_method_details.type:null},stripeCardBrand(){return this.payment?.gateway_response?.error?.payment_method?.card?.brand?this.payment.gateway_response.error.payment_method.card.brand:this.charge?.payment_method_details?.card?.brand?this.charge.payment_method_details.card.brand:null},stripeCardLast4(){return this.payment?.gateway_response?.error?.payment_method?.card?.last4?this.payment.gateway_response.error.payment_method.card.last4:this.charge?.payment_method_details?.card?.last4?this.charge.payment_method_details.card.last4:null},stripeCardExpMonth(){return this.payment?.gateway_response?.error?.payment_method?.card?.exp_month?this.payment.gateway_response.error.payment_method.card.exp_month:this.charge?.payment_method_details?.card?.exp_month?this.charge.payment_method_details.card.exp_month:null},stripeCardExpYear(){return this.payment?.gateway_response?.error?.payment_method?.card?.exp_year?this.payment.gateway_response.error.payment_method.card.exp_year:this.charge?.payment_method_details?.card?.exp_year?this.charge.payment_method_details.card.exp_year:null},gateway(){return this.payment?.gateway||""},displayStripeCardInfo(){return"stripe"===this.gateway&&("card"===this.paymentMethod||"card"===this.payment?.gateway_response?.error?.payment_method?.type)},card(){return this.charge&&"card"===this.paymentMethod?this.charge.payment_method_details.card:null},gatewayTransactionId(){return this.payment?.gateway_transaction_id?this.payment.gateway_transaction_id:this.payment?.gateway_payload?.error?.payment_intent?.id?this.payment.gateway_payload.error.payment_intent.id:""},stripePaymentCreated(){return this.payment?.gateway_payload?.error?.payment_intent?.created?this.moment.unix(this.payment.gateway_payload.error.payment_intent.created).tz(this.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment+" z"):this.payment?.gateway_payload?.created?this.moment.unix(this.payment.gateway_payload.created).tz(this.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment+" z"):""},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.Se)("payments",["displayGateway","displayPrice"])}};const fs=(0,he.Z)(ps,[["render",ds]]);var us=fs;const cs={key:0,class:"appointment-details"},hs={key:0},ms=["href"],gs={key:1},_s=["href"],ys={key:2};function ws(e,t,i,a,l,s){return s.showMeta?((0,o.wg)(),(0,o.iD)("div",cs,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.whitelistedMetaWithLabelValues,(t=>((0,o.wg)(),(0,o.iD)("dl",{key:t.key,class:"appointment-detail"},[(0,o._)("dt",null,(0,r.zw)(t.name),1),"entry"===t.type?((0,o.wg)(),(0,o.iD)("dd",hs,[(0,o._)("a",{class:"link",href:t.value},(0,r.zw)(e.translations.appointments.metaFields.viewEntry),9,ms)])):(0,o.kq)("",!0),"url"===t.type?((0,o.wg)(),(0,o.iD)("dd",gs,[(0,o._)("a",{class:"link",href:t.value},(0,r.zw)(t.value),9,_s)])):(0,o.kq)("",!0),"string"===t.type?((0,o.wg)(),(0,o.iD)("dd",ys,(0,r.zw)(t.value),1)):(0,o.kq)("",!0)])))),128))])):(0,o.kq)("",!0)}var xs={name:"AppointmentMeta",props:{appointmentId:{type:[Number,String],required:!0}},data(){return{meta_whitelist:["formidable_entry_admin_url","gravity_entry_admin_url","booking_url","booking_post_id","booking_title"]}},computed:{appointment(){return this.appointments.find((e=>e.id.toString()===this.appointmentId.toString()))},whitelistedMeta(){return Object.fromEntries(Object.entries(this.appointment.meta).filter((([e])=>this.meta_whitelist.includes(e))))},whitelistedMetaWithLabelValues(){return Object.keys(this.whitelistedMeta).map((e=>{const t=this.whitelistedMeta[e];let i={key:e,type:"string",name:this.translations.appointments.metaFields[e],value:t};return["formidable_entry_admin_url","gravity_entry_admin_url"].includes(e)&&(i.type="entry"),["booking_url"].includes(e)&&(i.type="url"),i}))},showMeta(){return this.appointment&&this.whitelistedMeta&&!wa().isEmpty(this.whitelistedMeta)},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointments",["appointments"])}};const Cs=(0,he.Z)(xs,[["render",ws]]);var vs=Cs;const bs={key:0,style:{"min-height":"50px"}},Bs={key:1},Ss={key:0,class:"content"},ks={class:"select-field-wrapper"},As={class:"label"},Ms={style:{width:"200px"}},Ds={key:0,class:"description",id:"descTextId"},Ts={key:1},Os={key:0};function Gs(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-title"),d=(0,o.up)("loading"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-select"),u=(0,o.up)("foxy-notification"),c=(0,o.up)("foxy-dialog-content"),h=(0,o.up)("foxy-dialog-button"),m=(0,o.up)("foxy-dialog-footer"),g=(0,o.up)("foxy-dialog");return i.appointment?((0,o.wg)(),(0,o.j4)(g,{key:0,ref:"changeStatus",id:"apptChangeStatus","onMdcdialog:opening":s.onDialogOpen,"onMdcdialog:closed":s.onDialogClose},{default:(0,o.w5)((()=>[(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o._)("div",{tabindex:"-1",ref:"dialogTitle"},(0,r.zw)(e.translations.appointments.changeStatusTitle),513)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[l.loading?((0,o.wg)(),(0,o.iD)("div",bs,[(0,o.Wm)(d,{size:"body",message:e.translations.appointments.loadingSettings},null,8,["message"])])):((0,o.wg)(),(0,o.iD)("div",Bs,[l.editable?((0,o.wg)(),(0,o.iD)("div",Ss,[(0,o._)("div",ks,[(0,o._)("div",As,(0,r.zw)(e.translations.appointments.markAs)+": ",1),(0,o._)("div",Ms,[(0,o.Wm)(f,{label:e.translations.appointments.status,name:"statuses",id:"statuses",modelValue:l.selectedValue,"onUpdate:modelValue":t[0]||(t[0]=e=>l.selectedValue=e),"aria-describedby":s.descriptiveTextId},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.availableOptions,(t=>((0,o.wg)(),(0,o.j4)(p,{"data-value":t,key:t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.statuses[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","aria-describedby"])]),s.descriptiveText?((0,o.wg)(),(0,o.iD)("p",Ds,(0,r.zw)(s.descriptiveText),1)):(0,o.kq)("",!0)]),s.warningMessage?((0,o.wg)(),(0,o.j4)(u,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.warningMessage),1)])),_:1})):(0,o.kq)("",!0)])):((0,o.wg)(),(0,o.iD)("div",Ts,[l.errorMessages.length?((0,o.wg)(),(0,o.iD)("div",Os,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.errorMessages,((e,t)=>((0,o.wg)(),(0,o.j4)(u,{key:e+t,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e),1)])),_:2},1024)))),128))])):(0,o.kq)("",!0)]))]))])),_:1}),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{action:"dismiss",onClick:s.closeDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(l.editable?e.translations.appointments.keepStatus:e.translations.appointments.close),1)])),_:1},8,["onClick"]),l.editable?((0,o.wg)(),(0,o.j4)(h,{key:0,disabled:l.loading,mode:"raised",action:"accept",onClick:s.confirmStatusChange},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.confirmStatusChange),1)])),_:1},8,["disabled","onClick"])):(0,o.kq)("",!0)])),_:1})])),_:1},8,["onMdcdialog:opening","onMdcdialog:closed"])):(0,o.kq)("",!0)}const Es=(e="")=>{let t=String(e);return t=t.replace(/&/gi,"&"),t=t.replace(/</gi,"<"),t=t.replace(/>/gi,">"),t=t.replace(//gi,"\n"),t=t.replace(/
/gi,"\n"),t=t.replace(/<\/div>/gi,""),t=t.replace(/

/gi,"\n"),t=t.replace(/<\/p>/gi,""),t=t.replace(/\n{3,}/g,"\n\n"),t=t.replace(/<\/?[^>]+(>|$)/g,""),t=t.split("\n").map(((e="")=>e.trim())).join("\n"),t=t.replace(/[ ]+/g," "),t=t.trim(),t},Us=(e="")=>{let t=Es(e).replace(/\n/g,"
");return t.replace(/
$/g,"")},Fs=e=>{e.preventDefault();let t="";const i=!(!e.clipboardData||"object"!==typeof e.clipboardData||"function"!==typeof e.clipboardData.getData);i&&(t=e.clipboardData.getData("text/plain"));const a=document.createElement("textarea");a.innerHTML=t,t=a.innerText,t=Es(t),"function"===typeof document.execCommand&&document.execCommand("insertText",!1,t)},Is=(e,t=0)=>{let i=t;const a=window.getSelection();if(a?.rangeCount>0){const t=a.getRangeAt(0),o=t.cloneRange();o.selectNodeContents(e),o.setEnd(t.endContainer,t.endOffset);const r=o.toString().length;!isNaN(r)&&r>0&&(i=r)}return i},zs=(e,t)=>{for(var i of e.childNodes)if(3===i.nodeType){if(i.length>=t){var a=document.createRange(),o=window.getSelection();return a.setStart(i,t),a.collapse(!0),o.removeAllRanges(),o.addRange(a),-1}t-=i.length}else if(t=zs(i,t),-1===t)return-1;return t},Ps=e=>{let t=typeof e;switch(t){case"string":{let t=parseInt(e,10);return isNaN(t)?"true"===e:Boolean(t)}case"number":return Boolean(e);case"boolean":return e;default:return!!e}};var Vs={name:"AppointmentEditStatusDialog",components:{Loading:ge},props:["appointment","triggerElement"],emits:["close","cancelAppointment"],data(){return{editable:!0,errorMessages:[],selectedValue:null,loading:!1,isOpen:!1}},mounted(){!this.selectedValue&&this.availableOptions.length&&(this.selectedValue=this.availableOptions[0])},computed:{currentStatus(){return this.appointment.status},currentStatusMeta(){return this.appointment.meta?.status??""},availableOptions(){let e=[];switch(this.currentStatus){case"booked":e=this.isInFuture(this.appointment)?["canceled"]:["no_show"];break;case"canceled":e=["booked"];break;case"pending_payment":e=["booked","abandoned"];break;case"pending_form":e=["abandoned"];break;case"abandoned":e=["booked"];break;default:e=["booked","canceled","abandoned"]}return e},shouldCheckAppointmentAvailability(){return["canceled","abandoned"].includes(this.currentStatus)},shouldCheckStaffAvailability(){return!!this.shouldCheckAppointmentAvailability&&!wa().isEmpty(this.appointment.staff_ids)},warningMessage(){return"pending_payment"===this.currentStatus&&this.translations.appointments.bypassPaymentWarning},descriptiveText(){let e;switch(this.selectedValue){case"booked":e=this.optionsDescriptiveTexts.booked;break;case"no_show":e=this.optionsDescriptiveTexts.noShow;break;case"canceled":e=this.optionsDescriptiveTexts.canceled;break;case"abandoned":e=this.optionsDescriptiveTexts.abandoned;break;default:e=null}return e},optionsDescriptiveTexts(){return{booked:this.translations.appointments.changeToBooked,canceled:this.translations.appointments.changeToCanceled,abandoned:this.translations.appointments.changeToAbandoned,noShow:this.translations.appointments.changeToNoShow}},descriptiveTextId(){return this.warningMessage?"descTextId":null},...(0,m.rn)("translations",["translations"]),...(0,m.Se)("staff",["getStaffNamesFromIds"]),...(0,m.Se)("appointments",["isInFuture"])},methods:{openDialog(){this.errorMessages=[],this.shouldCheckStaffAvailability&&(this.loading=!0,this.checkStaffAvailability({id:this.appointment.id,staffIds:this.appointment.staff_ids}).then((e=>{e&&e.availability&&(this.isStaffAvailable(e.availability)||(this.editable=!1,this.displayAvailabilityError(e.availability))),this.loading=!1}))),this.shouldCheckAppointmentAvailability&&(this.loading=!0,this.checkAppointmentAvailability(this.appointment.id).then((e=>{"unavailable"===e.data.result&&(this.editable=!1,this.errorMessages.push(e.data.message)),this.loading=!1}))),this.$nextTick((()=>{this.$refs["changeStatus"].open()}))},closeDialog(){this.$refs["changeStatus"].close(),this.$emit("close")},confirmStatusChange(){if(this.selectedValue){if("canceled"===this.selectedValue)return this.$emit("cancelAppointment"),void this.closeDialog();this.shouldCheckAppointmentAvailability?this.checkAppointmentAvailability(this.appointment.id).then((e=>{"unavailable"===e.data.result?(this.editable=!1,this.errorMessages.push(e.data.message)):this.saveNewStatus()})):this.saveNewStatus(),this.closeDialog()}},saveNewStatus(){if(this.selectedValue&&this.selectedValue!==this.currentStatus&&"no_show"!==this.currentStatusMeta&&this.editable){var e=this.appointment.id,t={status:"updating"};if(this.setAppointmentData({id:e,appt:t}),"no_show"!==this.selectedValue){var i={id:e,status:this.selectedValue};this.saveAppointment(i).then((()=>{})).catch((e=>{console.log(e)}))}if("no_show"===this.selectedValue){var a={status:"no_show"};this.saveAppointmentMeta({id:e,meta:a}).then((()=>{this.setAppointmentData({id:e,appt:{status:this.appointment.status}})})).catch((e=>{console.log(e)}))}}},isStaffAvailable(e){if(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&!1===e[t])return!1;return!0}},displayAvailabilityError(e){if(wa().isEmpty(e))return;const t=Object.keys(e).filter((t=>!Ps(e[t])));if(wa().isEmpty(t))return;let i=this.getStaffNamesFromIds(t);if(wa().isEmpty(i))return;let a=this.translations.errors.staffUnavailable+": "+i;this.errorMessages.push(a)},onDialogClose(){this.isOpen=!1,this.triggerElement&&this.triggerElement.focus()},onDialogOpen(){this.isOpen=!0,setTimeout((()=>{this.$refs.dialogTitle.focus()}),100)},...(0,m.nv)("appointments",["saveAppointment","saveAppointmentMeta","checkAppointmentAvailability","checkStaffAvailability"]),...(0,m.OI)("appointments",["setAppointmentData"])}};const Ws=(0,he.Z)(Vs,[["render",Gs],["__scopeId","data-v-6c90c354"]]);var Rs=Ws;const Ls={key:0,style:{"min-height":"150px"}},js={key:1,class:"staff-items-wrapper"},qs={key:0},Ns={key:1},$s=["label"],Hs=["value"],Zs={key:0},Ys={key:1},Ks={key:2};function Js(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-title"),d=(0,o.up)("loading"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-select2"),u=(0,o.up)("foxy-switch"),c=(0,o.up)("foxy-dialog-content"),h=(0,o.up)("foxy-dialog-button"),m=(0,o.up)("foxy-dialog-footer"),g=(0,o.up)("foxy-dialog");return i.appointment?((0,o.wg)(),(0,o.j4)(g,{key:0,ref:"editStaffDialog","onMdcdialog:opening":s.onDialogOpen,"onMdcdialog:closed":s.onDialogClose},{default:(0,o.w5)((()=>[(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o._)("div",{tabindex:"-1",ref:"dialogTitle"},(0,r.zw)(e.translations.appointments.editStaffDialog.editForAppointment),513)])),_:1}),(0,o.Wm)(c,{class:"popup-content"},{default:(0,o.w5)((()=>[l.loading?((0,o.wg)(),(0,o.iD)("div",Ls,[(0,o.Wm)(d,{size:"title",message:e.translations.appointments.editStaffDialog.checkingAvailability},null,8,["message"])])):((0,o.wg)(),(0,o.iD)("div",js,[s.isNoneSelected?((0,o.wg)(),(0,o.iD)("div",qs,[(0,o.Wm)(p,{icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.editStaffDialog.noMembersAssigned),1)])),_:1})])):(0,o.kq)("",!0),s.displayUnavailableWarning?((0,o.wg)(),(0,o.iD)("div",Ns,[(0,o.Wm)(p,{icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.editStaffDialog.selectUnavailableWarning),1)])),_:1})])):(0,o.kq)("",!0),l.displaySelect&&!l.loading?((0,o.wg)(),(0,o.j4)(f,{key:2,style:{width:"100%"},label:e.translations.appointments.editStaffDialog.assignTeamMember,theme:s.theme,multiple:!0,name:"staffSelect",id:"staffSelect",modelValue:l.staffSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>l.staffSelected=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.optionGroups,((t,i)=>((0,o.wg)(),(0,o.iD)("optgroup",{label:t.label,key:t.label+i},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(t.options,(t=>((0,o.wg)(),(0,o.iD)("option",{value:t.value,key:t.value},[(0,o.Uk)((0,r.zw)(t.label)+" ",1),t.belongsToAnotherType?((0,o.wg)(),(0,o.iD)("span",Zs," ("+(0,r.zw)(e.translations.appointments.editStaffDialog.notAssignedWithThisType)+") ",1)):(0,o.kq)("",!0),t.inactive?((0,o.wg)(),(0,o.iD)("span",Ys," ("+(0,r.zw)(e.translations.appointments.editStaffDialog.inactive)+") ",1)):(0,o.kq)("",!0),t.unavailable?((0,o.wg)(),(0,o.iD)("span",Ks," ("+(0,r.zw)(e.translations.appointments.editStaffDialog.unavailable)+") ",1)):(0,o.kq)("",!0)],8,Hs)))),128))],8,$s)))),128))])),_:1},8,["label","theme","modelValue"])):(0,o.kq)("",!0),(0,o._)("div",null,[(0,o.Wm)(u,{modelValue:l.displayAll,"onUpdate:modelValue":t[1]||(t[1]=e=>l.displayAll=e),id:"displayAllSwitch",theme:s.theme,name:"displayAll"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.editStaffDialog.displayAll),1)])),_:1},8,["modelValue","theme"])])]))])),_:1}),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{mode:"secondary",action:"dismiss",onClick:s.closeDialog},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(h,{mode:"raised",theme:s.theme,action:"accept",onClick:s.confirmChanges},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.saveChanges),1)])),_:1},8,["theme","onClick"])])),_:1})])),_:1},8,["onMdcdialog:opening","onMdcdialog:closed"])):(0,o.kq)("",!0)}var Xs={name:"AppointmentEditStaffDialog",components:{Loading:ge},props:["appointment","triggerElement"],data(){return{staffAvailability:{},loading:!1,displayAll:!1,hasCheckedForCurrentApptType:!1,staffSelected:[],isAllChecked:!1,displaySelect:!1,isOpen:!1}},mounted(){this.staffSelected=[...this.currentlyAssignedIds]},watch:{displayAll(){this.isAllChecked||this.checkOthersAvailability()}},computed:{optionGroups(){const e=[];if(this.currentlyAssignedIds.length){const t={label:this.translations.appointments.editStaffDialog.currentlyAssigned,options:[]};this.currentlyAssignedIds.forEach((e=>{const i=this.staff.find((t=>t.id===e));let a=!this.currentAppointmentTypeStaffIds.includes(e),o="draft"===i.status||"delete"===i.status;t.options.push({value:i.id,label:i.display_name,belongsToAnotherType:a,inactive:o})})),e.push(t)}if(this.staffIdsToCheckOnload.length){const t={label:this.translations.appointments.editStaffDialog.currentAppointmentType,options:[]};this.staffIdsToCheckOnload.forEach((e=>{const i=this.staff.find((t=>t.id===e));let a=this.isUnavailable(e);t.options.push({value:i.id,label:i.display_name,unavailable:a})})),e.push(t)}if(this.displayAll&&this.isAllChecked){const t={label:this.translations.appointments.editStaffDialog.otherAppointmentTypes,options:[]};this.otherStaff.forEach((e=>{let i=this.isUnavailable(e.id);t.options.push({value:e.id,label:e.display_name,unavailable:i})})),e.push(t)}return e},currentlyAssignedIds(){return[...this.appointment.staff_ids].map((e=>e.toString()))},theme(){return this.appointment?.type_label},displayUnavailableWarning(){return this.staffSelected.some((e=>!1===this.staffAvailability[e]&&!this.currentlyAssignedIds.includes(e)))},appointmentType(){return this.getAppointmentTypeById(this.appointment.appointment_type_id)},currentAppointmentTypeStaffIds(){const e=this.appointmentType;return[...e.staff_ids].map((e=>e.toString()))},staffIdsToCheckOnload(){return wa().difference(this.currentAppointmentTypeStaffIds,this.currentlyAssignedIds)},staffIdsToRenderOnload(){const e=this.currentlyAssignedIds,t=this.currentAppointmentTypeStaffIds,i=[...e,...t];return[...new Set(i)]},otherStaff(){return this.staffStatusPublish.filter((e=>!this.staffIdsToRenderOnload.includes(e.id)))},otherStaffIds(){return this.otherStaff.map((e=>e.id))},isNoneSelected(){return wa().isEmpty(this.staffSelected)},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointments",["appointments"]),...(0,m.rn)("staff",["staff"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"]),...(0,m.Se)("staff",["staffStatusPublish"])},methods:{openDialog(){this.isOpen=!0,this.displaySelect=!0,this.staffSelected=[...this.currentlyAssignedIds],!this.hasCheckedForCurrentApptType&&this.staffIdsToCheckOnload.length&&(this.fetchStaffAvailability(this.staffIdsToCheckOnload).then((e=>{this.staffAvailability=e||{}})),this.hasCheckedForCurrentApptType=!0),this.$nextTick((()=>{this.$refs["editStaffDialog"].open()}))},async fetchStaffAvailability(e){if(e.length){this.loading=!0;try{let t=await this.checkStaffAvailability({id:this.appointment.id,staffIds:e});return this.loading=!1,t?.availability}catch(t){console.error(t)}}},closeDialog(){this.isOpen=!1,this.displaySelect=!1,this.$refs["editStaffDialog"].close()},isUnavailable(e){return!this.isCurrentlyAssigned(e)&&(!wa().isEmpty(this.staffAvailability)&&this.staffAvailability instanceof Object&&Object.prototype.hasOwnProperty.call(this.staffAvailability,e)?!this.staffAvailability[e]:void 0)},isCurrentlyAssigned(e){return this.currentlyAssignedIds.includes(e)},confirmChanges(){wa().isEqual(this.currentlyAssignedIds,this.staffSelected)||this.saveNewStaff(this.appointment).then((()=>{this.maybeUpdateGroupAppointments()})),this.closeDialog()},async saveNewStaff(e){if(!e)return;let t=e.id,i={staff_ids:this.staffSelected};this.setAppointmentData({id:t,appt:i});var a={id:t,staff_ids:this.staffSelected};try{await this.saveAppointment(a)}catch(o){console.log(o)}},checkOthersAvailability(){this.isAllChecked||this.fetchStaffAvailability(this.otherStaffIds).then((e=>{e&&(this.staffAvailability=Object.assign({},this.staffAvailability,e),this.isAllChecked=!0)}))},maybeUpdateGroupAppointments(){this.appointment.group_id&&"0"!==this.appointment.group_id.toString()&&this.fetchAppointments({group_id:this.appointment.group_id})},onDialogClose(){this.isOpen=!1,this.displaySelect=!1,this.triggerElement&&this.triggerElement.focus()},onDialogOpen(){setTimeout((()=>{this.$refs.dialogTitle.focus()}),150)},...(0,m.nv)("appointments",["saveAppointment","checkStaffAvailability","fetchAppointments"]),...(0,m.OI)("appointments",["setAppointmentData"])}};const Qs=(0,he.Z)(Xs,[["render",Js],["__scopeId","data-v-12084f5c"]]);var en=Qs;const tn={key:0},an={class:"timeline-header"},on={key:1};function rn(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("revisions-filter"),p=(0,o.up)("revision-row");return(0,o.wg)(),(0,o.iD)("div",null,[l.loadingHistory?((0,o.wg)(),(0,o.j4)(n,{key:0,message:s.getMessage()},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.historyData?.length?((0,o.wg)(),(0,o.iD)("div",tn,[(0,o._)("div",an,[(0,o._)("h3",null,(0,r.zw)(s.getTitle()),1),(0,o._)("div",null,[(0,o.Wm)(d,(0,o.dG)({takenActions:s.takenActions,theme:i.theme},{modelValue:s.selectedActions,"onUpdate:modelValue":t[0]||(t[0]=e=>s.selectedActions=e)}),null,16,["modelValue"])])]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.filteredHistory,(e=>((0,o.wg)(),(0,o.j4)(p,{key:e.id,revision:e,theme:i.theme},null,8,["revision","theme"])))),128))])):((0,o.wg)(),(0,o.iD)("div",on,[(0,o._)("p",null,(0,r.zw)(e.translations.errors.cantFetchingHistory),1)]))],64))])}const ln=e=>((0,o.dD)("data-v-05e7b467"),e=e(),(0,o.Cn)(),e),sn={class:"timeline-item"},nn={class:"timeline-item-date"},dn=ln((()=>(0,o._)("div",{class:"timeline-item-line"},null,-1))),pn={class:"timeline-item-icon"},fn={class:"timeline-item-title"},un={class:"timeline-item-subtitle text-break"};function cn(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon");return(0,o.wg)(),(0,o.iD)("div",sn,[(0,o._)("div",nn,(0,r.zw)(l.moment.utc(i.revision.date_created).tz(e.settings.global.timezone_string).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment+" z")),1),dn,(0,o._)("div",pn,[(0,o.Wm)(n,{theme:"success"===i.revision.result?"green":"deep-orange",icon:s.icon},null,8,["theme","icon"])]),(0,o._)("div",{class:(0,r.C_)(["timeline-item-content chat-bubble",[`md-theme-${i.theme}`]])},[(0,o._)("div",fn,(0,r.zw)(i.revision.action_title),1),(0,o._)("div",un,(0,r.zw)(s.displaySummary),1)],2)])}var hn={name:"RevisionRow",props:{revision:{type:Object,required:!0},theme:{type:String,required:!0}},data(){return{moment:fe()}},computed:{icon(){switch(this.revision.action){case"first_booked":case"booked":return"check_circle";case"rescheduled":return"event_repeat";case"canceled":return"cancel";case"sync_appointment_to_calendar":return"autorenew";case"edited":return"edit";case"abandoned":return"disabled_by_default";case"pending_payment":return"pending";case"pending_form":return"pending";case"notification_scheduled":case"notification_with_duration":case"reminder":return"schedule_send";case"notification_sent":case"reminder_sent":return"send";case"notification_not_sent":case"notification_canceled":return"cancel_schedule_send";case"assigned":case"reassigned":return"group";case"publish":return"add_circle_outline";case"delete":return"delete";case"title_changed":case"max_excution_time_changed":case"buffer_before_changed":case"buffer_after_changed":case"max_event_count_changed":case"min_booking_notice_changed":case"capacity_changed":case"capacity_type_changed":case"timezone_style_changed":case"duration_changed":case"label_id_changed":case"slug_changed":case"instructions_changed":case"availability_increment_changed":case"availability_type_changed":case"availability_changed":case"web_meetings_changed":case"booking_flow_settings_changed":case"customer_information_changed":case"staff_changed":case"staff_ids_changed":case"staff_capacity_changed":case"has_max_capacity_changed":return"edit";case"status_changed":return"replay";case"no_show":return"event_busy";case"no_show_reverted":return"event_available";case"opt_out_notification":return"unsubscribe";default:return"info"}},displaySummary(){return this.revision.action_summary_populated.replace(/<[^>]+>/g,"").replace(/"/g,'"').replace(/&/g,"&")},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"])}};const mn=(0,he.Z)(hn,[["render",cn],["__scopeId","data-v-05e7b467"]]);var gn=mn;const _n=e=>((0,o.dD)("data-v-6ee74534"),e=e(),(0,o.Cn)(),e),yn={class:"filterWrapper"},wn={key:0,class:"popupContainer"},xn=_n((()=>(0,o._)("div",{class:"popupOverlay"},null,-1))),Cn={class:"popupContent",id:"popup-content"};function vn(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-checkbox-multi");return(0,o.wg)(),(0,o.iD)("div",yn,[(0,o._)("div",null,[(0,o.Wm)(n,{indicator:s.filterApplied,icon:"filter_list",onClick:s.toggleFilters},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.filter),1)])),_:1},8,["indicator","onClick"])]),l.isMenuOpen?((0,o.wg)(),(0,o.iD)("div",wn,[xn,(0,o._)("div",Cn,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.sortedActions,((e,i)=>((0,o.wg)(),(0,o.iD)("div",{class:"check-item",key:i},[((0,o.wg)(),(0,o.j4)(d,{key:i,id:"revision-action-"+i,name:"revision-actions",value:e,modelValue:s.selectedActions,"onUpdate:modelValue":t[0]||(t[0]=e=>s.selectedActions=e)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.displayAction(e)),1)])),_:2},1032,["id","value","modelValue"]))])))),128))])])):(0,o.kq)("",!0)])}var bn={name:"AppointmentRevisionsFilter",components:{},props:{theme:{type:String,required:!0},takenActions:{type:Array,required:!0},modelValue:{required:!0}},emits:["update:modelValue"],data(){return{isMenuOpen:!1,parentElement:null,inputElements:null}},mounted(){document.addEventListener("click",this.OverlayClickHandler),document.addEventListener("keydown",this.keyDownHandler)},beforeUnmount(){document.removeEventListener("click",this.OverlayClickHandler),document.removeEventListener("keydown",this.keyDownHandler)},computed:{selectedActions:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},filterApplied(){return!!this.modelValue?.length},checkboxes(){return this.getCheckboxes()},firstCheckboxElement(){return this.checkboxes.length?this.checkboxes[0]:null},lastCheckboxElement(){return this.checkboxes.length?this.checkboxes[this.checkboxes.length-1]:null},sortedActions(){const e=this.takenActions.map((e=>({action:e,translation:this.translations.revisions.actions[e]})));return e.sort(((e,t)=>e.translation?.localeCompare(t.translation))),e.map((e=>e.action)).filter((e=>""!==e.action))},...(0,m.rn)("translations",["translations"])},methods:{toggleFilters(){this.parentElement=null,this.inputElements=null,this.isMenuOpen=!this.isMenuOpen},displayAction(e){return this.translations.revisions.actions[e]?this.translations.revisions.actions[e]:e},OverlayClickHandler(e){this.isMenuOpen&&e.target.matches(".popupOverlay")&&this.toggleFilters()},keyDownHandler(e){if(!this.isMenuOpen)return;if("Escape"===e.key)return void this.toggleFilters();const t=this.firstCheckboxElement,i=this.lastCheckboxElement,a=document.activeElement;if("Tab"===e.key){const o=a===t,r=a===i;e.shiftKey?o&&(e.preventDefault(),i.focus()):r&&(e.preventDefault(),t.focus())}},getCheckboxes(){if(!this.isMenuOpen)return[];const e=this.parentElement||(this.parentElement=document.querySelector("#popup-content")),t=this.inputElements||(this.inputElements=e?.querySelectorAll('input[type="checkbox"]'));return t||[]}}};const Bn=(0,he.Z)(bn,[["render",vn],["__scopeId","data-v-6ee74534"]]);var Sn=Bn,kn={name:"RevisionsList",components:{RevisionRow:gn,RevisionsFilter:Sn,Loading:ge},props:{type:{type:String,required:!0},id:{type:String,required:!0},theme:{type:String,required:!0}},data(){return{loadingHistory:!1,filterBy:[],historyData:null}},mounted(){this.fetchHistory()},computed:{filteredHistory(){return wa().isEmpty(this.filterBy)?this.historyData:this.historyData.filter((e=>this.filterBy.includes(e.action)))},takenActions(){const e=new Set;return this.historyData.forEach((t=>{t.action&&e.add(t.action)})),Array.from(e)},selectedActions:{get(){return this.filterBy},set(e){this.filterBy=e}},...(0,m.rn)("translations",["translations"])},methods:{getArgs(){switch(this.type){case"appointment_type":return{appointment_type_id:this.id};case"appointment":return{appointment_id:this.id};default:return{}}},getTitle(){switch(this.type){case"appointment_type":return this.translations.appointmentTypes.appointmentTypeHistory;case"appointment":return this.translations.appointments.appointmentHistory;default:return{}}},getMessage(){switch(this.type){case"appointment_type":return this.translations.appointmentTypes.loadingHistory;case"appointment":return this.translations.appointments.loadingHistory;default:return{}}},fetchHistory(){this.loadingHistory=!0;let e=this.getArgs();this.fetchAppointmentHistory(e).then((e=>{this.historyData=e,this.loadingHistory=!1}))},...(0,m.nv)("appointments",["fetchAppointmentHistory"])}};const An=(0,he.Z)(kn,[["render",rn],["__scopeId","data-v-15b6fb5f"]]);var Mn=An,Dn={name:"AppointmentDetails",components:{Loading:ge,AppointmentPaymentItem:us,AppointmentMeta:vs,AppointmentCancelDialog:Tr,Revisions:Mn,AppointmentAbandonDialog:Vr,AppointmentEditStaffDialog:en,AppointmentEditStatusDialog:Rs},props:{id:{type:[Number,String],required:!0}},data(){return{appointment:null,editEmbedSrc:"",error:!1,errorDescription:"",errorLabel:"",fetchedStaff:!1,fetchedResources:!1,fetchedResourceGroups:!1,loading:!0,loadingMessage:"",loadingMeta:!1,loadingPayments:!1,moment:fe(),expiresIn:"",expirationDate:"",countDownInterval:null,displayStatusDialog:!1,triggerElement:null,openDotMenu:!1,section:"",sectionId:""}},watch:{appointmentsList:{handler(e){this.appointment=e.find((e=>e.id===this.id)),this.appointment&&(this.appointment=this.prepAppointment(this.appointment))},deep:!0,immediate:!0},id(e,t){e!==t&&this.displayAppointment()}},beforeUnmount(){clearInterval(this.countDownInterval)},mounted(){this.loadingMessage=this.translations.appointments.loadingSingle,this.displayAppointment();let e=[K.appointment_details];this.paymentsModule.installed&&this.paymentsModule.enabled&&e.push(K.appointment_details_payments_enabled),this.getGuides({"ssasc-plugin-screen":e}),this.appointment&&this.appointment.status.match(/pending.*/)&&(this.countDown(),this.countDownInterval=setInterval(this.countDown,6e4))},computed:{appointmentsList(){return this.appointments},appointmentName(){return this.appointment.customer_information.name?this.appointment.customer_information.name:this.appointment.customer_information.Name},isBasic(){return!this.settings.installed.license},availableCustomerInformation(){let e={};return this.appointment?(Object.keys(this.appointment.customer_information).forEach((t=>{this.appointment.customer_information[t]?.length&&(e[t]=this.appointment.customer_information[t])})),e):e},basicCustomerInformation(){let e={};return this.appointment&&this.isBasic?(Object.keys(this.availableCustomerInformation).forEach((t=>{"name"!==t&&(e[t]=this.appointment.customer_information[t])})),e):e},paidCustomerInformation(){if(!this.appointment||this.isBasic)return[];let e={};return Object.keys(this.availableCustomerInformation).forEach((t=>{"Name"!==t&&(e[t]=this.appointment.customer_information[t])})),e},icons(){let e={},t=this.appointmentTypes.filter((e=>e.id===this.appointment.appointment_type_id))[0];return t&&t.custom_customer_information.forEach((t=>{e[t.field]=t.icon})),e},cancelable(){if(!this.appointment)return;let e=!0;return"canceled"!==this.appointment.status&&"abandoned"!==this.appointment.status||(e=!1),this.isInFuture(this.appointment)||(e=!1),e},statusEditable(){return!!this.appointment&&("0"===this.appointment.rescheduled_to_appointment_id&&(!!this.currentUserCan("ssa_manage_appointments")&&(!(!this.isInFuture(this.appointment)&&"booked"!==this.appointment.status)&&"no_show"!==this.appointment.meta?.status)))},dateFormat(){return this.settings.global.date_format_moment},timeFormat(){return this.settings.global.time_format_moment},dateTimeFormat(){return this.dateFormat+" "+this.timeFormat+" z"},rescheduledFromStartDates(){return!!this.appointment?.meta?.rescheduled_from_start_dates?.length&&this.appointment.meta.rescheduled_from_start_dates.map((e=>fe().utc(e).tz(this.settings.global.timezone_string).format(this.dateTimeFormat))).reverse()},rescheduledToAppointment(){if(this.appointment&&"0"!==this.appointment.rescheduled_to_appointment_id)return this.appointments.find((e=>e.id===this.appointment.rescheduled_to_appointment_id))},rescheduledFromAppointment(){if(this.appointment&&"0"!==this.appointment.rescheduled_from_appointment_id)return this.appointments.find((e=>e.id===this.appointment.rescheduled_from_appointment_id))},rescheduledToDatetime(){if(this.rescheduledToAppointment)return fe().utc(this.rescheduledToAppointment.start_date).tz(this.settings.global.timezone_string).format(this.dateTimeFormat)},rescheduledFromDatetime(){if(this.rescheduledFromAppointment)return fe().utc(this.rescheduledFromAppointment.start_date).tz(this.settings.global.timezone_string).format(this.dateTimeFormat)},allowSms(){return Ps(this.appointment.allow_sms)},isPhoneAppointment(){return this.phoneAppointmentTypes.find((e=>e.id===this.appointment.appointment_type_id))},isSmsEnabled(){return Ps(this.sms.enabled)},appointmentStatusGuideUrl(){const e="https://simplyscheduleappointments.com/guides/booking-status-overview/",t={utm_source:"plugin",utm_medium:"guides",utm_campaign:"support-help",utm_term:"pending-payment",utm_content:"booking-status-overview"};return`${e}?${Wt().stringify(t)}`},displayEditstaff(){return!!this.isStaffRequired&&(!!this.isInFuture(this.appointment)&&(!["canceled","abandoned"].includes(this.appointment.status)&&this.currentUserCan("ssa_manage_staff")))},currentAppointmentType(){return this.getAppointmentTypeById(this.appointment.appointment_type_id)},displayHistory(){return!!this.settings.developer?.display_appointment_revisions&&null!==this.appointment},isReservedStatus(){return D.includes(this.appointment?.status)},isStaffRequired(){return this.staffModule?.enabled&&""!==this.currentAppointmentType.staff.required},displayResources(){let e=[];return Object.values(this.appointment.selected_resources).forEach((t=>{let i=this.getResourceGroupInformation(t.resource_group_id),a=this.getResourceTitle(t.resource_id);e.push({resourceGroup:i,resourceTitle:a,resourceType:i.resource_type})})),e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings","timestampFormat"]),...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.rn)("appointments",["appointments"]),...(0,m.rn)("staff",["staff"]),...(0,m.rn)("resources",["resources","resourceGroups"]),...(0,m.Se)(["displayDuration"]),...(0,m.Se)("staff",["appointmentStaffNames","staffModule","currentUserCan"]),...(0,m.Se)("appointments",["prepAppointment","wpUserGravatar","wpUserLink","wpUserName","isAddressDisplayed","isInFuture"]),...(0,m.Se)("payments",["paymentsModule"]),...(0,m.Se)("notifications",["phoneAppointmentTypes","sms"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"]),...(0,m.Se)("resources",["resourcesModule"])},methods:{cancelDelete(){this.$refs["confirmDelete"].close()},confirmCancel(){this.$refs.cancelDialog.openDialog()},openChangeStatusDialog(e){this.triggerElement=e.target,this.displayStatusDialog=!0,this.$nextTick((()=>{this.$refs.changeStatusDialog.openDialog()}))},editStaff(e){this.triggerElement=e.target,this.$refs.editStaffDialog?.openDialog()},confirmAbandon(){this.$refs.abandonDialog.openDialog()},confirmDelete(){this.$refs["confirmDelete"].open()},editAppointment(){this.editEmbedSrc=this.appointment.public_edit_url+"&redirect_from=ssa_admin",this.$refs.editDialog.open()},deleteAppt(){this.loadingMessage=this.translations.appointments.deletingSingle,this.loading=!0,this.$refs["confirmDelete"].close(),this.deleteAppointment(this.appointment).then((()=>{this.$router.push("/ssa/appointments")})).catch((e=>{console.log(e)}))},displayAppointment(){return this.loading=!0,this.appointment=this.appointments.find((e=>e.id===this.id)),this.appointment?(this.appointment=this.prepAppointment(this.appointment),this.loading=!1,this.error=!1,this.maybeFetchPayments(),this.maybeFetchMeta(),void this.maybeFetchRescheduledAppointments()):!this.staffModule.enabled||this.staff||this.fetchedStaff?!this.resourcesModule.enabled||this.resourceGroups||this.fetchedResourceGroups?!this.resourcesModule.enabled||this.resources||this.fetchedResources?void this.fetchAppointment(this.id).then((()=>{this.loading=!1,this.appointment=this.appointments.find((e=>e.id===this.id)),this.appointment?(this.appointment=this.prepAppointment(this.appointment),this.maybeFetchPayments(),this.maybeFetchMeta(),this.maybeFetchRescheduledAppointments(),this.appointment.status.match(/pending.*/)&&(this.countDown(),this.countDownInterval=setInterval(this.countDown,6e4))):(this.error=!0,this.errorLabel=this.translations.appointments.errorNotFound,this.errorDescription=this.translations.appointments.errorNotFoundDescription)})).catch((e=>{console.log(e),this.error=!0,this.errorLabel=this.translations.appointments.errorLoading,this.errorDescription=this.translations.appointments.errorLoadingDescription})):(this.loading=!0,void this.fetchResources().then((()=>{this.displayAppointment(),this.fetchedResource=!0})).catch((e=>{console.log(e),this.error=!0,this.errorLabel=this.translations.appointments.errorLoading,this.errorDescription=this.translations.appointments.errorLoadingDescription}))):(this.loading=!0,void this.fetchResourceGroups().then((()=>{this.displayAppointment(),this.fetchedResourceGroups=!0})).catch((e=>{console.log(e),this.error=!0,this.errorLabel=this.translations.appointments.errorLoading,this.errorDescription=this.translations.appointments.errorLoadingDescription}))):(this.loading=!0,void this.fetchStaff().then((()=>{this.displayAppointment(),this.fetchedStaff=!0})).catch((e=>{console.log(e),this.error=!0,this.errorLabel=this.translations.appointments.errorLoading,this.errorDescription=this.translations.appointments.errorLoadingDescription})))},maybeFetchPayments(){this.paymentsModule.installed&&(Object.prototype.hasOwnProperty.call(this.appointment,"payments")||(this.loadingPayments=!0,this.fetchPayments(this.appointment.id).then((()=>{this.loadingPayments=!1}))))},maybeFetchMeta(){Object.prototype.hasOwnProperty.call(this.appointment,"meta")||(this.loadingMeta=!0,this.fetchAppointmentMeta(this.appointment).then((()=>{this.loadingMeta=!1})))},refreshAppointment(){this.loading=!0,this.fetchAppointment(this.id).then((()=>{this.loading=!1,this.appointment=this.appointments.find((e=>e.id===this.id)),this.appointment?(this.appointment=this.prepAppointment(this.appointment),this.maybeFetchPayments(),this.maybeFetchMeta(),this.maybeFetchRescheduledAppointments()):(this.error=!0,this.errorLabel=this.translations.appointments.errorNotFound,this.errorDescription=this.translations.appointments.errorNotFoundDescription)})).catch((e=>{console.log(e),this.error=!0,this.errorLabel=this.translations.appointments.errorLoading,this.errorDescription=this.translations.appointments.errorLoadingDescription}))},maybeFetchRescheduledAppointments(){this.appointment&&("0"===this.appointment.rescheduled_to_appointment_id||this.rescheduledToAppointment||this.fetchAppointment(this.appointment.rescheduled_to_appointment_id),"0"===this.appointment.rescheduled_from_appointment_id||this.rescheduledFromAppointment||this.fetchAppointment(this.appointment.rescheduled_from_appointment_id))},countDown(){this.expirationDate=fe().utc(this.appointment.expiration_date),fe().duration(this.expirationDate.diff(fe().utc()))<=0?(this.expiresIn=-1,clearInterval(this.countDownInterval)):this.expiresIn=fe().duration(this.expirationDate.diff(fe().utc())).humanize(!0)},getResourceGroupInformation(e){let t=this.resourceGroups.find((t=>t.id==e));return{title:t.title,resource_type:t.resource_type}},getResourceTitle(e){if(0!=e){let t=this.resources.find((t=>t.id==e));return t.title}},updateSection(e,t){e?(this.section=e,this.sectionId=t):(this.section=null,this.sectionId=null)},cancelRemoveNoShowStatus(){this.$refs.removeNoShowStatusDialog.close()},confirmRemoveNoShowStatus(e){e?.target&&"BUTTON"===e.target.tagName&&e.target.classList.add("button-visible"),this.$refs.removeNoShowStatusDialog.open()},removeNoShowStatus(){this.loading=!0,this.$refs.removeNoShowStatusDialog.close(),this.saveAppointmentMeta({id:this.appointment.id,meta:{status:"no-show-reverted"}}).then((()=>{this.loading=!1})).catch((e=>{console.log(e),this.loading=!1}))},onRemoveNoShowStatusDialogClose(){const e=this.$refs.removeNoShowStatusButton;e&&e.classList?.contains("button-visible")&&e.classList.remove("button-visible")},...(0,m.nv)("appointments",["deleteAppointment","fetchAppointment","fetchAppointmentMeta","saveAppointment","saveAppointmentMeta"]),...(0,m.nv)("payments",["fetchPayments"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.nv)("staff",["fetchStaff"]),...(0,m.nv)("resources",["fetchResources","fetchResourceGroups"])}};const Tn=(0,he.Z)(Dn,[["render",Zl],["__scopeId","data-v-9ad3d1c4"]]);var On=Tn;const Gn=e=>((0,o.dD)("data-v-45bb3578"),e=e(),(0,o.Cn)(),e),En={class:"appointment group"},Un={class:"md-title",style:{flex:"1"}},Fn=Gn((()=>(0,o._)("span",{class:"screen-reader-text"},"Appointment options",-1))),In={class:"single-group-appointment"},zn={class:"md-title"},Pn={key:2,class:"status canceled"},Vn={class:"md-subheading"},Wn={class:"foxy-list-default appointment-group-list-items"},Rn={class:"foxy-list-text-container"},Ln={class:"name-and-status"},jn={key:0,class:"no-show"},qn=["onClick"],Nn=["onClick"],$n={class:"md-list-text-container"},Hn=["innerHTML"],Zn={key:1},Yn={key:0};function Kn(e,t,i,a,l,s){const n=(0,o.up)("foxy-empty"),d=(0,o.up)("loading"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-icon-button"),c=(0,o.up)("foxy-list-item"),h=(0,o.up)("foxy-menu"),m=(0,o.up)("foxy-menu-anchor"),g=(0,o.up)("foxy-toolbar"),_=(0,o.up)("appointment-edit-staff-dialog"),y=(0,o.up)("router-link"),w=(0,o.up)("foxy-dialog-title"),x=(0,o.up)("foxy-list"),C=(0,o.up)("foxy-dialog-content"),v=(0,o.up)("foxy-dialog-button"),b=(0,o.up)("foxy-dialog-footer"),B=(0,o.up)("foxy-dialog"),S=(0,o.up)("foxy-notification");return(0,o.wg)(),(0,o.iD)("div",En,[l.error?((0,o.wg)(),(0,o.j4)(n,{key:0,icon:e.api.admin_static_url+"/images/foxes/fox-sleeping.svg",label:l.errorLabel,description:l.errorDescription},null,8,["icon","label","description"])):l.loading?((0,o.wg)(),(0,o.j4)(d,{key:1,message:l.loadingMessage},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(p,{tag:"md-button",to:"/ssa/appointments",icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.viewAll),1)])),_:1}),(0,o.Wm)(g,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("h2",Un,(0,r.zw)(e.translations.appointments.group.appointmentDetails),1),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{onClick:t[0]||(t[0]=e=>l.openMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"more_vert"}),Fn])),_:1}),(0,o.Wm)(h,{modelValue:l.openMenu,"onUpdate:modelValue":t[1]||(t[1]=e=>l.openMenu=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{onClick:s.exportToCsv},{default:(0,o.w5)((()=>[(0,o.Uk)(" Export ")])),_:1},8,["onClick"]),s.isCancelable?((0,o.wg)(),(0,o.j4)(c,{key:0,onClick:s.confirmGroupCancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0),(0,o.Wm)(c,{onClick:s.confirmGroupDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.delete),1)])),_:1},8,["onClick"])])),_:1},8,["modelValue"])])),_:1})])),_:1}),(0,o._)("div",In,[(0,o._)("h3",zn,[(0,o.Uk)((0,r.zw)(s.appointmentTypeMeta.type_title)+" ",1),e.appointmentStaffNames(s.groupAppointments)?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.appointment.with)+" "+(0,r.zw)(e.appointmentStaffNames(s.groupAppointments)),1)],64)):(0,o.kq)("",!0),s.displayEditStaff?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("button",{class:"link edit-staff-link",onClick:t[2]||(t[2]=(...e)=>s.editStaff&&s.editStaff(...e))},(0,r.zw)(e.translations.appointments.editStaffDialog.editTeam),1),(0,o.Wm)(_,(0,o.dG)({appointment:s.appointmentTypeMeta,triggerElement:l.triggerElement},{ref:"editStaffDialog"}),null,16)],64)):(0,o.kq)("",!0),"canceled"===e.groupAppointmentStatus(s.groupAppointments)?((0,o.wg)(),(0,o.iD)("span",Pn," ("+(0,r.zw)(e.translations.appointments.statuses["canceled"])+") ",1)):(0,o.kq)("",!0)]),(0,o._)("p",Vn,(0,r.zw)(l.moment(s.appointmentTypeMeta.start_date,e.timestampFormat).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment))+" "+(0,r.zw)(l.moment.utc(s.appointmentTypeMeta.start_date).tz(e.settings.global.timezone_string).format("z"))+" ("+(0,r.zw)(e.displayDuration(s.appointmentTypeMeta.duration))+") ",1),(0,o._)("ul",Wn,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.groupAppointments,((t,i)=>((0,o.wg)(),(0,o.iD)("li",{key:i,class:(0,r.C_)(["foxy-list-container","status-"+t.status])},[(0,o.Wm)(f,{class:"md-size-2x",icon:"person",theme:s.appointmentTypeMeta.type_label},null,8,["theme"]),(0,o._)("div",Rn,[(0,o._)("span",Ln,[(0,o._)("span",null,(0,r.zw)(t.customer_information.Name),1),"no_show"===t.meta?.status?((0,o.wg)(),(0,o.iD)("span",jn,[(0,o.Wm)(f,{icon:"event_busy",theme:"grey"})])):(0,o.kq)("",!0)]),(0,o._)("span",null,(0,r.zw)(t.customer_information.Email),1),(0,o._)("p",null,[(0,o.Wm)(y,{class:"link",to:"/ssa/appointment/"+t.id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.viewDetails),1)])),_:2},1032,["to"]),e.isInFutureUtc(t)&&"canceled"!==t.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)(" | "),(0,o._)("button",{class:"link",onClick:e=>s.confirmCancel(t.id)},(0,r.zw)(e.translations.appointments.cancel),9,qn)],64)):(0,o.kq)("",!0),s.canMarkAsNoShow(t)?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)(" | "),(0,o._)("button",{class:"link",onClick:e=>s.confirmNoShow(t)},(0,r.zw)(e.translations.appointments.markAsNoShow),9,Nn)],64)):(0,o.kq)("",!0)])])],2)))),128))])])],64)),(0,o.Wm)(B,{ref:"confirmCancel"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirm),1)])),_:1}),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[l.currentAppointment?((0,o.wg)(),(0,o.j4)(x,{key:0},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.availableCustomerInformation,((t,i,a)=>((0,o.wg)(),(0,o.j4)(c,{key:a},{default:(0,o.w5)((()=>[(0,o._)("div",$n,[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.customer_information[i]?e.translations.appointmentTypes.customer_information[i]:i),1),"string"===typeof t?((0,o.wg)(),(0,o.iD)("span",{key:0,innerHTML:t},null,8,Hn)):((0,o.wg)(),(0,o.iD)("span",Zn,(0,r.zw)(t.join(", ")),1))])])),_:2},1024)))),128))])),_:1})):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(v,{action:"dismiss",onClick:s.cancelCancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirmCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(v,{action:"accept",onClick:s.cancelAppt},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.cancelConfirmOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(B,{ref:"confirmCancelGroup"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.cancelConfirm),1)])),_:1}),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.appointments.group.cancelConfirmBody),1),s.groupAppointments.length?((0,o.wg)(),(0,o.iD)("ul",Yn,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.groupAppointments,((e,t)=>((0,o.wg)(),(0,o.iD)("li",{key:t},(0,r.zw)(e.customer_information.Name),1)))),128))])):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(v,{action:"dismiss",onClick:s.cancelCancelGroup},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.cancelConfirmCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(v,{action:"accept",onClick:s.cancelGroup},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.cancelConfirmOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(B,{ref:"confirmDeleteGroup"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.deleteConfirm),1)])),_:1}),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o.Wm)(S,{theme:"amber",icon:"warning"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.deleteConfirmExplanation)+" ",1),s.isCancelable?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.deleteConfirmExplanationCancelable),1)],64)):(0,o.kq)("",!0)])),_:1}),s.groupAppointments.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("p",null,(0,r.zw)(e.translations.appointments.group.deleteConfirmBody),1),(0,o._)("ul",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.groupAppointments,((e,t)=>((0,o.wg)(),(0,o.iD)("li",{key:t},(0,r.zw)(e.customer_information.Name),1)))),128))])],64)):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(v,{action:"dismiss",onClick:s.cancelDeleteGroup},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.cancelDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(v,{action:"accept",onClick:s.deleteAppointment},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.group.cancelDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)])}var Jn={name:"GroupAppointment",components:{Loading:ge,AppointmentEditStaffDialog:en},props:{id:{type:[Number,String],required:!0}},data(){return{currentAppointment:null,error:!1,errorDescription:"",errorLabel:"",loading:!0,loadingMessage:"",moment:fe(),triggerElement:null,openMenu:!1}},watch:{id(e,t){e!==t&&this.displayAppointment()}},mounted(){this.loadingMessage=this.translations.appointments.loadingSingle,this.displayAppointment()},computed:{appointmentTypeMeta(){if(!this.groupAppointments.length)return;let e=this.groupAppointments[0];return this.prepAppointment(e)},isCancelable(){return!!this.groupAppointments.length&&(this.isInFutureUtc(this.appointmentTypeMeta)&&"canceled"!==this.groupAppointmentStatus(this.groupAppointments))},groupAppointments(){return this.appointments.length?this.appointments.filter((e=>e.group_id===this.id)):[]},availableCustomerInformation(){if(!this.currentAppointment)return[];let e={};return Object.keys(this.currentAppointment.customer_information).forEach((t=>{this.appointment.customer_information[t]?.length&&(e[t]=this.appointment.customer_information[t])})),e},displayEditStaff(){return!!this.isStaffRequired&&(!!this.groupAppointments.length&&(!["canceled","abandoned"].includes(this.groupAppointmentStatus(this.groupAppointments))&&(!!this.isInFutureUtc(this.appointmentTypeMeta)&&!!this.currentUserCan("ssa_manage_staff"))))},appointmentType(){return this.getAppointmentTypeById(this.appointmentTypeMeta?.appointment_type_id)},isStaffRequired(){return this.staffModule?.enabled&&""!==this.appointmentType?.staff.required},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings","timestampFormat"]),...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.rn)("appointments",["appointments"]),...(0,m.Se)(["displayDuration"]),...(0,m.Se)("appointments",["csvExportFile","groupAppointmentStatus","prepAppointment","isInFutureUtc"]),...(0,m.Se)("staff",["appointmentStaffNames","currentUserCan","staffModule"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"])},methods:{cancelAppt(){let e=this.currentAppointment.id,t={status:"canceling"};this.setAppointmentData({id:e,appt:t});let i={id:e,status:"canceled"};this.saveAppointment(i).then((()=>{})).catch((e=>{console.log(e)})),this.$refs["confirmCancel"].close()},cancelCancel(){this.$refs["confirmCancel"].close()},confirmCancel(e){this.currentAppointment=this.groupAppointments.find((t=>t.id.toString()===e.toString())),this.$refs["confirmCancel"].open()},cancelCancelGroup(){this.$refs["confirmCancelGroup"].close()},confirmGroupCancel(){this.$refs["confirmCancelGroup"].open()},cancelGroup(){this.cancelGroupAppointment(this.id).then((()=>{})).catch((e=>{console.log(e)})),this.$refs["confirmCancelGroup"].close()},confirmGroupDelete(){this.$refs["confirmDeleteGroup"].open()},cancelDeleteGroup(){this.$refs["confirmDeleteGroup"].close()},deleteAppointment(){this.loadingMessage=this.translations.appointments.group.deleting,this.loading=!0,this.$refs["confirmDeleteGroup"].close(),this.deleteGroupAppointment(this.id).then((()=>{this.$router.push("/ssa/appointments")})).catch((e=>{console.log(e)}))},checkGroupAppointments(){this.groupAppointments.length||(this.error=!0,this.errorLabel=this.translations.appointments.errorNotFound,this.errorDescription=this.translations.appointments.errorNotFoundDescription)},displayAppointment(){if(this.loading=!0,this.groupAppointments.length)return this.loading=!1,void(this.error=!1);this.fetchAppointments({group_id:this.id}).then((()=>{this.loading=!1,this.checkGroupAppointments()}))},exportToCsv(){this.csvExportFile(this.groupAppointments)},editStaff(e){this.triggerElement=e.target,this.$refs.editStaffDialog?.openDialog()},canMarkAsNoShow(e){return!this.isInFutureUtc(e)&&"booked"===e.status&&"no_show"!==e.meta?.status},confirmNoShow(e){if(!this.canMarkAsNoShow(e))return;const t={status:"no_show"};this.saveAppointmentMeta({id:e.id,meta:t}).then((()=>{})).catch((e=>{console.log(e)}))},...(0,m.nv)("appointments",["cancelGroupAppointment","deleteGroupAppointment","saveAppointmentMeta","fetchAppointments","saveAppointment"]),...(0,m.OI)("appointments",["setAppointmentData"])}};const Xn=(0,he.Z)(Jn,[["render",Kn],["__scopeId","data-v-45bb3578"]]);var Qn=Xn,ed=[{path:"appointments",name:"appointments",component:Lr,meta:{ssa_manage_appointments:!0,ssa_manage_others_appointments:!0}},{path:"appointment/:id",component:On,props:!0,meta:{ssa_manage_appointments:!0,ssa_manage_others_appointments:!0}},{path:"event/:id",component:Qn,props:!0,meta:{ssa_manage_appointments:!0,ssa_manage_others_appointments:!0}}];const td={class:"appointment-types-all"};function id(e,t,i,a,r,l){const s=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",td,[(0,o.Wm)(s,{onSaved:l.backToList},null,8,["onSaved"])])}var ad={name:"AppointmentTypesAll",store:$J,data(){return{}},methods:{backToList(){this.$router.push("/ssa/appointment-types/all")}}};const od=(0,he.Z)(ad,[["render",id]]);var rd=od;const ld={class:"appt-types"},sd={class:"md-title"},nd={key:0,class:"ssa-appointment-status-selector"},dd=(0,o._)("div",{style:{flex:"1"}},null,-1),pd={class:"appt-types-list-toolbar-actions"},fd={key:0,role:"separator",class:"mdc-list-divider"},ud=["onClick"],cd={class:"appt-type-item-title text-break","data-test":"test-appt-type-item-title"},hd={class:"appt-type-item-desc"},md={key:0};function gd(e,t,i,a,l,s){const n=(0,o.up)("foxy-list-item"),d=(0,o.up)("foxy-select"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-menu"),u=(0,o.up)("foxy-menu-anchor"),c=(0,o.up)("foxy-icon"),h=(0,o.up)("foxy-toolbar"),m=(0,o.up)("foxy-checkbox"),g=(0,o.up)("foxy-icon-button"),_=(0,o.up)("draggable"),y=(0,o.up)("foxy-empty"),w=(0,o.up)("foxy-dialog-title"),x=(0,o.up)("foxy-notification"),C=(0,o.up)("foxy-layout"),v=(0,o.up)("foxy-dialog-content"),b=(0,o.up)("foxy-dialog-button"),B=(0,o.up)("foxy-dialog-footer"),S=(0,o.up)("foxy-dialog"),k=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("div",ld,[(0,o.Wm)(h,{style:{"min-height":"76px"},class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("h2",sd,[s.bulkEditMode?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(s.bulkEditingComputed.length)+" "+(0,r.zw)(e.translations.general.selected),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[0===e.deletedAppointmentTypes.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.appointmentTypesTitle),1)],64)):(0,o.kq)("",!0)],64))]),s.bulkEditMode?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",nd,[e.deletedAppointmentTypes.length?((0,o.wg)(),(0,o.j4)(d,{key:0,label:e.translations.settings.appointmentTypesTitle,name:"filter-time",id:"filter-time",modelValue:s.selectedStatus,"onUpdate:modelValue":t[0]||(t[0]=e=>s.selectedStatus=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{"data-value":"publish",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.appointmentTypesTitle),1)])),_:1}),(0,o.Wm)(n,{"data-value":"delete",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.appointmentTypesDeleted),1)])),_:1})])),_:1},8,["label","modelValue"])):(0,o.kq)("",!0)])),dd,(0,o._)("div",pd,[s.bulkEditMode&&s.bulkEditingComputed.length>1?((0,o.wg)(),(0,o.j4)(u,{key:0,"md-direction":"bottom left","md-size":"4"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{onClick:t[1]||(t[1]=e=>l.openMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.bulkEdit),1)])),_:1}),(0,o.Wm)(f,{modelValue:l.openMenu,"onUpdate:modelValue":t[9]||(t[9]=e=>l.openMenu=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{onClick:t[2]||(t[2]=e=>s.openBulkEdit("basics"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.basics),1)])),_:1}),(0,o.Wm)(n,{onClick:t[3]||(t[3]=e=>s.openBulkEdit("availability"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.availability),1)])),_:1}),(0,o.Wm)(n,{onClick:t[4]||(t[4]=e=>s.openBulkEdit("scheduling"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.scheduling),1)])),_:1}),(0,o.Wm)(n,{onClick:t[5]||(t[5]=e=>s.openBulkEdit("customerInfo"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.customerInfo),1)])),_:1}),s.extrasEnabled?((0,o.wg)(),(0,o.iD)("li",fd)):(0,o.kq)("",!0),s.showPayments?((0,o.wg)(),(0,o.j4)(n,{key:1,onClick:t[6]||(t[6]=e=>s.openBulkEdit("payments"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.payments),1)])),_:1})):(0,o.kq)("",!0),s.showGoogleCalendar?((0,o.wg)(),(0,o.j4)(n,{key:2,onClick:t[7]||(t[7]=e=>s.openBulkEdit("googleCalendar"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.googleCalendar),1)])),_:1})):(0,o.kq)("",!0),s.showMailchimp?((0,o.wg)(),(0,o.j4)(n,{key:3,onClick:t[8]||(t[8]=e=>s.openBulkEdit("mailchimp"))},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.mailchimp),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["modelValue"])])),_:1})):s.bulkEditMode||"delete"===s.selectedStatus?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(u,{"md-direction":"bottom-start"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{class:"md-primary indicator-button",disabled:l.saving,icon:"label",indicator:s.isFilteringByLabel,onClick:t[10]||(t[10]=e=>l.openLabelMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.labels),1)])),_:1},8,["disabled","indicator"]),(0,o.Wm)(f,{modelValue:l.openLabelMenu,"onUpdate:modelValue":t[11]||(t[11]=e=>l.openLabelMenu=e)},{default:(0,o.w5)((()=>[s.isFilteringByLabel?((0,o.wg)(),(0,o.j4)(n,{key:0,onClick:e.clearSelectedAppointmentTypeLabel},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"clear",theme:"light-green"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.appointmentTypes.actions.clearLabelFilter),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.apptTypeLabels,(t=>((0,o.wg)(),(0,o.j4)(n,{key:t.id,onClick:i=>e.setSelectedAppointmentTypeLabel(t)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{theme:t.color,icon:"label"},null,8,["theme"]),(0,o.Uk)(" "+(0,r.zw)(t.name),1)])),_:2},1032,["onClick"])))),128))])),_:1},8,["modelValue"])])),_:1}),e.editableAppointmentTypes.length>1?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[l.reordering?((0,o.wg)(),(0,o.j4)(p,{key:0,disabled:l.saving,mode:"raised",icon:"save",onClick:s.saveAppointmentTypeOrder},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.saveOrder),1)])),_:1},8,["disabled","onClick"])):((0,o.wg)(),(0,o.j4)(p,{key:1,disabled:l.saving,class:"md-primary",icon:"drag_indicator",onClick:s.reorderAppointmentTypes},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.reorder),1)])),_:1},8,["disabled","onClick"]))],64)):(0,o.kq)("",!0),(0,o.Wm)(p,{class:"md-primary ssa-appt-type-add-new","data-test":"test-ssa-appt-type-add-new",disabled:l.saving,icon:"add",onClick:s.addAppointmentType},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.addNew),1)])),_:1},8,["disabled","onClick"])],64))])])),_:1}),s.displayAppointmentTypes.length?((0,o.wg)(),(0,o.j4)(_,{key:0,animation:150,class:(0,r.C_)(["sortable-list appt-type-editable-list",{disabled:l.saving,dragging:l.dragging}]),"ghost-class":"ghost",tag:"ul",handle:".handle",modelValue:s.displayAppointmentTypes,"onUpdate:modelValue":t[13]||(t[13]=e=>s.displayAppointmentTypes=e),"item-key":"id",onStart:t[14]||(t[14]=e=>l.dragging=!0),onEnd:t[15]||(t[15]=e=>l.dragging=!1)},{item:(0,o.w5)((({element:i})=>[(0,o._)("li",{class:(0,r.C_)(["list-item",{deleted:"delete"===i.status}])},[(0,o._)("div",{class:(0,r.C_)(["icon-toggle",{"bulk-edit":s.bulkEditMode,"bulk-edit-avail":e.editableAppointmentTypes.length>1&&!l.reordering}])},[(0,o.Wm)(c,{icon:"label",theme:e.labelInfo(i.label_id,"color")},null,8,["theme"]),(0,o.Wm)(m,{theme:e.labelInfo(i.label_id,"color"),id:"appt-type-"+i.id,name:"appt-type-"+i.id,value:i.id.toString(),modelValue:s.bulkEditingComputed,"onUpdate:modelValue":t[12]||(t[12]=e=>s.bulkEditingComputed=e),label:e.translations.appointmentTypes.actions.bulkEdit},null,8,["theme","id","name","value","modelValue","label"])],2),(0,o._)("div",{class:"text-container",onClick:e=>s.editAppointmentType(i.id)},[(0,o._)("span",cd,(0,r.zw)(i.title),1),(0,o._)("span",hd,[(0,o.Uk)((0,r.zw)(e.displayDuration(i.duration))+" - ",1),(0,o._)("span",{class:(0,r.C_)(["label-inline",[`md-theme-${e.labelInfo(i.label_id,"color")}`]])},(0,r.zw)(e.labelInfo(i.label_id,"name")),3)])],8,ud),l.reordering?((0,o.wg)(),(0,o.j4)(c,{key:0,class:(0,r.C_)(["handle",{dragging:l.dragging}]),theme:"blue-grey",icon:"drag_indicator"},null,8,["class"])):((0,o.wg)(),(0,o.j4)(u,{key:1},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{"data-test":"test-appt-type-edit-anchor",class:"md-icon-button md-list-action",disabled:l.saving,onClick:e=>l.openActionsMenu[i.id]=!0,theme:e.labelInfo(i.label_id,"color")},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"settings",theme:e.labelInfo(i.label_id,"color")},null,8,["theme"])])),_:2},1032,["disabled","onClick","theme"]),(0,o.Wm)(f,{modelValue:l.openActionsMenu[i.id],"onUpdate:modelValue":e=>l.openActionsMenu[i.id]=e,style:{right:"0",left:"unset"}},{default:(0,o.w5)((()=>["delete"!==s.selectedStatus?((0,o.wg)(),(0,o.j4)(n,{key:0,onClick:e=>s.editAppointmentType(i.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0),"delete"!==s.selectedStatus?((0,o.wg)(),(0,o.j4)(n,{key:1,onClick:e=>s.cloneAppointmentType(i.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"content_copy"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.clone),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0),"delete"!==s.selectedStatus?((0,o.wg)(),(0,o.j4)(n,{key:2,onClick:e=>s.confirmDelete(i.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0),"delete"===s.selectedStatus?((0,o.wg)(),(0,o.j4)(n,{key:3,onClick:e=>s.recoverSelectedAppointmentType(i.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"undo"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.recover),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0)])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024))],2)])),_:1},8,["class","modelValue"])):((0,o.wg)(),(0,o.j4)(y,{key:1,label:e.translations.appointmentTypes.empty},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{mode:"raised",class:"md-primary",onClick:s.addAppointmentType},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.create),1)])),_:1},8,["onClick"])])),_:1},8,["label"])),(0,o.Wm)(S,{ref:"confirmDelete","data-test":"test-confirm-delete-dialog"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.confirmDelete),1)])),_:1}),s.deletedType?((0,o.wg)(),(0,o.j4)(v,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.deletedType.title)+" ("+(0,r.zw)(e.displayDuration(s.deletedType.duration))+") ",1),s.deletedTypeAppointments.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[s.showMeprWarninOnDelete?((0,o.wg)(),(0,o.j4)(C,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(x,{icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.deleteTypeWithMembershipsWarn),1)])),_:1})])),_:1})):(0,o.kq)("",!0),(0,o._)("p",null,(0,r.zw)(e.translations.appointmentTypes.confirmDeleteAppointments),1),(0,o._)("ul",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.deletedTypeAppointments,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id},[t.mepr_membership?.id?((0,o.wg)(),(0,o.iD)("span",md,[(0,o._)("strong",null,(0,r.zw)(t.mepr_membership.title),1),(0,o.Uk)(" - ")])):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(l.moment(t.start_date,e.timestampFormat).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment)),1)])))),128))])],64)):(0,o.kq)("",!0)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(B,null,{default:(0,o.w5)((()=>[(0,o.Wm)(b,{action:"dismiss",onClick:s.cancelDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.confirmDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(b,{action:"accept",onClick:s.deleteSelectedAppointmentType},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.confirmDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(k,{position:"top center",modelValue:l.isErrorDeletingVisible,"onUpdate:modelValue":t[16]||(t[16]=e=>l.isErrorDeletingVisible=e),"timeout-ms":1e4,message:e.translations.errors.cantDeleteType},null,8,["modelValue","message"])])}var _d=i(76983),yd=i.n(_d),wd={name:"AppointmentTypesList",store:$J,components:{draggable:yd()},data(){return{deletedId:null,moment:fe(),reordering:!1,dragging:!1,saving:!1,openMenu:!1,openLabelMenu:!1,openActionsMenu:{},isErrorDeletingVisible:!1}},beforeMount(){this.emptyCurrentAppointmentType(),this.updateBulkEditing([])},mounted(){if(this.maybeFetchAppointmentTypes(),this.maybeUpdateSortOrder(),this.maybeUpdateAppointmentTypeLabels(),this.appointments.length)return;let e=fe().utc().locale("en").format("YYYY-MM-DD");this.fetchAppointments({end_date_min:e,order:"ASC",orderby:"start_date"})},watch:{selectedStatus(){"delete"===this.selectedStatus&&(this.reordering=!1)},$route:"maybeFetchAppointmentTypes"},computed:{deletedType(){if(this.deletedId)return this.editableAppointmentTypes.find((e=>e.id.toString()===this.deletedId.toString()))},deletedTypeAppointments(){return this.upcomingAppointments.filter((e=>e.appointment_type_id===this.deletedId))},selectedStatus:{get(){return this.selectedApointmentTypeStatus},set(e){this.setSelectedAppointmentTypeStatus(e)}},selectedLabel:{get(){return this.selectedAppointmentTypeLabel},set(e){this.setSelectedAppointmentTypeLabel(e)}},isFilteringByLabel(){return 0!==Object.keys(this.selectedLabel).length},displayAppointmentTypes:{get(){return"delete"===this.selectedStatus?this.deletedAppointmentTypes:this.isFilteringByLabel?this.editableAppointmentTypes.filter((e=>e.label_id===this.selectedLabel.id)):this.editableAppointmentTypes},set(e){this.setAppointmentTypesOrder(e)}},bulkEditingComputed:{get(){return this.bulkEditing},set(e){this.updateBulkEditing(e)}},bulkEditMode(){return this.editableAppointmentTypes.length>1&&this.bulkEditing.length},extrasEnabled(){return this.showGoogleCalendar||this.showMailchimp||this.showPayments},showGoogleCalendar(){return this.settings.installed.google_calendar&&this.settings.google_calendar.enabled&&this.settings.google_calendar.access_token},showMailchimp(){return this.settings.installed.mailchimp&&this.settings.mailchimp.enabled&&!wa().isEmpty(this.settings.mailchimp.account_details)},showPayments(){return this.settings.installed.payments&&(this.settings.stripe.enabled||this.settings.paypal.enabled)},labelsColors(){return this.apptTypeLabels},showMeprWarninOnDelete(){return this.deletedTypeAppointments.some((e=>Object.prototype.hasOwnProperty.call(e,"mepr_membership")&&!wa().isEmpty(e["mepr_membership"])))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat","appointments"]),...(0,m.Se)(["displayDuration"]),...(0,m.Se)("appointments",["upcomingAppointments"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes","deletedAppointmentTypes","labelInfo"]),...(0,m.rn)("appointment_types",["selectedApointmentTypeStatus","selectedAppointmentTypeLabel","bulkEditing","currentAppointmentType","refreshMomentApptTypes","appointmentTypes"]),...(0,m.rn)("labels",["apptTypeLabels"])},methods:{maybeUpdateAppointmentTypeLabels(){let e=wa().cloneDeep(this.appointmentTypes);wa().isEmpty(e)||e.forEach((e=>{(wa().isEmpty(e["label_id"])||"0"==e["label_id"])&&(e["label_id"]=1,this.saveAppointmentType(e))}))},addAppointmentType(){this.createNewAppointmentType(),mY.push("/ssa/appointment-types/type")},cancelDelete(){this.$refs["confirmDelete"].close()},cloneAppointmentType(e){this.saving=!0,this.updateCloneAppointmentType(e).then((()=>{this.saving=!1,mY.push("/ssa/appointment-types/type")}))},confirmDelete(e){this.$refs["confirmDelete"].open(),this.deletedId=e},deleteSelectedAppointmentType(){var e=this.deletedId;this.$refs["confirmDelete"].close(),this.deleteAppointmentType(e).then((()=>{})).catch((e=>{console.log(e),this.isErrorDeletingVisible=!0}))},recoverSelectedAppointmentType(e){this.recoverAppointmentType(e).then((()=>{this.selectedStatus="publish"})).catch((e=>{console.log(e),this.isErrorDeletingVisible=!0}))},editAppointmentType(e){this.saving||this.reordering||mY.push({name:"appointment-type-single",params:{id:e}})},maybeUpdateSortOrder(){if(this.editableAppointmentTypes.length<2)return;let e=this.editableAppointmentTypes.map((e=>e.display_order)),t=e.every(((e,t,i)=>e===i[0]));t&&this.editableAppointmentTypes.length&&(this.editableAppointmentTypes.forEach(((e,t)=>{this.setAppointmentTypeProperties({display_order:t,id:e.id})})),this.updateAppointmentTypes())},openBulkEdit(e){mY.push({name:"appointment-type-bulk-edit",params:{section:e}})},reorderAppointmentTypes(){this.reordering=!this.reordering},saveAppointmentTypeOrder(){this.saving=!0,this.updateAppointmentTypes().then((()=>{this.saving=!1,this.reorderAppointmentTypes()}))},maybeFetchAppointmentTypes(){if(wa().isEmpty(this.refreshMomentApptTypes))return void this.resetRefreshMomentApptTypes();let e=fe()().subtract(2,"minutes");e>this.refreshMomentApptTypes&&(this.fetchAppointmentTypes(),this.resetRefreshMomentApptTypes())},...(0,m.nv)("appointment_types",["updateAppointmentTypes","updateCloneAppointmentType","deleteAppointmentType","recoverAppointmentType","createNewAppointmentType","updateCloneAppointmentType","emptyCurrentAppointmentType","fetchAppointmentTypes","saveAppointmentType"]),...(0,m.nv)("appointments",["fetchAppointments"]),...(0,m.OI)("appointment_types",["removeAppointmentType","setAppointmentTypeProperties","setAppointmentTypesOrder","updateBulkEditing","setSelectedAppointmentTypeStatus","setSelectedAppointmentTypeLabel","clearSelectedAppointmentTypeLabel","resetRefreshMomentApptTypes"])}};const xd=(0,he.Z)(wd,[["render",gd]]);var Cd=xd;const vd={class:"appt-type-edit"},bd={class:"md-title text-break"},Bd={style:{"margin-top":"0"}},Sd={class:"button-bar"},kd={class:"md-title"},Ad={style:{color:"gray","font-size":"initial"}},Md={class:"md-subhead"},Dd={style:{cursor:"pointer"}},Td={key:0,style:{"margin-top":"18px","margin-bottom":"18px"}};function Od(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-dialog-confirm"),p=(0,o.up)("foxy-snackbar"),f=(0,o.up)("basics"),u=(0,o.up)("foxy-accordion-item"),c=(0,o.up)("availability"),h=(0,o.up)("foxy-notification"),m=(0,o.up)("staff"),g=(0,o.up)("capacity"),_=(0,o.up)("scheduling"),y=(0,o.up)("resources"),w=(0,o.up)("payments"),x=(0,o.up)("google-calendar"),C=(0,o.up)("web-meetings"),v=(0,o.up)("mailchimp"),b=(0,o.up)("webhooks"),B=(0,o.up)("customer-information"),S=(0,o.up)("notifications"),k=(0,o.up)("foxy-list-item"),A=(0,o.up)("foxy-select"),M=(0,o.up)("first-available"),D=(0,o.up)("booking-flow"),T=(0,o.up)("foxy-accordion"),O=(0,o.up)("foxy-progress-circular"),G=(0,o.up)("foxy-card-header"),E=(0,o.up)("foxy-icon"),U=(0,o.up)("foxy-icon-button"),F=(0,o.up)("foxy-card-content"),I=(0,o.up)("foxy-card"),z=(0,o.up)("revisions"),P=(0,o.up)("foxy-theme");return(0,o.wg)(),(0,o.iD)("div",vd,[(0,o.Wm)(n,{onClick:s.cancelEdit,icon:"keyboard_arrow_left",theme:"black"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",bd,(0,r.zw)(e.currentAppointmentType.title),1),(0,o.Wm)(d,{ref:"confirmLeaveDirty",title:e.translations.appointmentTypes.confirmIgnoreChangesTitle,"content-html":e.translations.appointmentTypes.confirmIgnoreChangesContent,"ok-text":e.translations.appointmentTypes.confirmIgnoreChangesOkay,"cancel-text":e.translations.appointmentTypes.confirmIgnoreChangesCancel,onConfirm:s.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),(0,o.Wm)(p,{position:"top center",modelValue:l.isShortcodeNoticeVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>l.isShortcodeNoticeVisible=e),message:e.translations.appointmentTypes.shortcodeCopied},null,8,["modelValue","message"]),(0,o.Wm)(P,{theme:e.labelInfo(e.currentAppointmentType.label_id,"color")},{default:(0,o.w5)((()=>[(0,o.Wm)(T,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.basics,message:e.translations.wizard.appointmentType.basicsMessage,index:"0",section:"basics",open:l.section,error:!l.validBasics,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{onValidationCheck:s.validateBasics},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","error","onUpdateActive"]),(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.availability,message:e.translations.wizard.appointmentType.availabilityMessage,index:"1",section:"availability",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{onValidationCheck:s.validateAvailability},null,8,["onValidationCheck"]),(0,o.Wm)(h,{icon:"help"},{default:(0,o.w5)((()=>[(0,o._)("p",Bd,(0,r.zw)(e.translations.support.availabilityDetective.intro),1),(0,o.Wm)(n,{tag:"md-button",mode:"secondary",theme:"on-primary",to:"/ssa/support/availability-detective"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.support.availabilityDetective.title),1)])),_:1})])),_:1})])),_:1},8,["label","message","open","onUpdateActive"]),e.settings.installed.staff&&e.settings.staff.enabled&&e.currentAppointmentType.hasOwnProperty("staff")&&e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.j4)(u,{key:0,label:e.translations.wizard.appointmentType.staff,message:e.translations.wizard.appointmentType.staffMessage,index:"2",section:"staff",open:l.section,error:!l.validStaff,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{onStaffRequiredChange:s.staffUpdateCapacity,onValidationCheck:s.validateStaff},null,8,["onStaffRequiredChange","onValidationCheck"])])),_:1},8,["label","message","open","error","onUpdateActive"])):(0,o.kq)("",!0),(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.capacity,message:e.translations.wizard.appointmentType.capacityMessage,index:"3",section:"capacity",open:l.section,error:!l.validCapacity,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{onValidationCheck:s.validateCapacity},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","error","onUpdateActive"]),(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.scheduling,message:e.translations.wizard.appointmentType.schedulingMessage,index:"4",section:"scheduling",open:l.section,error:!l.validScheduling,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(_,{onValidationCheck:s.validateScheduling},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","error","onUpdateActive"]),e.settings.installed.resources&&e.settings.resources.enabled?((0,o.wg)(),(0,o.j4)(u,{key:1,label:e.translations.wizard.appointmentType.resources,message:e.translations.wizard.appointmentType.resourcesMessage,index:"5",section:"resources",open:l.section,error:!l.validResources,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(y,{onValidationCheck:s.validateResources},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","error","onUpdateActive"])):(0,o.kq)("",!0),e.settings.installed.payments&&e.settings.payments.enabled&&(e.settings.paypal.enabled||e.settings.stripe.enabled)?((0,o.wg)(),(0,o.j4)(u,{key:2,label:e.translations.wizard.appointmentType.payments,message:e.translations.wizard.appointmentType.paymentsMessage,index:"6",section:"payments",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(w,{onValidationCheck:s.validatePayments},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","onUpdateActive"])):(0,o.kq)("",!0),e.settings.installed.google_calendar&&e.settings.google_calendar.enabled?((0,o.wg)(),(0,o.j4)(u,{key:3,label:e.translations.wizard.appointmentType.googleCalendar,message:e.translations.wizard.appointmentType.googleCalendarMessage,index:"7",section:"google-calendar",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(x)])),_:1},8,["label","message","open","onUpdateActive"])):(0,o.kq)("",!0),e.webMeetingsProviders.length>0?((0,o.wg)(),(0,o.j4)(u,{key:4,label:e.translations.wizard.appointmentType.webMeetings,message:e.translations.wizard.appointmentType.webMeetingsMessage,index:"8",section:"web-meetings",error:!l.validWebMeetings,open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(C,{onValidationCheck:s.validateWebMeetings},null,8,["onValidationCheck"])])),_:1},8,["label","message","error","open","onUpdateActive"])):(0,o.kq)("",!0),e.settings.installed.mailchimp&&e.settings.mailchimp.enabled?((0,o.wg)(),(0,o.j4)(u,{key:5,label:e.translations.wizard.appointmentType.mailchimp,message:e.translations.wizard.appointmentType.mailchimpMessage,index:"9",section:"mailchimp",error:!l.validMailchimp,open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(v,{modelValue:s.mailchimp,"onUpdate:modelValue":t[1]||(t[1]=e=>s.mailchimp=e),onValidationCheck:s.validateMailchimp},null,8,["modelValue","onValidationCheck"])])),_:1},8,["label","message","error","open","onUpdateActive"])):(0,o.kq)("",!0),e.settings.installed.webhooks&&e.settings.webhooks.enabled&&e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:6,label:e.translations.wizard.appointmentType.webhooks,message:e.translations.wizard.appointmentType.webhooksMessage,index:"10",section:"webhooks",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(b)])),_:1},8,["label","message","open","onUpdateActive"])):(0,o.kq)("",!0),(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.customerInfo,message:e.translations.wizard.appointmentType.customerInfoMessage,index:"11",section:"customer-information",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(B)])),_:1},8,["label","message","open","onUpdateActive"]),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:7,label:e.translations.wizard.appointmentType.notifications,message:e.translations.wizard.appointmentType.notificationsMessage,index:"12",section:"notifications",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(S,{onValidationCheck:s.validateNotifications},null,8,["onValidationCheck"])])),_:1},8,["label","message","open","onUpdateActive"])):(0,o.kq)("",!0),(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.bookingFlow,message:e.translations.wizard.appointmentType.bookingFlowMessage,error:!l.validFirstAvailable,index:"13",section:"bookingFlow",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[s.bookingFlowEnabled?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,class:"accordion-item-disabled-overlay",onClick:t[2]||(t[2]=(...e)=>s.maybeShowUpgrade&&s.maybeShowUpgrade(...e))})),(0,o.Wm)(A,{label:e.translations.appointmentTypes.bookingFlow,id:"bookingFlow",modelValue:s.flow,"onUpdate:modelValue":t[3]||(t[3]=e=>s.flow=e),disabled:!s.bookingFlowEnabled,class:"md-input-container"},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.bookingFlows,(t=>((0,o.wg)(),(0,o.j4)(k,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.bookingFlows[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"]),"first_available"==s.flow?((0,o.wg)(),(0,o.j4)(M,{key:1,onValidationCheck:s.validateFirstAvailable},null,8,["onValidationCheck"])):(0,o.kq)("",!0),(0,o.Wm)(D,{ref:"bookingFlow","booking-flow":s.flow},null,8,["booking-flow"])])),_:1},8,["label","message","error","open","onUpdateActive"])])),_:1}),(0,o._)("div",Sd,[(0,o.Wm)(n,{mode:"secondary",theme:"on-primary",onClick:s.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(n,{"data-test":"test-save-appt-type",mode:"raised",class:"md-primary",onClick:s.saveAppointmentType,disabled:!s.validFormFields||l.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"]),l.saving?((0,o.wg)(),(0,o.j4)(O,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)]),(0,o.Wm)(I,null,{default:(0,o.w5)((()=>[(0,o.Wm)(G,null,{default:(0,o.w5)((()=>[(0,o._)("div",kd,[(0,o.Uk)((0,r.zw)(e.translations.wizard.appointmentType.booking)+" ",1),(0,o._)("span",Ad,(0,r.zw)(e.translations.wizard.appointmentType.id)+": "+(0,r.zw)(i.id),1)]),(0,o._)("div",Md,(0,r.zw)(e.translations.wizard.appointmentType.bookingMessage),1)])),_:1}),(0,o.Wm)(F,null,{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.wizard.appointmentType.specialBooking),1),(0,o._)("p",Dd,[(0,o._)("code",{ref:"shortcode",onClick:t[4]||(t[4]=(...e)=>s.copyShortcode&&s.copyShortcode(...e))}," [ssa_booking type="+(0,r.zw)(e.currentAppointmentType.slug)+"] ",513),(0,o.Wm)(U,{onClick:s.copyShortcode},{default:(0,o.w5)((()=>[(0,o.Wm)(E,{icon:"file_copy"})])),_:1},8,["onClick"])])])),_:1})])),_:1}),s.displayHistory?((0,o.wg)(),(0,o.iD)("div",Td,[(0,o.Wm)(T,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{label:e.translations.wizard.appointmentType.revisions,message:e.translations.wizard.appointmentType.revisionsMessage,index:"14",section:"revisions",open:l.section,onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(z,{id:e.currentAppointmentType.id,theme:e.labelInfo(e.currentAppointmentType.label_id,"color"),type:"appointment_type"},null,8,["id","theme"])])),_:1},8,["label","message","open","onUpdateActive"])])),_:1})])):(0,o.kq)("",!0)])),_:1},8,["theme"])])}const Gd={class:"appt-type-basics"};function Ed(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield"),d=(0,o.up)("foxy-layout"),p=(0,o.up)("duration"),f=(0,o.up)("LabelsSettingsMenu"),u=(0,o.up)("foxy-list-item"),c=(0,o.up)("foxy-select");return(0,o.wg)(),(0,o.iD)("div",Gd,[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.bulkMode?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(n,{key:0,"data-test":"test-appt-type-title-input",modelValue:l.v$.title.$model,"onUpdate:modelValue":t[0]||(t[0]=e=>l.v$.title.$model=e),valid:!s.titleError&&!s.titleRegexValidatorError,label:e.translations.appointmentTypes.title,helptext:s.titleError?e.translations.appointmentTypes.titleError:s.titleRegexValidatorError?e.translations.appointmentTypes.titleRegexValidatorError:"","helptext-persistent":"","helptext-validation":"",maxlength:"255",required:""},null,8,["modelValue","valid","label","helptext"]))])),_:1}),(0,o.Wm)(d,{"md-gutter":!0,class:"field-group",style:{"align-items":"center"}},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{modelValue:l.v$.duration.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.duration.$model=e),"allow-null":i.bulkMode,required:!i.bulkMode},null,8,["modelValue","allow-null","required"])])),_:1}),(0,o.Wm)(d,{"md-flex":30,class:"label-select"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{modelValue:s.label_id,"onUpdate:modelValue":t[2]||(t[2]=e=>s.label_id=e)},null,8,["modelValue"])])),_:1})])),_:1}),s.showSlug?((0,o.wg)(),(0,o.j4)(d,{key:0,"md-gutter":!0},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{"md-flex":66,class:(0,r.C_)({"full-width":e.settings.installed.booking_flows})},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{modelValue:l.v$.slug.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>l.v$.slug.$model=e),valid:!s.slugError&&!s.slugCharactersError,label:e.translations.appointmentTypes.slug,helptext:s.slugError?e.translations.appointmentTypes.slugError:s.slugCharactersError?e.translations.appointmentTypes.slugCharactersError:"","helptext-persistent":"","helptext-validation":"",required:""},null,8,["modelValue","valid","label","helptext"])])),_:1},8,["class"]),e.settings.installed.booking_flows?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0,"md-flex":33},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{label:e.translations.appointmentTypes.bookingLayout,id:"layout",modelValue:s.layout,"onUpdate:modelValue":t[4]||(t[4]=e=>s.layout=e)},{default:(0,o.w5)((()=>[i.bulkMode?((0,o.wg)(),(0,o.j4)(u,{key:0,"data-value":"",role:"option"})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.bookingLayouts,(t=>((0,o.wg)(),(0,o.j4)(u,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.bookingLayouts[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])])),_:1}))])),_:1})):e.settings.installed.booking_flows?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:1,label:e.translations.appointmentTypes.bookingLayout,id:"layout",modelValue:s.layout,"onUpdate:modelValue":t[5]||(t[5]=e=>s.layout=e)},{default:(0,o.w5)((()=>[i.bulkMode?((0,o.wg)(),(0,o.j4)(u,{key:0,"data-value":"",role:"option"})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.bookingLayouts,(t=>((0,o.wg)(),(0,o.j4)(u,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.bookingLayouts[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])),(0,o.Wm)(d,{"md-gutter":!0},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:"instructions-field"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{modelValue:s.instructions,"onUpdate:modelValue":t[6]||(t[6]=e=>s.instructions=e),label:e.translations.appointmentTypes.instructions,helptext:e.translations.appointmentTypes.instructions_description,placeholder:e.translations.appointmentTypes.instructions_placeholder,id:"instructions"},null,8,["modelValue","label","helptext","placeholder"])])),_:1})])),_:1})])}const Ud={class:"duration-field"},Fd={class:"md-error"},Id={class:"md-helper-text"};function zd(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield"),d=(0,o.up)("foxy-layout"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-select");return(0,o.wg)(),(0,o.iD)("div",Ud,[(0,o.Wm)(d,{"md-gutter":!0,style:{"align-items":"center"}},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{type:"number",min:0,id:"duration-"+l.id,modelValue:l.displayedCount,"onUpdate:modelValue":t[0]||(t[0]=e=>l.displayedCount=e),onChange:s.queueUpdateDurationInfo,required:i.required,valid:!s.showError,label:e.translations.appointmentTypes.duration},null,8,["id","modelValue","onChange","required","valid","label"])])),_:1}),(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{class:"w-full",label:e.translations.appointmentTypes.durationType,id:"durationType-"+l.id,modelValue:l.selectedUnit,"onUpdate:modelValue":[t[1]||(t[1]=e=>l.selectedUnit=e),s.queueUpdateDurationInfo]},{default:(0,o.w5)((()=>[i.allowNull?((0,o.wg)(),(0,o.j4)(p,{key:0,"data-value":"",role:"option"})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.durationUnits,(t=>((0,o.wg)(),(0,o.j4)(p,{"data-value":t,key:t,role:"option"},{default:(0,o.w5)((()=>[1===l.displayedCount||"1"===l.displayedCount?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.time.units[t].single),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.time.units[t].plural),1)],64))])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","id","modelValue","onUpdate:modelValue"])])),_:1})])),_:1}),i.errorText?((0,o.wg)(),(0,o.j4)(d,{key:0,class:"duration-helper-text"},{default:(0,o.w5)((()=>[(0,o._)("span",Fd,(0,r.zw)(i.errorText),1)])),_:1})):i.helpText?((0,o.wg)(),(0,o.j4)(d,{key:1,class:"duration-helper-text"},{default:(0,o.w5)((()=>[(0,o._)("span",Id,(0,r.zw)(i.helpText),1)])),_:1})):(0,o.kq)("",!0)])}var Pd={name:"DurationInput",store:$J,props:["modelValue","helpText","errorText","allowNull","required"],emits:["update:modelValue"],data(){return{durationUnits:L,id:null,selectedUnit:"minutes",displayedCount:this.modelValue}},mounted:function(){this.minutes&&Number.isInteger(this.minutes)&&(this.minutes%10080===0?(this.displayedCount=this.minutes/10080,this.selectedUnit="weeks"):this.minutes%1440===0?(this.displayedCount=this.minutes/1440,this.selectedUnit="days"):this.minutes%60===0&&(this.displayedCount=this.minutes/60,this.selectedUnit="hours")),this.id=this._uid},computed:{minutes:function(){return parseInt(this.modelValue)},showError(){let e=!1;return this.allowNull||this.displayedCount?(this.required&&parseInt(this.displayedCount)<1||this.allowNull&&parseInt(this.displayedCount)<0||this.errorText)&&(e=!0):e=!0,e},...(0,m.rn)("translations",["translations"])},methods:{queueUpdateDurationInfo:function(){this.$nextTick((()=>{this.updateDurationInfo()}))},updateDurationInfo:function(){let e=this.displayedCount;switch(e||this.allowNull||(e=0),this.selectedUnit){case"hours":e=60*this.displayedCount;break;case"days":e=60*this.displayedCount*24;break;case"weeks":e=60*this.displayedCount*24*7;break}""===this.displayedCount&&this.allowNull?this.$emit("update:modelValue",""):this.$emit("update:modelValue",e.toString())}}};const Vd=(0,he.Z)(Pd,[["render",zd]]);var Wd=Vd,Rd=i(14219),Ld=i(75420);const jd=e=>((0,o.dD)("data-v-7c194993"),e=e(),(0,o.Cn)(),e),qd={id:"label-trigger-description",class:"screen-reader-text"},Nd=["aria-hidden"],$d=jd((()=>(0,o._)("div",{class:"popupOverlay"},null,-1))),Hd={key:0,class:"fieldset-wrapper"},Zd=["onClick","onKeyup"],Yd={class:"screen-reader-text"},Kd={class:"tools-wrapper"},Jd=["onClick"],Xd={class:"dialog-tools"},Qd={class:"screen-reader-text"},ep=["onClick","disabled","aria-disabled"],tp={class:"dialog-tools","data-tooltip-id":"tooltip-defaultLabelDisabled"},ip={class:"screen-reader-text"},ap={class:"menu-footer-btn"},op={key:1,class:"fieldset-wrapper"},rp={class:"md-subheading"},lp={class:"input-fields-wrapper"},sp={class:"custom-label"},np={class:"squares-wrapper"},dp=["data-tooltip-id"],pp=["onUpdate:modelValue","id","value","checked"],fp=["for"],up={class:"screen-reader-text"},cp={class:"menu-footer-btn"},hp={key:0},mp={key:1},gp={class:"screen-reader-text"};function _p(e,t,i,l,s,n){const d=(0,o.up)("foxy-textfield"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-icon-button"),u=(0,o.up)("foxy-tooltip"),c=(0,o.up)("foxy-button"),h=(0,o.up)("foxy-progress-circular"),m=(0,o.up)("foxy-dialog-title"),g=(0,o.up)("foxy-notification"),_=(0,o.up)("foxy-layout"),y=(0,o.up)("router-link"),w=(0,o.up)("foxy-dialog-content"),x=(0,o.up)("foxy-dialog-button"),C=(0,o.up)("foxy-dialog-footer"),v=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["labels-field-container",`md-theme-${n.label.color}`])},[(0,o.Wm)(d,{class:"textfield-label","leading-icon":"label",prefix:e.translations.appointmentTypes.label,"trailing-icon":s.isPopupDisplayed?"keyboard_arrow_up":"keyboard_arrow_down",type:"button",id:"label-menu-trigger","aria-haspopup":"dialog","aria-controls":"label-popup-container","aria-expanded":s.isPopupDisplayed,"aria-describedby":"label-trigger-description",modelValue:n.label.name,"onUpdate:modelValue":t[0]||(t[0]=e=>n.label.name=e),onClick:n.toggleLabelPopup},null,8,["prefix","trailing-icon","aria-expanded","modelValue","onClick"]),(0,o._)("span",qd,(0,r.zw)(e.translations.appointmentTypes.labels.popupDescription),1),s.isPopupDisplayed?((0,o.wg)(),(0,o.iD)("div",{key:0,role:"dialog","aria-hidden":!s.isPopupDisplayed,class:"label-popup",id:"label-popup-container"},[$d,s.showMenuList?((0,o.wg)(),(0,o.iD)("fieldset",Hd,[(0,o._)("div",{class:(0,r.C_)(["header-menu dynamicBgTextColor",[`md-theme-${n.label.color}`]])},[(0,o._)("legend",{tabindex:"0",ref:"selectLabelTitle",class:"md-subheading"},(0,r.zw)(e.translations.appointmentTypes.labels.selectLabel),513),(0,o.Wm)(f,{onClick:n.createLabel},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{icon:"add"})])),_:1},8,["onClick"])],2),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.apptTypeLabelsList,((t,i)=>((0,o.wg)(),(0,o.iD)("div",{class:"label-menu-item-wrapper",key:t.id+t.name},[(0,o.Wm)(p,{icon:"label",theme:t.color},null,8,["theme"]),(0,o._)("button",{class:"select-label-button",onClick:e=>n.selectThisLabel(t),onKeyup:(0,a.D2)((e=>n.selectThisLabel(t)),["enter"])},[(0,o._)("span",Yd,(0,r.zw)(e.translations.appointmentTypes.labels.selectLabel),1),(0,o.Uk)(" "+(0,r.zw)(t.name),1)],40,Zd),(0,o._)("div",Kd,[(0,o._)("button",{ref_for:!0,ref:"edit"+i.toString(),onClick:e=>n.editThisLabel(t,i)},[(0,o._)("span",Xd,[(0,o.Wm)(p,{icon:"edit"})]),(0,o._)("span",Qd,(0,r.zw)(e.translations.appointmentTypes.labels.editLabel)+" "+(0,r.zw)(t.name),1)],8,Jd),(0,o._)("button",{ref_for:!0,ref:"delete"+i.toString(),onClick:e=>n.maybeDeleteThisLabel(t,i),disabled:1==t.id,"aria-disabled":1==t.id,"aria-haspopup":"dialog","aria-controls":"confirmDeleteDialog"},[(0,o._)("span",tp,[(0,o.Wm)(p,{icon:"delete",theme:1==t.id?"grey":"deep-orange"},null,8,["theme"]),1==t.id?((0,o.wg)(),(0,o.j4)(u,{key:0,id:"tooltip-defaultLabelDisabled",position:"above"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.defaultLabelDisabled),1)])),_:1})):(0,o.kq)("",!0)]),(0,o._)("span",ip,(0,r.zw)(e.translations.appointmentTypes.labels.deleteLabel)+" "+(0,r.zw)(t.name),1)],8,ep)])])))),128)),(0,o._)("span",ap,[(0,o.Wm)(c,{ref:"createBtn",onClick:n.createLabel,mode:"raised",class:"md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.addLabel),1)])),_:1},8,["onClick"])])])):(0,o.kq)("",!0),s.showMenuList?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("fieldset",op,[(0,o._)("div",{class:(0,r.C_)(["header-menu dynamicBgTextColor",[`md-theme-${n.label.color}`]])},[(0,o._)("legend",rp,(0,r.zw)(s.isEditMode?e.translations.appointmentTypes.labels.updateLabel:e.translations.appointmentTypes.labels.createLabel),1)],2),(0,o._)("div",lp,[(0,o.Wm)(d,{ref:"inputLabelName",id:"dialog-field-label-name",modelValue:n.currentLabel.name,"onUpdate:modelValue":t[1]||(t[1]=e=>n.currentLabel.name=e),modelModifiers:{trim:!0},valid:!n.nameError,label:e.translations.appointmentTypes.labels.labelName,helptext:n.nameError?n.invalidCharacterError?e.translations.appointmentTypes.labels.invalidCharacterError+"” ,":e.translations.appointmentTypes.labels.duplicateNameError:"","helptext-validation":"",required:"",maxlength:"120"},null,8,["modelValue","valid","label","helptext"]),(0,o._)("fieldset",null,[(0,o._)("legend",sp,(0,r.zw)(e.translations.appointmentTypes.labels.chooseColor),1),(0,o._)("div",np,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.options.colors,(e=>((0,o.wg)(),(0,o.iD)("div",{class:"wrapper",key:e.value+e.text,"data-tooltip-id":"tooltip-label-color"+e.text},[(0,o.wy)((0,o._)("input",{"onUpdate:modelValue":e=>n.currentLabel.color=e,id:e.text,name:"color",type:"radio",value:e.value,checked:n.currentLabel.color===e.value},null,8,pp),[[a.G2,n.currentLabel.color]]),(0,o._)("label",{class:(0,r.C_)([`md-theme-${e.value}`]),for:e.text},[(0,o._)("span",up,(0,r.zw)(e.text),1),(0,o.Wm)(u,{id:"tooltip-label-color"+e.text,position:"above"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.text),1)])),_:2},1032,["id"])],10,fp)],8,dp)))),128))])])]),(0,o._)("div",cp,[(0,o.Wm)(c,{disabled:s.saving,ref:"cancelBtn",mode:"secondary",onClick:n.cancelUpdating},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.cancel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(c,{ref:"saveBtn",disabled:n.disableSaving,mode:"raised",class:"md-primary",onClick:n.handleSave},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.isEditMode?e.translations.appointmentTypes.actions.update:e.translations.appointmentTypes.actions.save),1)])),_:1},8,["disabled","onClick"]),s.saving?((0,o.wg)(),(0,o.j4)(h,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])])),(0,o._)("div",null,[(0,o.Wm)(v,{"aria-label":e.translations.appointmentTypes.labels.confirmDeleteAriaLabel,id:"confirmDeleteDialog",ref:"confirmDelete","foxy-click-outside-to-close":!s.saving},{default:(0,o.w5)((()=>[(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.confirmDeleteTitle),1)])),_:1}),n.affectedApptTypesOnDelete.length?((0,o.wg)(),(0,o.j4)(w,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(g,{icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.confirmDeleteWarning),1)])),_:1})])),_:1}),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o._)("ul",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.affectedApptTypesOnDelete,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id},[(0,o.Uk)((0,r.zw)(t.title)+" ",1),t.id===e.currentAppointmentType.id?((0,o.wg)(),(0,o.iD)("span",hp,(0,r.zw)(e.translations.appointmentTypes.current),1)):((0,o.wg)(),(0,o.iD)("span",mp,[(0,o.Wm)(y,{ref_for:!0,ref:"edit-link",to:"/ssa/appointment-types/type/"+t.id,onClick:e=>n.handleEditApptType(e,t)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.edit)+" ",1),(0,o._)("span",gp,(0,r.zw)(t.title),1)])),_:2},1032,["to","onClick"])]))])))),128))])])),_:1})])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o.Wm)(x,{disabled:s.saving,action:"dismiss",class:"md-raised",ref:"confirmDeleteCancel",onClick:n.cancelDeleting},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.keepLabel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(x,{disabled:s.saving,action:"accept",class:"md-raised md-primary",ref:"confirmDeleteDelete",onClick:n.confirmDeleting},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.labels.confirmDelete),1)])),_:1},8,["disabled","onClick"]),s.saving?((0,o.wg)(),(0,o.j4)(h,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])),_:1})])),_:1},8,["aria-label","foxy-click-outside-to-close"])])],8,Nd)):(0,o.kq)("",!0)],2)}var yp={name:"LabelsSettingsMenu",props:["modelValue"],emits:["update:modelValue"],data(){return{options:X,saving:!1,isPopupDisplayed:!1,isEditMode:!1,showMenuList:!0,storedFocusIndex:null,isDeletePopupOpen:!1}},computed:{label(){let e=this.apptTypeLabels.find((e=>e.id==this.modelValue));return e||this.defaultLabel},currentLabel:{get(){return this.currentApptTypeLabel},set(e){this.setCurrentLabel(e)}},labelToDelete:{get(){return this.labelToDelete},set(e){this.setLabelToDelete(e)}},apptTypeLabelsList:{get(){return this.appointmentTypeLabels},set(e){this.setApptTypeLabels(e)}},firstActiveElement(){if(this.isPopupDisplayed){if(this.isDeletePopupOpen)return this.editApptTypeLinkRef?this.editApptTypeLinkRef.$el:this.$refs["confirmDeleteCancel"].$el;if(this.showMenuList&&this.$refs.firstAddBtn)return this.$refs.firstAddBtn.$el;if(!this.showMenuList&&this.$refs.inputLabelName)return this.$refs.inputLabelName.$el}return null},lastActiveElement(){if(this.isPopupDisplayed){if(this.isDeletePopupOpen)return this.$refs["confirmDeleteDelete"].$el;if(this.$refs.createBtn&&this.showMenuList)return this.$refs.createBtn.$el;if(this.$refs.saveBtn&&!this.showMenuList)return this.$refs.saveBtn._props.disabled?this.$refs.cancelBtn.$el:this.$refs.saveBtn.$el}return null},editApptTypeLinkRef(){return this.isDeletePopupOpen&&this.$refs["edit-link"]?this.$refs["edit-link"][0]:null},storedActiveElement(){return this.$refs[this.storedFocusIndex]?this.$refs[this.storedFocusIndex][0]:null},affectedApptTypesOnDelete(){return this.affectedApptTypesOnLabelDelete&&this.labelToDelete?this.affectedApptTypesOnLabelDelete.filter((e=>"publish"===e.status)):[]},disableSaving(){return""===this.currentLabel?.name||this.saving||this.nameError},nameError(){return this.invalidCharacterError||this.duplicateNameError},invalidCharacterError(){if(0===Object.keys(this.currentLabel).length)return!1;var e=/(<[^>]+>)|"|,/gi;return!!this.currentLabel.name.match(e)},duplicateNameError(){return 0!==Object.keys(this.currentLabel).length&&!!this.apptTypeLabels.find((e=>e.name.toLowerCase()===this.currentLabel?.name.toLowerCase()&&e.id!==this.currentLabel?.id))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("labels",["apptTypeLabels","currentApptTypeLabel","labelToDelete"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("appointment_types",["affectedApptTypesOnLabelDelete"]),...(0,m.Se)("labels",["appointmentTypeLabels","defaultLabel"])},mounted(){document.addEventListener("click",this.OverlayClickHandler),document.addEventListener("keydown",this.keyDownHandler)},beforeUnmount(){document.removeEventListener("click",this.OverlayClickHandler),document.removeEventListener("keydown",this.keyDownHandler)},methods:{keyDownHandler(e){this.isPopupDisplayed&&!this.saving&&("Escape"!==e.key||this.$refs["confirmDelete"].active?9===e.keyCode&&(e.shiftKey?document.activeElement===this.firstActiveElement&&(e.preventDefault(),this.lastActiveElement.focus()):document.activeElement===this.lastActiveElement&&(e.preventDefault(),this.firstActiveElement?.focus())):this.closeLabelPopup())},OverlayClickHandler(e){this.saving||this.isPopupDisplayed&&e.target.matches(".popupOverlay")&&this.closeLabelPopup()},closeLabelPopup(){this.isPopupDisplayed=!1},toggleLabelPopup(){this.isPopupDisplayed=!this.isPopupDisplayed,this.showMenuList=!0,this.$nextTick((()=>{this.isPopupDisplayed&&this.$refs.selectLabelTitle.focus()}))},editThisLabel(e,t){this.storedFocusIndex="edit"+t.toString(),this.showMenuList=!1,this.isEditMode=!0,this.setCurrentLabel(e)},maybeDeleteThisLabel(e,t){e.id!=this.defaultLabel.id&&1!==this.apptTypeLabelsList.length&&(this.storedFocusIndex="delete"+t.toString(),this.setLabelToDelete(e),this.$refs["confirmDelete"].open(),this.isDeletePopupOpen=!0)},cancelDeleting(e){e.preventDefault(),this.$refs["confirmDelete"].close(),this.isDeletePopupOpen=!1,this.restoreFocus(),this.clearLabelToDelete()},confirmDeleting(e){e.preventDefault(),this.saving=!0,this.maybeInvokeEmit(),this.maybeResetApptTypesLabelToDefault(),this.deleteAppointmentTypeLabel().then((()=>{this.$refs["confirmDelete"].close(),this.isDeletePopupOpen=!1,this.restoreFocus(),this.saving=!1,this.clearLabelToDelete()}))},maybeInvokeEmit(){this.label.id===this.labelToDelete.id&&this.$emit("update:modelValue",this.defaultLabel.id)},selectThisLabel(e){this.$emit("update:modelValue",e.id),this.isPopupDisplayed=!1},handleSave(e){this.nameError||(e.preventDefault(),this.saving=!0,this.isEditMode?this.saveLabel().then((()=>{this.isEditMode=!1,this.showMenuList=!0,this.restoreFocus(),this.saving=!1})):this.saveNewLabel().then((e=>{this.showMenuList=!0,this.restoreFocus(),this.$emit("update:modelValue",e.id),this.saving=!1})))},cancelUpdating(e){e.preventDefault(),this.showMenuList=!0,this.isEditMode=!1,this.resetCurrentLabel(),this.restoreFocus()},createLabel(){this.isEditMode=!1,this.showMenuList=!1,this.resetCurrentLabel()},restoreFocus(){this.showMenuList&&this.$nextTick((()=>{this.storedActiveElement?(this.storedActiveElement.focus(),this.storedFocusIndex=null):this.firstActiveElement?.focus()}))},handleEditApptType(e,t){this.setCurrentAppointmentType(wa().cloneDeep(t)),this.cancelDeleting(e)},...(0,m.nv)("labels",["saveNewLabel","saveLabel","deleteAppointmentTypeLabel"]),...(0,m.nv)("appointment_types",["maybeResetApptTypesLabelToDefault"]),...(0,m.OI)("labels",["setApptTypeLabels","setCurrentLabel","resetCurrentLabel","setLabelToDelete","clearLabelToDelete"]),...(0,m.OI)("appointment_types",["setCurrentAppointmentType"])}};const wp=(0,he.Z)(yp,[["render",_p],["__scopeId","data-v-7c194993"]]);var xp=wp;const Cp=e=>/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e),vp=e=>!/^-+$/.test(e);var bp={name:"AppointmentTypeBasics",components:{duration:Wd,LabelsSettingsMenu:xp},store:$J,props:{bulkMode:{default:!1,type:Boolean}},data(){return{v$:(0,Rd.Xw)(),options:X}},validations(){const e=this.bulkMode,t=this.showSlug;return{duration:{required:(0,Ld.CF)((()=>!e)),minValue:(0,Ld.uv)(1)},slug:{required:(0,Ld.CF)((()=>t)),regexValidator:Cp},title:{required:(0,Ld.CF)((()=>!e)),regexValidator:vp}}},computed:{titleError(){return!this.bulkMode&&(this.v$.title.$invalid&&this.v$.title.required.$invalid)},titleRegexValidatorError(){return!this.bulkMode&&(this.v$.title.$invalid&&this.v$.title.regexValidator.$invalid)},slugError(){return!this.bulkMode&&(this.v$.slug.$invalid&&this.v$.slug.required)},slugCharactersError(){return!this.bulkMode&&(this.v$.slug.$invalid&&!this.v$.slug.regexValidator.$invalid)},showSlug(){return!this.bulkMode&&this.currentAppointmentType&&Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"slug")},duration:{get(){return this.currentAppointmentType?this.currentAppointmentType.duration:0},set(e){this.updateCurrentAppointmentType({key:"duration",value:e}),this.validationCheck()}},title:{get(){return this.currentAppointmentType?this.currentAppointmentType.title:""},set(e){this.updateCurrentAppointmentType({key:"title",value:e}),this.validationCheck()}},label_id:{get(){return this.currentAppointmentType.label_id?this.currentAppointmentType.label_id:"1"},set(e){this.updateCurrentAppointmentType({key:"label_id",value:e})}},slug:{get(){return this.currentAppointmentType.slug},set(e){this.updateCurrentAppointmentType({key:"slug",value:e}),this.v$.slug.$touch(),this.validationCheck()}},layout:{get(){return this.currentAppointmentType.booking_layout?this.currentAppointmentType.booking_layout:"week"},set(e){this.updateCurrentAppointmentType({key:"booking_layout",value:e})}},instructions:{get(){return this.currentAppointmentType?this.currentAppointmentType.instructions:""},set(e){this.updateCurrentAppointmentType({key:"instructions",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"])},methods:{validationCheck(){var e=this.v$.duration.required?!this.v$.duration.$invalid:this.v$.duration.minValue;this.$emit("validationCheck",!this.titleError&&!this.titleRegexValidatorError&&!this.slugError&&!this.slugCharactersError&&e)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const Bp=(0,he.Z)(bp,[["render",Ed]]);var Sp=Bp;const kp={class:"md-fieldset field-wrapper"},Ap={id:"availability-type-help","aria-live":"polite"},Mp={class:"md-fieldset field-wrapper"},Dp={class:"subsection-title"},Tp={class:"subsection-description"};function Op(e,t,i,a,l,s){const n=(0,o.up)("foxy-radio"),d=(0,o.up)("availability-picker"),p=(0,o.up)("start-time-picker"),f=(0,o.up)("date-time-picker");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["appt-type-availability","md-theme-"+s.appointmentTypeLabel])},[(0,o._)("fieldset",kp,[(0,o._)("legend",null,(0,r.zw)(e.translations.appointmentTypes.availabilityType),1),(0,o.Wm)(n,{modelValue:s.availability_type,"onUpdate:modelValue":t[0]||(t[0]=e=>s.availability_type=e),label:e.translations.appointmentTypes.availabilityBlocks,name:"availability_type",value:"available_blocks",id:"availability_type_blocks","aria-described-by":"availability-type-help"},null,8,["modelValue","label"]),(0,o.Wm)(n,{modelValue:s.availability_type,"onUpdate:modelValue":t[1]||(t[1]=e=>s.availability_type=e),label:e.translations.appointmentTypes.availabilityStartTimes,name:"availability_type",value:"start_times",id:"availability_type_times","aria-described-by":"availability-type-help"},null,8,["modelValue","label"]),(0,o._)("div",Ap,[(0,o._)("p",null,["start_times"===s.availability_type?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.availabilityStartTimesHelp),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.availabilityBlocksHelp),1)],64))])])]),(0,o._)("fieldset",Mp,[(0,o._)("legend",null,(0,r.zw)(e.translations.appointmentTypes.availabilityIncrement),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.availabilityTimeIncrements,(i=>((0,o.wg)(),(0,o.j4)(n,{key:i,modelValue:s.increment,"onUpdate:modelValue":t[2]||(t[2]=e=>s.increment=e),label:`${i} ${e.translations.time.units.minutes.plural}`,name:"increment",value:i,id:"increment-"+i,onChange:s.updateAvailability},null,8,["modelValue","label","value","id","onChange"])))),128))]),"available_blocks"===s.availability_type?((0,o.wg)(),(0,o.j4)(d,{key:0,increment:s.increment,ref:"availability-field",modelValue:s.availability,"onUpdate:modelValue":t[3]||(t[3]=e=>s.availability=e)},null,8,["increment","modelValue"])):((0,o.wg)(),(0,o.j4)(p,{key:1,increment:s.increment,ref:"start-time-field",modelValue:s.availability,"onUpdate:modelValue":t[4]||(t[4]=e=>s.availability=e)},null,8,["increment","modelValue"])),e.advancedSchedulingModule.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o._)("h3",Dp,(0,r.zw)(e.translations.appointmentTypes.availability_window),1),(0,o._)("p",Tp,(0,r.zw)(e.translations.appointmentTypes.availability_window_help),1),(0,o.Wm)(f,{label:e.translations.appointmentTypes.availability_start_date,"is-valid":l.validAvailabilityWindow,"error-text":e.translations.settings.advanced_scheduling.availability_window_error,modelValue:s.availability_start_date,"onUpdate:modelValue":[t[5]||(t[5]=e=>s.availability_start_date=e),s.validateAvailabilityWindow]},null,8,["label","is-valid","error-text","modelValue","onUpdate:modelValue"]),(0,o.Wm)(f,{label:e.translations.appointmentTypes.availability_end_date,"is-valid":l.validAvailabilityWindow,"error-text":e.translations.settings.advanced_scheduling.availability_window_error,modelValue:s.availability_end_date,"onUpdate:modelValue":[t[6]||(t[6]=e=>s.availability_end_date=e),s.validateAvailabilityWindow]},null,8,["label","is-valid","error-text","modelValue","onUpdate:modelValue"])],64)):(0,o.kq)("",!0)],2)}const Gp={class:"availability-table"},Ep={key:0},Up={key:1};function Fp(e,t,i,l,s,n){const d=(0,o.up)("foxy-icon"),p=(0,o.up)("foxy-icon-button"),f=(0,o.up)("cell");return(0,o.wg)(),(0,o.iD)("div",Gp,[(0,o._)("table",{class:(0,r.C_)(n.classes)},[(0,o._)("thead",null,[(0,o._)("tr",null,[(0,o._)("th",null,[n.canAddTimeBefore?((0,o.wg)(),(0,o.j4)(p,{key:0,onClick:n.addTimeBefore,mode:"raised",size:"small",class:"addTimeBeforeBtn"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"add"})])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.weekdays,((e,t)=>((0,o.wg)(),(0,o.iD)("th",{key:`thead-${e}`},(0,r.zw)(n.weekdaysDisplay[t]),1)))),128))])]),(0,o._)("tfoot",null,[(0,o._)("tr",null,[(0,o._)("th",null,[n.canAddTimeAfter?((0,o.wg)(),(0,o.j4)(p,{key:0,onClick:n.addTimeAfter,class:"addTimeAfterBtn",size:"small",mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"add"})])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.weekdays,(e=>((0,o.wg)(),(0,o.iD)("td",{key:`tfoot-${e}`},"   ")))),128))])]),(0,o._)("tbody",{onMousedown:t[0]||(t[0]=(0,a.iM)((e=>n.mousedown(e)),["prevent"])),onMouseup:t[1]||(t[1]=(0,a.iM)((e=>n.mouseup(e)),["prevent"])),onMouseover:t[2]||(t[2]=(0,a.iM)((e=>n.mouseover(e)),["prevent"]))},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.times,(e=>((0,o.wg)(),(0,o.iD)("tr",{class:(0,r.C_)({hour:"00"===e.timeMinutes}),key:e.timeCalc},["00"!==e.timeMinutes?((0,o.wg)(),(0,o.iD)("th",Ep,"   ")):((0,o.wg)(),(0,o.iD)("th",Up,(0,r.zw)(e.timeString),1)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.weekdays,(t=>((0,o.wg)(),(0,o.j4)(f,{day:t,time:e.timeCalc,checked:n.checked[t],"onUpdate:checked":e=>n.checked[t]=e,key:t+" - "+e.timeCalc,onUpdate:n.updateAvailability},null,8,["day","time","checked","onUpdate:checked","onUpdate"])))),128))],2)))),128))],32)],2)])}const Ip=["id","name","value","checked"],zp=["for","title"];function Pp(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("td",{class:(0,r.C_)({selected:s.isSelected})},[(0,o._)("input",{id:s.id,type:"checkbox",name:i.day,value:i.time,checked:s.isSelected,onChange:t[0]||(t[0]=(...e)=>s.changeCheck&&s.changeCheck(...e))},null,40,Ip),(0,o._)("label",{for:s.id,title:i.time},(0,r.zw)(i.day)+" "+(0,r.zw)(i.time),9,zp)],2)}var Vp={name:"AvailabilityPickerCell",props:{day:{type:String,required:!0},time:{type:String,required:!0},checked:{type:Array,required:!0}},computed:{id:function(){var e=this.day.toLowerCase(),t=e+this.time;return t.replace(/[^a-z0-9\-_:\]|^[^a-z]+/gi,"")},isSelected:function(){var e=!1,t=this.checked,i=t.indexOf(this.time);return i>=0&&(e=!0),e}},methods:{changeCheck:function(){this.$emit("update")}}};const Wp=(0,he.Z)(Vp,[["render",Pp]]);var Rp=Wp,Lp={name:"AvailabilityTable",store:$J,components:{cell:Rp},props:{modelValue:{type:Object,required:!0},increment:{type:Number,default:null}},emits:["update:modelValue"],data(){return{isMouseDown:!1,erasing:!1,drawing:!1,startRowIndex:null,startCellIndex:null,timeStart:"08:00",timeEnd:"19:00"}},computed:{classes:function(){return{availability:!0,bordered:!0,erasing:this.erasing,drawing:this.drawing}},times:function(){var e=[],t=this.timeStringToMoment(this.timeStart),i=this.timeStringToMoment(this.timeEnd),a=this.increment||60,o=t.clone().subtract(a,"minutes"),r=i.clone();while(o.add(a,"minutes").diff(r)<0)e.push({timeString:o.clone().format(this.settings.global.time_format_moment),timeMinutes:o.clone().locale("en").format("mm"),timeCalc:o.clone().locale("en").format("HH:mm")});return e},checked(){let e={};return this.weekdays.map((t=>{let i=[],a=this.modelValue[t],o=this.increment||60;a&&!wa().isEmpty(a)&&a.map((e=>{let t=fe()(e.time_start,"HH:mm").locale("en"),a=t.clone().subtract(o,"minutes");if(Object.prototype.hasOwnProperty.call(e,"time_end")){let t=fe()(e.time_end,"HH:mm").locale("en");while(a.add(o,"minutes").diff(t)<0)i.push(a.clone().format("HH:mm"))}else i.push(t.clone().format("HH:mm"))})),e[t]=i})),e},weekdays:function(){return this.getWeekdays(this.settings.global.start_of_week)},weekdaysDisplay:function(){fe().locale(this.settings.global.locale);var e=this.settings.global.start_of_week,t=fe().weekdays(!1);if(e>0){var i=t.splice(0,e);t=[...t,...i]}return t},canAddTimeBefore:function(){var e=this.timeStringToMoment(this.timeStart);return!e.isSame(fe()().startOf("day"))},canAddTimeAfter:function(){var e=this.timeStringToMoment(this.timeEnd).add(59,"minute");return!e.isAfter(fe()().endOf("day"))},...(0,m.Se)({getWeekdays:"weekdays"}),...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},beforeMount:function(){this.calculateStartAndEndTimes(),document.addEventListener("mouseup",this.mouseup)},beforeUnmount(){document.removeEventListener("mouseup",this.mouseup)},mounted(){this.updateAvailability()},methods:{calculateStartAndEndTimes:function(){let e=[];for(let l in this.modelValue)Array.prototype.push.apply(e,this.modelValue[l]);if(0===e.length)return;let t=e.map((e=>parseInt(e.time_start.split(":")[0]))),i=e.filter((e=>Object.prototype.hasOwnProperty.call(e,"time_end"))),a=i.map((e=>parseInt(e.time_end.split(":")[0]))),o=t.reduce(((e,t)=>Math.min(e,t))),r=a.length?a.reduce(((e,t)=>Math.max(e,t))):t.reduce(((e,t)=>Math.max(e,t)));this.timeStart=o>=1?(o-1).toString()+":00":o.toString()+":00",this.timeEnd=r<=23?(r+1).toString()+":00":r.toString()+":00"},addTimeBefore:function(){var e=this.timeStringToMoment(this.timeStart).subtract(1,"hour");this.timeStart=e.format("HH:mm")},addTimeAfter:function(){var e=this.timeStringToMoment(this.timeEnd).add(1,"hour");e.isAfter(fe()().endOf("day"))&&e.subtract(1,"minute"),this.timeEnd=e.format("HH:mm")},timeStringToMoment:function(e){var t=fe()(e,["H:mm:ss","HH:mm:ss","H:mm","HH:mm","h:mma","hh:mma","h:mmA","hh:mmA","h:mm","hh:mm"]);return t},updateAvailability:wa().debounce((function(){var e=this.increment||60,t={};this.weekdays.map((i=>{var a=[].slice.call(document.getElementsByName(i)),o=!1,r=0,l=[];a.map(((t,i)=>{if(t.checked&&a.length===i+1){o||l.push({time_start:fe()(t.value,this.settings.global.time_format_moment).locale("en").format("HH:mm:ss")}),o=!1;let i=l[r],a=fe()(t.value,this.settings.global.time_format_moment).locale("en").add(e,"minutes");a.isAfter(fe()().locale("en").endOf("day"))?i.time_end="24:00:00":i.time_end=a.format("HH:mm:ss"),r++}else if(t.checked&&!o){o=!0;var s={time_start:fe()(t.value,this.settings.global.time_format_moment).locale("en").format("HH:mm:ss")};l.push(s)}else if(!t.checked&&o){o=!1;let e=l[r];e.time_end=fe()(t.value,this.settings.global.time_format_moment).locale("en").format("HH:mm:ss"),r++}})),t[i]=l})),this.$emit("update:modelValue",t)}),300),toggleCheck:function(e,t){var i=e.querySelector('input[type="checkbox"]');t&&(this.erasing?i.checked=!1:this.drawing&&(i.checked=!0));var a=document.createEvent("HTMLEvents");a.initEvent("change",!1,!0),i.dispatchEvent(a)},getCellIndex:function(e){for(var t=e.parentNode.childNodes,i=0,a=0;a[(0,o.Wm)(n,{icon:"add"})])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.weekdays,((i,a)=>((0,o.wg)(),(0,o.iD)("th",{key:a,scope:"col"},[(0,o._)("button",{"aria-label":e.translations.appointmentTypes.availabilityToggle+" "+s.weekdaysDisplay[a],onClick:t[0]||(t[0]=(...e)=>s.toggleCol&&s.toggleCol(...e))},(0,r.zw)(s.weekdaysDisplay[a]),9,Hp)])))),128))])]),(0,o._)("tfoot",null,[(0,o._)("tr",null,[(0,o._)("th",null,[s.canAddTimeAfter?((0,o.wg)(),(0,o.j4)(d,{key:0,onClick:s.addTimeAfter,class:"addTimeAfterBtn",size:"small",mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"add"})])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.weekdays,(e=>((0,o.wg)(),(0,o.iD)("td",{key:e},"   ")))),128))])]),(0,o._)("tbody",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.times,(i=>((0,o.wg)(),(0,o.iD)("tr",{key:i.timeCalc,class:(0,r.C_)({hour:"00"===i.timeMinutes})},[(0,o._)("th",Zp,[(0,o._)("button",{"aria-label":e.translations.appointmentTypes.availabilityToggle+" "+i.timeString,onClick:t[1]||(t[1]=(...e)=>s.toggleRow&&s.toggleRow(...e))},(0,r.zw)(i.timeString),9,Yp)]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.weekdays,(e=>((0,o.wg)(),(0,o.j4)(p,{day:e,time:i.timeCalc,checked:s.checked[e],"onUpdate:checked":t=>s.checked[e]=t,key:e+" - "+i.timeCalc,onUpdate:s.updateAvailability},null,8,["day","time","checked","onUpdate:checked","onUpdate"])))),128))],2)))),128))])])])}const Jp=["id","name","value","checked"],Xp=["for","title"];function Qp(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("td",null,[(0,o._)("input",{type:"checkbox",id:s.id,class:"single-time",name:i.day,value:i.time,checked:s.isSelected,onChange:t[0]||(t[0]=(...e)=>s.changeCheck&&s.changeCheck(...e))},null,40,Jp),(0,o._)("label",{for:s.id,title:i.time},(0,r.zw)(i.day)+" "+(0,r.zw)(i.time),9,Xp)])}var ef={name:"StartTimePickerCell",props:{day:{type:String,required:!0},time:{type:String,required:!0},checked:{type:Array,required:!0}},computed:{id(){let e=this.day.toLowerCase(),t=e+this.time;return t.replace(/[^a-z0-9\-_:\]|^[^a-z]+/gi,"")},isSelected(){let e=this.checked,t=e.indexOf(this.time);return t>=0}},methods:{changeCheck(){this.$emit("update")}}};const tf=(0,he.Z)(ef,[["render",Qp]]);var af=tf,of={name:"StartTimes",components:{cell:af},props:["modelValue","increment"],emits:["update:modelValue"],data(){return{isShiftPressed:!1,startCellIndex:null,startCellState:!1,startRowIndex:null,table:null,timeStart:"9:00",timeEnd:"18:00"}},beforeMount(){this.calculateStartAndEndTimes()},mounted(){this.updateAvailability(),this.table=document.querySelector(".start-times"),this.table.addEventListener("change",this.toggleRange),document.addEventListener("keyup",this.detectShift),document.addEventListener("keydown",this.detectShift)},beforeUnmount(){this.table.removeEventListener("change",this.toggleRange),document.removeEventListener("keyup",this.detectShift),document.removeEventListener("keydown",this.detectShift)},computed:{canAddTimeAfter(){let e=this.timeStringToMoment(this.timeEnd).add(59,"minute");return!e.isAfter(fe()().endOf("day"))},canAddTimeBefore(){let e=this.timeStringToMoment(this.timeStart);return!e.isSame(fe()().startOf("day"))},checked(){let e={};return this.weekdays.map((t=>{let i=[],a=this.modelValue[t],o=this.increment||60;a&&!wa().isEmpty(a)&&a.map((e=>{let t=fe()(e.time_start,"H:mm"),a=t.clone().subtract(o,"minutes");if(Object.prototype.hasOwnProperty.call(e,"time_end")){let t=fe()(e.time_end,"H:mm");while(a.add(o,"minutes").diff(t)<0)i.push(a.clone().format("H:mm"))}else i.push(t.clone().format("H:mm"))})),e[t]=i})),e},times(){let e=[],t=this.timeStringToMoment(this.timeStart),i=this.timeStringToMoment(this.timeEnd),a=this.increment||60,o=t.clone().subtract(a,"minutes"),r=i.clone();while(o.add(a,"minutes").diff(r)<0)e.push({timeString:o.clone().format(this.settings.global.time_format_moment),timeMinutes:o.clone().format("mm"),timeCalc:o.clone().format("H:mm")});return e},weekdays(){return this.getWeekdays(this.settings.global.start_of_week)},weekdaysDisplay(){fe().locale(this.settings.global.locale);let e=this.settings.global.start_of_week,t=fe().weekdays(!1);if(e>0){let i=t.splice(0,e);t=[...t,...i]}return t},...(0,m.Se)({getWeekdays:"weekdays"}),...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{addTimeAfter(){let e=this.timeStringToMoment(this.timeEnd).add(1,"hour");e.isAfter(fe()().endOf("day"))&&e.subtract(1,"minute"),this.timeEnd=e.format("H:mm")},addTimeBefore(){let e=this.timeStringToMoment(this.timeStart).subtract(1,"hour");this.timeStart=e.format("H:mm")},calculateStartAndEndTimes(){let e=[];for(let l in this.modelValue)Array.prototype.push.apply(e,this.modelValue[l]);if(0===e.length)return;let t=e.map((e=>parseInt(e.time_start.split(":")[0]))),i=e.filter((e=>Object.prototype.hasOwnProperty.call(e,"time_end"))),a=i.map((e=>parseInt(e.time_end.split(":")[0]))),o=t.reduce(((e,t)=>Math.min(e,t))),r=a.length?a.reduce(((e,t)=>Math.max(e,t))):t.reduce(((e,t)=>Math.max(e,t)));this.timeStart=o>=1?(o-1).toString()+":00":o.toString()+":00",this.timeEnd=r<=23?(r+1).toString()+":00":r.toString()+":00"},detectShift(e){this.isShiftPressed=e.shiftKey},getCellIndex:function(e){for(var t=e.parentNode.childNodes,i=0,a=0;a=0&&this.startRowIndex>=0){let i=this.getCellIndex(t),a=this.getRowIndex(t),o=a{let i=[].slice.call(document.getElementsByName(t)),a=[];i.map((e=>{e.checked&&a.push({time_start:fe()(e.value,this.settings.global.time_format_moment).format("HH:mm:ss")})})),e[t]=a})),this.$emit("update:modelValue",e)}),300)}};const rf=(0,he.Z)(of,[["render",Kp]]);var lf=rf,sf={name:"AppointmentTypeAvailability",components:{AvailabilityPicker:qp,StartTimePicker:lf,DateTimePicker:ar},data(){return{options:X,validAvailabilityWindow:!0}},computed:{availability_end_date:{get(){return this.currentAppointmentType?this.currentAppointmentType.availability_end_date:null},set(e){this.updateCurrentAppointmentType({key:"availability_end_date",value:e})}},availability_start_date:{get(){return this.currentAppointmentType?this.currentAppointmentType.availability_start_date:null},set(e){this.updateCurrentAppointmentType({key:"availability_start_date",value:e})}},availability_type:{get(){return this.currentAppointmentType.availability_type},set(e){this.updateCurrentAppointmentType({key:"availability_type",value:e})}},increment:{get(){return parseInt(this.currentAppointmentType.availability_increment,10)},set(e){const t=parseInt(e,10);this.updateCurrentAppointmentType({key:"availability_increment",value:t})}},availability:{get(){return this.currentAppointmentType.availability},set(e){this.updateCurrentAppointmentType({key:"availability",value:e})}},appointmentTypeLabel(){return this.labelInfo(this.currentAppointmentType.label_id,"color")||"light-green"},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("advanced_scheduling",["advancedSchedulingModule"]),...(0,m.Se)("appointment_types",["labelInfo"])},methods:{updateAvailability(){"available_blocks"===this.availability_type?this.$refs["availability-field"].updateAvailability():this.$refs["start-time-field"].updateAvailability()},validateAvailabilityWindow(){let e=fe().utc(this.availability_start_date,this.timestampFormat).locale("en"),t=fe().utc(this.availability_end_date,this.timestampFormat).locale("en");e.isValid()&&t.isValid()?this.validAvailabilityWindow=e.isBefore(t):this.validAvailabilityWindow=!0,this.$emit("validationCheck",this.validAvailabilityWindow)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const nf=(0,he.Z)(sf,[["render",Op]]);var df=nf;const pf={class:"appt-type-scheduling"},ff={class:"subsection-title"},uf={class:"subsection-description"},cf={key:0},hf={key:1},mf={class:"appointment-scheduling-section"},gf={class:"appointment-scheduling-section-header"},_f={class:"subsection-title"},yf={class:"subsection-description"},wf={class:"appointment-duration-fields"},xf={class:"inline-label"},Cf={class:"md-subheading"},vf={class:"inline-label"},bf={class:"md-subheading"},Bf={class:"appointment-scheduling-section"},Sf={class:"appointment-scheduling-section-header"},kf={class:"subsection-title"},Af={class:"subsection-description"},Mf={class:"appointment-duration-fields"},Df={class:"inline-label"},Tf={class:"md-subheading"},Of={class:"appointment-scheduling-section"},Gf={class:"appointment-scheduling-section-header"},Ef={class:"subsection-title"},Uf={class:"subsection-description"},Ff={class:"appointment-duration-fields"},If={class:"inline-label"},zf={class:"md-subheading"},Pf={class:"appointment-scheduling-section booking-section"},Vf={class:"appointment-scheduling-section-header"},Wf={class:"subsection-title"},Rf={class:"subsection-description"},Lf={class:"subsection-title"},jf={class:"subsection-description"};function qf(e,t,i,a,l,s){const n=(0,o.up)("foxy-radio"),d=(0,o.up)("router-link"),p=(0,o.up)("duration"),f=(0,o.up)("foxy-layout"),u=(0,o.up)("date-time-picker"),c=(0,o.up)("foxy-checkbox"),h=(0,o.up)("foxy-textfield");return(0,o.wg)(),(0,o.iD)("div",pf,[(0,o._)("h3",ff,(0,r.zw)(e.translations.appointmentTypes.timezoneStyle),1),(0,o._)("p",uf,(0,r.zw)(e.translations.appointmentTypes.timezoneStyleHelp),1),(0,o._)("div",null,[(0,o.Wm)(n,{modelValue:s.timezone_style,"onUpdate:modelValue":t[0]||(t[0]=e=>s.timezone_style=e),"data-test":"test-tzstyle-localized",id:"tzstyle-localized",name:"timezone_style",value:"localized",label:e.translations.appointmentTypes.timezoneStyleLocalized},null,8,["modelValue","label"]),(0,o.Wm)(n,{modelValue:s.timezone_style,"onUpdate:modelValue":t[1]||(t[1]=e=>s.timezone_style=e),"data-test":"test-tzstyle-locked",id:"tzstyle-locked",name:"timezone_style",value:"locked",label:e.translations.appointmentTypes.timezoneStyleLocked},null,8,["modelValue","label"])]),"locked"===s.timezone_style?((0,o.wg)(),(0,o.iD)("div",cf,[(0,o._)("p",null,(0,r.zw)(e.translations.appointmentTypes.timezoneStyleLockedHelp),1),(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.timezoneStyleYourTimezone)+" ",1),(0,o._)("strong",null,(0,r.zw)(e.formatTimezone(e.settings.global.timezone_string))+" ",1),(0,o.Wm)(d,{to:"/ssa/settings/general"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit),1)])),_:1})])])):((0,o.wg)(),(0,o.iD)("p",hf,(0,r.zw)(e.translations.appointmentTypes.timezoneStyleLocalizedHelp),1)),(0,o._)("div",mf,[(0,o._)("div",gf,[(0,o._)("h3",_f,(0,r.zw)(e.translations.appointmentTypes.buffer),1),(0,o._)("p",yf,(0,r.zw)(e.translations.appointmentTypes.buffer_help),1)]),(0,o._)("div",wf,[(0,o.Wm)(f,{class:"complex-field"},{default:(0,o.w5)((()=>[(0,o._)("div",xf,[(0,o._)("p",Cf,(0,r.zw)(e.translations.appointmentTypes.scheduling.before),1)]),(0,o.Wm)(p,{modelValue:l.v$.buffer_before.$model,"onUpdate:modelValue":t[2]||(t[2]=e=>l.v$.buffer_before.$model=e),"allow-null":!0,"help-text":e.translations.appointmentTypes.buffer_before},null,8,["modelValue","help-text"])])),_:1}),(0,o.Wm)(f,{class:"complex-field"},{default:(0,o.w5)((()=>[(0,o._)("div",vf,[(0,o._)("p",bf,(0,r.zw)(e.translations.appointmentTypes.scheduling.after),1)]),(0,o.Wm)(p,{modelValue:l.v$.buffer_after.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>l.v$.buffer_after.$model=e),"allow-null":!0,"help-text":e.translations.appointmentTypes.buffer_after},null,8,["modelValue","help-text"])])),_:1})])]),(0,o._)("div",Bf,[(0,o._)("div",Sf,[(0,o._)("h3",kf,(0,r.zw)(e.translations.appointmentTypes.notice),1),(0,o._)("p",Af,(0,r.zw)(e.translations.appointmentTypes.notice_help),1)]),(0,o._)("div",Mf,[(0,o.Wm)(f,{class:(0,r.C_)(["complex-field",{"md-input-invalid":!l.validMinMax}])},{default:(0,o.w5)((()=>[(0,o._)("div",Df,[(0,o._)("p",Tf,(0,r.zw)(e.translations.appointmentTypes.min_booking_notice),1)]),(0,o.Wm)(p,{modelValue:l.v$.min_booking_notice.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>l.v$.min_booking_notice.$model=e),"allow-null":!0,"help-text":e.translations.appointmentTypes.min_booking_notice_help,"error-text":s.minBookingNoticeErrorMessage},null,8,["modelValue","help-text","error-text"])])),_:1},8,["class"])])]),e.advancedSchedulingModule.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o._)("div",Of,[(0,o._)("div",Gf,[(0,o._)("h3",Ef,(0,r.zw)(e.translations.appointmentTypes.advance),1),(0,o._)("p",Uf,(0,r.zw)(e.translations.appointmentTypes.advance_help),1)]),(0,o._)("div",Ff,[(0,o.Wm)(f,{class:(0,r.C_)(["complex-field",{"md-input-invalid":!l.validMinMax}])},{default:(0,o.w5)((()=>[(0,o._)("div",If,[(0,o._)("p",zf,(0,r.zw)(e.translations.appointmentTypes.max_booking_notice),1)]),(0,o.Wm)(p,{modelValue:l.v$.max_booking_notice.$model,"onUpdate:modelValue":t[5]||(t[5]=e=>l.v$.max_booking_notice.$model=e),"allow-null":!0,"help-text":e.translations.appointmentTypes.max_booking_notice_help,"error-text":s.maxBookingNoticeErrorMessage},null,8,["modelValue","help-text","error-text"])])),_:1},8,["class"])])]),(0,o._)("div",Pf,[(0,o._)("div",Vf,[(0,o._)("h3",Wf,(0,r.zw)(e.translations.appointmentTypes.booking_window),1),(0,o._)("p",Rf,(0,r.zw)(e.translations.appointmentTypes.booking_window_help),1)]),(0,o._)("div",null,[(0,o.Wm)(u,{label:e.translations.appointmentTypes.booking_start_date,"error-text":e.translations.settings.advanced_scheduling.booking_window_error,"is-valid":l.validBookingWindow,modelValue:s.booking_start_date,"onUpdate:modelValue":[t[6]||(t[6]=e=>s.booking_start_date=e),s.validationCheck]},null,8,["label","error-text","is-valid","modelValue","onUpdate:modelValue"]),(0,o.Wm)(u,{label:e.translations.appointmentTypes.booking_end_date,"error-text":e.translations.settings.advanced_scheduling.booking_window_error,"is-valid":l.validBookingWindow,modelValue:s.booking_end_date,"onUpdate:modelValue":[t[7]||(t[7]=e=>s.booking_end_date=e),s.validationCheck]},null,8,["label","error-text","is-valid","modelValue","onUpdate:modelValue"])])])],64)):(0,o.kq)("",!0),(0,o._)("h3",Lf,(0,r.zw)(e.translations.appointmentTypes.max),1),(0,o._)("p",jf,(0,r.zw)(e.translations.appointmentTypes.max_help),1),(0,o.Wm)(f,{"md-column":""},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{id:"limitmax",name:"limitmax",modelValue:l.isLimitmaxChecked,"onUpdate:modelValue":t[8]||(t[8]=e=>l.isLimitmaxChecked=e),label:e.translations.appointmentTypes.limitmax},null,8,["modelValue","label"])])),_:1}),l.isLimitmaxChecked?((0,o.wg)(),(0,o.j4)(f,{key:3,"md-column":""},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{type:"number",min:"1",onChange:s.validationCheck,modelValue:s.max_event_count,"onUpdate:modelValue":t[9]||(t[9]=e=>s.max_event_count=e),label:e.translations.appointmentTypes.max_event_count,helptext:l.validPerDayLimit?"":e.translations.settings.advanced_scheduling.perDayLimitError,"helptext-persistent":"","helptext-validation":"",id:"max_event_count",valid:l.validPerDayLimit},null,8,["onChange","modelValue","label","helptext","valid"])])),_:1})])),_:1})):(0,o.kq)("",!0)])}var Nf={name:"AppointmentTypeScheduling",store:$J,components:{Duration:Wd,DateTimePicker:ar},data(){return{v$:(0,Rd.Xw)(),options:X,moment:fe(),validBookingWindow:!0,validMinMax:!0,isLimitmaxChecked:!1,validPerDayLimit:!0}},validations:{buffer_before:{minValue:(0,Ld.uv)(0)},buffer_after:{minValue:(0,Ld.uv)(0)},min_booking_notice:{minValue:(0,Ld.uv)(0)},max_booking_notice:{minValue:(0,Ld.uv)(0)}},mounted(){this.max_event_count>0&&(this.isLimitmaxChecked=!0)},watch:{isLimitmaxChecked(e){e?this.max_event_count=this.currentAppointmentType.max_event_count>0?this.currentAppointmentType.max_event_count:3:(this.max_event_count="",this.validationCheck())}},computed:{timezone_style:{get(){return this.currentAppointmentType&&this.currentAppointmentType.timezone_style?this.currentAppointmentType.timezone_style:"localized"},set(e){this.updateCurrentAppointmentType({key:"timezone_style",value:e})}},booking_end_date:{get(){return this.currentAppointmentType?this.currentAppointmentType.booking_end_date:""},set(e){this.updateCurrentAppointmentType({key:"booking_end_date",value:e})}},booking_start_date:{get(){return this.currentAppointmentType?this.currentAppointmentType.booking_start_date:""},set(e){this.updateCurrentAppointmentType({key:"booking_start_date",value:e})}},buffer_after:{get(){return this.currentAppointmentType?this.currentAppointmentType.buffer_after:""},set(e){this.updateCurrentAppointmentType({key:"buffer_after",value:e}),this.validationCheck()}},bufferAfterError(){return this.v$.buffer_after.$invalid},buffer_before:{get(){return this.currentAppointmentType?this.currentAppointmentType.buffer_before:""},set(e){this.updateCurrentAppointmentType({key:"buffer_before",value:e}),this.validationCheck()}},bufferBeforeError(){return this.v$.buffer_before.$invalid},min_booking_notice:{get(){return this.currentAppointmentType?this.currentAppointmentType.min_booking_notice:""},set(e){this.updateCurrentAppointmentType({key:"min_booking_notice",value:e}),this.validationCheck()}},minBookingNoticeError(){return this.v$.min_booking_notice.$invalid},minBookingNoticeErrorMessage(){return this.advancedSchedulingModule.enabled&&!this.validMinMax&&this.min_booking_notice>=1&&this.max_booking_notice>=1?this.translations.appointmentTypes.min_max_error:""},max_booking_notice:{get(){let e=null;return this.currentAppointmentType&&(e=this.currentAppointmentType.max_booking_notice),0!==e&&"0"!==e||(e=""),e},set(e){this.updateCurrentAppointmentType({key:"max_booking_notice",value:e}),this.validationCheck()}},maxBookingNoticeError(){return this.v$.max_booking_notice.$invalid},maxBookingNoticeErrorMessage(){if(this.advancedSchedulingModule.enabled){if(this.max_booking_notice<1)return this.translations.appointmentTypes.max_booking_notice_error;if(!this.validMinMax&&this.max_booking_notice>=1&&this.min_booking_notice>=1)return this.translations.appointmentTypes.min_max_error}return""},max_event_count:{get(){return this.currentAppointmentType?this.currentAppointmentType.max_event_count:""},set(e){this.updateCurrentAppointmentType({key:"max_event_count",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)(["formatTimezone"]),...(0,m.Se)("advanced_scheduling",["advancedSchedulingModule"])},methods:{validationCheck(){let e=fe().utc(this.booking_start_date,this.timestampFormat),t=fe().utc(this.booking_end_date,this.timestampFormat);e.isValid()&&t.isValid()?this.validBookingWindow=e.isBefore(t):this.validBookingWindow=!0;let i=this.min_booking_notice?parseInt(this.min_booking_notice,10):null,a=this.max_booking_notice?parseInt(this.max_booking_notice,10):null;this.validMinMax=null===i&&null===a||!(i&&a&&a<=i)&&0!==a,this.isLimitmaxChecked?this.validPerDayLimit=parseInt(this.max_event_count,10)>0:this.validPerDayLimit=!0,this.$emit("validationCheck",this.validBookingWindow&&this.validMinMax&&this.validPerDayLimit&&!this.bufferBeforeError&&!this.bufferAfterError&&!this.maxBookingNoticeError&&!this.minBookingNoticeError)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const $f=(0,he.Z)(Nf,[["render",qf]]);var Hf=$f;const Zf={class:"appt-type-payments"},Yf={class:"subsection-title"},Kf={class:"subsection-description"},Jf={class:"radio-list"},Xf=(0,o._)("hr",null,null,-1),Qf=["value"],eu={key:0,class:"md-error"},tu={class:"subsection-title"},iu={class:"check-list"},au={key:0},ou={class:"check-list"},ru={class:"subsection-title"},lu={key:0,class:"error-message"};function su(e,t,i,l,s,n){const d=(0,o.up)("foxy-radio"),p=(0,o.up)("foxy-textfield"),f=(0,o.up)("foxy-layout"),u=(0,o.up)("foxy-select2"),c=(0,o.up)("foxy-input-container"),h=(0,o.up)("foxy-switch"),m=(0,o.up)("foxy-checkbox-multi"),g=(0,o.up)("foxy-button"),_=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",Zf,[e.activePaymentMethods.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("h3",Yf,(0,r.zw)(e.translations.appointmentTypes.payments.requiredPaymentTitle),1),(0,o._)("p",Kf,(0,r.zw)(e.translations.appointmentTypes.payments.requiredPayment),1),(0,o._)("div",Jf,[(0,o.Wm)(d,{modelValue:n.payment_required,"onUpdate:modelValue":t[0]||(t[0]=e=>n.payment_required=e),label:e.translations.appointmentTypes.payments.required,id:"payment-required",name:"payment_required",value:"required"},null,8,["modelValue","label"]),(0,o.Wm)(d,{modelValue:n.payment_required,"onUpdate:modelValue":t[1]||(t[1]=e=>n.payment_required=e),label:e.translations.appointmentTypes.payments.optional,id:"payment-optional",name:"payment_required",value:"optional"},null,8,["modelValue","label"]),(0,o.Wm)(d,{modelValue:n.payment_required,"onUpdate:modelValue":t[2]||(t[2]=e=>n.payment_required=e),label:e.translations.appointmentTypes.payments.none,id:"payment-none",name:"payment_required",value:"none"},null,8,["modelValue","label"])]),n.paymentsEnabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[Xf,(0,o.Wm)(f,{"md-gutter":!0,class:"col3-big-middle"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{modelValue:l.v$.price.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>l.v$.price.$model=e),modelModifiers:{number:!0,trim:!0},label:e.translations.appointmentTypes.payments.price,helptext:l.v$.price.$invalid?n.price_error:"","helptext-persistent":"","helptext-validation":"",min:"0",type:"number",onChange:n.tidyPrice,required:"",step:"any",valid:!l.v$.price.$invalid},null,8,["modelValue","label","helptext","onChange","valid"])])),_:1}),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{label:e.translations.appointmentTypes.payments.currency,name:"currency",id:"currency",onInput:n.tidyPrice,modelValue:l.v$.currency.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>l.v$.currency.$model=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.currencies,(e=>((0,o.wg)(),(0,o.iD)("option",{value:e.code,key:e.number},(0,r.zw)(e.currency)+" ("+(0,r.zw)(e.code)+") ",9,Qf)))),128))])),_:1},8,["label","onInput","modelValue"]),l.v$.currency.$invalid&&l.v$.currency.$dirty?((0,o.wg)(),(0,o.iD)("span",eu,(0,r.zw)(e.translations.appointmentTypes.payments.currencyError),1)):(0,o.kq)("",!0)])),_:1})])),_:1}),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.wy)((0,o.Wm)(p,{outline:"",class:"readonly",modelValue:n.display_price,"onUpdate:modelValue":t[5]||(t[5]=e=>n.display_price=e),label:e.translations.appointmentTypes.payments.displayPrice,readonly:""},null,8,["modelValue","label"]),[[a.F8,n.price]])])),_:1})])),_:1}),(0,o._)("h3",tu,(0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.title),1),(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{modelValue:n.refund_policy,"onUpdate:modelValue":t[6]||(t[6]=e=>n.refund_policy=e),label:e.translations.appointmentTypes.payments.refundPolicy,valid:!l.v$.refund_policy.$invalid,required:n.isRefundPolicyTxtRequired,helptext:l.v$.refund_policy.$invalid?e.translations.appointmentTypes.payments.refundPolicySection.required.textEmptyError:e.translations.appointmentTypes.payments.refundPolicyHelp,"helptext-persistent":"","helptext-validation":"",rows:"3",id:"refund-policy-text","aria-required":n.isRefundPolicyTxtRequired?"true":"false",multiline:""},null,8,["modelValue","label","valid","required","helptext","aria-required"])])),_:1}),(0,o.Wm)(h,{modelValue:n.refundPolicyRequired,"onUpdate:modelValue":t[7]||(t[7]=e=>n.refundPolicyRequired=e),id:"refundPolicyRequired",name:"refundPolicyRequired"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.required.switchLabel),1)])),_:1},8,["modelValue"]),n.refundPolicyRequired?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("p",null,(0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.required.checkboxMessage),1),(0,o.Wm)(p,{modelValue:n.refundCheckboxLabel,"onUpdate:modelValue":t[8]||(t[8]=e=>n.refundCheckboxLabel=e),label:e.translations.appointmentTypes.payments.refundPolicySection.required.checkboxLabel,helptext:l.v$.refundCheckboxLabel.$invalid?e.translations.appointmentTypes.payments.refundPolicySection.required.labelEmptyError:e.translations.appointmentTypes.payments.refundPolicySection.required.helperText,"helptext-persistent":"","helptext-validation":"",id:"checkbox-label","aria-describedby":"checkbox-label-description","aria-required":"true",onChange:n.validationCheck,valid:!l.v$.refundCheckboxLabel.$invalid},null,8,["modelValue","label","helptext","onChange","valid"])],64)):(0,o.kq)("",!0),(0,o._)("fieldset",iu,[(0,o._)("legend",null,(0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.display.title),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.displayPolicyOptions,((i,a)=>((0,o.wg)(),(0,o.iD)("div",{class:"check-item",key:a},[((0,o.wg)(),(0,o.j4)(m,{key:a,id:i,name:"displayPolicyOptions",value:i,disabled:"customerInformationScreen"===i,theme:e.currentAppointmentType.label?e.currentAppointmentType.label:"light-green",theming:"primary",modelValue:n.whereToDisplayPolicy,"onUpdate:modelValue":t[9]||(t[9]=e=>n.whereToDisplayPolicy=e)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.display.options[i])+" ",1),"customerInformationScreen"===i?((0,o.wg)(),(0,o.iD)("span",au," - "+(0,r.zw)(e.translations.appointmentTypes.payments.refundPolicySection.display.default),1)):(0,o.kq)("",!0)])),_:2},1032,["id","value","disabled","theme","modelValue"]))])))),128))]),(0,o._)("fieldset",ou,[(0,o._)("legend",null,[(0,o._)("h3",ru,(0,r.zw)(e.translations.appointmentTypes.payments.paymentMethods),1)]),l.v$.payment_methods.$invalid?((0,o.wg)(),(0,o.iD)("p",lu,(0,r.zw)(e.translations.appointmentTypes.payments.paymentMethodsError),1)):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.activePaymentMethods,((i,a)=>((0,o.wg)(),(0,o.iD)("div",{class:"check-item",key:a},[((0,o.wg)(),(0,o.j4)(m,{key:a,id:"payment-method-"+a,name:"payment-methods",value:i,theme:e.currentAppointmentType.label?e.currentAppointmentType.label:"light-green",theming:"primary",modelValue:l.v$.payment_methods.$model,"onUpdate:modelValue":t[10]||(t[10]=e=>l.v$.payment_methods.$model=e)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.displayGateway(i)),1)])),_:2},1032,["id","value","theme","modelValue"]))])))),128))])],64)):(0,o.kq)("",!0)],64)):((0,o.wg)(),(0,o.j4)(_,{key:1,label:e.translations.appointmentTypes.payments.noGateways},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/payments"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.payments.setup),1)])),_:1})])),_:1},8,["label"]))])}var nu={setup(){return{v$:(0,Rd.Xw)()}},name:"AppointmentTypePayments",data(){return{currencies:V,paymentInfo:{},displayPolicyOptions:j}},validations(){return{price:{required:(0,Ld.CF)((()=>this.paymentsEnabled)),minVal:(0,Ld.uv)(this.currencyObj.min),decimal:Ld.gH},currency:{required:(0,Ld.CF)((()=>this.paymentsEnabled))},payment_methods:{required:(0,Ld.CF)((()=>this.paymentsEnabled))},refundCheckboxLabel:{required:(0,Ld.CF)((()=>this.checkboxLabelRequired))},refund_policy:{required:(0,Ld.CF)((()=>this.checkboxLabelRequired))}}},mounted(){var e=wa().cloneDeep(this.currentAppointmentType.payments);wa().isEmpty(e)&&(e={},e.payment_methods=this.activePaymentMethods.slice(0),e.currency=this.settings.payments.default_currency),this.paymentInfo=e,this.paymentInfo.refund_policy_checkbox_label||(this.paymentInfo.refund_policy_checkbox_label=this.translations.appointmentTypes.payments.refundPolicySection.required.defaultLabel)},watch:{paymentInfo:{handler(e){this.updateCurrentAppointmentType({key:"payments",value:wa().cloneDeep(e)})},deep:!0},refund_policy:{handler(){this.validationCheck()}},checkboxLabelRequired:{handler(){this.validationCheck()}},payment_required:{handler(){this.validationCheck()}},paymentsEnabled:{handler(){this.validationCheck()}},display_price:{handler(){this.validationCheck()}}},computed:{price:{get(){return this.paymentInfo.price?this.paymentInfo.price:null},set(e){this.paymentInfo.price=e,this.validationCheck()}},price_error(){return"USD"===this.currency?this.translations.appointmentTypes.payments.priceUSDError:this.translations.appointmentTypes.payments.priceError+parseFloat(this.currencyObj.min).toFixed(this.currencyObj.digits)},currency:{get(){return this.paymentInfo.currency?this.paymentInfo.currency:this.settings.payments.default_currency},set(e){this.paymentInfo.currency=e,this.validationCheck()}},currencyObj(){return this.currencies.find((e=>this.currency===e.code))},display_price(){let e=this.settings.global.locale.replace("_","-");e=e.replace("_formal",""),e=e.replace("_informal","");let t=parseFloat(this.price);return t?new Intl.NumberFormat(e,{style:"currency",currency:this.currency}).format(t):null},refund_policy:{get(){return this.paymentInfo.refund_policy?this.paymentInfo.refund_policy:""},set(e){this.paymentInfo.refund_policy=e}},refundPolicyRequired:{get(){return!!this.paymentInfo.refund_policy_required&&this.paymentInfo.refund_policy_required},set(e){this.paymentInfo.refund_policy_required=e,this.validationCheck()}},checkboxLabelRequired(){return!0===this.refundPolicyRequired},refundCheckboxLabel:{get(){return this.paymentInfo.refund_policy_checkbox_label?this.paymentInfo.refund_policy_checkbox_label:""},set(e){this.paymentInfo.refund_policy_checkbox_label=e,this.validationCheck()}},whereToDisplayPolicy:{get(){return this.paymentInfo.refund_policy_display_screen?this.paymentInfo.refund_policy_display_screen:["customerInformationScreen","confirmationScreen"]},set(e){this.paymentInfo.refund_policy_display_screen=e}},isRefundPolicyTxtRequired(){return!0===this.refundPolicyRequired},payment_methods:{get(){return this.paymentInfo.payment_methods?this.paymentInfo.payment_methods:this.activePaymentMethods.slice(0)},set(e){this.paymentInfo.payment_methods=e,this.validationCheck()}},payment_required:{get(){return this.paymentInfo.payment_required?this.paymentInfo.payment_required:"none"},set(e){this.paymentInfo.payment_required=e,this.validationCheck()}},paymentsEnabled(){return"none"!==this.payment_required},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("payments",["activePaymentMethods","displayGateway"])},methods:{validationCheck(){this.$emit("validationCheck",!this.v$.$invalid)},tidyPrice(){null!==this.price&&(this.price=parseFloat(this.price).toFixed(this.currencyObj.digits))},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const du=(0,he.Z)(nu,[["render",su]]);var pu=du;const fu={class:"appt-type-staff"},uu={class:"md-subheading caption-pair"},cu={class:"md-caption caption-pair"},hu={class:"radio-list"},mu={key:0,class:"radio-list",role:"radiogroup","aria-labelledby":"groupLabel",style:{"padding-left":"2rem"}},gu={id:"groupLabel",class:"screen-reader-text"},_u={class:"md-subheading"},yu={class:"staff-list-assossiated"};function wu(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-radio"),f=(0,o.up)("foxy-notification"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-checkbox"),h=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",fu,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,size:"body",message:e.translations.settings.staff.loading},null,8,["message"])):e.staffStatusPublish.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(d,{tag:"md-button",class:"md-primary right-align-link",to:"/ssa/settings/staff"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.actions.manageTeamMembers),1)])),_:1}),(0,o._)("div",null,[(0,o._)("h3",uu,(0,r.zw)(e.translations.settings.staff.appointmentType.staffEnableHeading),1),(0,o._)("p",cu,(0,r.zw)(e.translations.settings.staff.appointmentType.staffEnableDesc),1),(0,o._)("div",hu,[(0,o.Wm)(p,{modelValue:s.staffRequired,"onUpdate:modelValue":t[0]||(t[0]=e=>s.staffRequired=e),id:"staff-user-preference",name:"staffRequired",value:"user_preference"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.userPreferenceLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.userPreferenceDesc),1)])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.staffRequired,"onUpdate:modelValue":t[1]||(t[1]=e=>s.staffRequired=e),id:"staff-any",name:"staffRequired",value:"any"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.anyLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.anyDesc),1)])),_:1},8,["modelValue"]),"any"==s.staffRequired?((0,o.wg)(),(0,o.iD)("div",mu,[(0,o._)("div",gu,(0,r.zw)(e.translations.settings.staff.appointmentType.assignmentLabel),1),(0,o.Wm)(p,{modelValue:s.staffAssignment,"onUpdate:modelValue":t[2]||(t[2]=e=>s.staffAssignment=e),name:"staff-assignment",value:"random"},{default:(0,o.w5)((()=>[(0,o._)("span",null,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.randomAssignmentLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.randomAssignmentDesc),1)])])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.staffAssignment,"onUpdate:modelValue":t[3]||(t[3]=e=>s.staffAssignment=e),name:"staff-assignment",value:"round_robin"},{default:(0,o.w5)((()=>[(0,o._)("span",null,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.roundRobinAssignmentLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.roundRobinAssignmentDesc),1)])])),_:1},8,["modelValue"])])):(0,o.kq)("",!0),(0,o.Wm)(p,{modelValue:s.staffRequired,"onUpdate:modelValue":t[4]||(t[4]=e=>s.staffRequired=e),id:"staff-all",name:"staffRequired",value:"all"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.allLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.allDesc),1)])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.staffRequired,"onUpdate:modelValue":t[5]||(t[5]=e=>s.staffRequired=e),id:"staff-none",name:"staffRequired",value:""},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.appointmentType.noneLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.staff.appointmentType.noneDesc),1)])),_:1},8,["modelValue"])])]),s.staffError?((0,o.wg)(),(0,o.j4)(f,{key:0,icon:"warning",theme:"orange"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.appointmentType.staffWarning),1)])),_:1})):(0,o.kq)("",!0),""!==s.staffRequired?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("h3",_u,(0,r.zw)(e.translations.settings.staff.appointmentType.teamLabel),1),(0,o._)("div",yu,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.staffStatusPublish,(i=>((0,o.wg)(),(0,o.j4)(c,{key:i.id,modelValue:s.selectedStaff,"onUpdate:modelValue":t[6]||(t[6]=e=>s.selectedStaff=e),id:"staff-"+i.id,name:"staff-"+i.id,value:i.id,class:"staff-item",label:i.display_name},{default:(0,o.w5)((()=>[""===i.web_meetings_url&&Object.prototype.hasOwnProperty.call(e.currentAppointmentType,"web_meetings")&&"staff"===e.currentAppointmentType.web_meetings.provider?((0,o.wg)(),(0,o.j4)(u,{key:0,theme:"yellow",icon:"warning"})):(0,o.kq)("",!0),""===i.web_meetings_url&&Object.prototype.hasOwnProperty.call(e.currentAppointmentType,"web_meetings")&&"staff"===e.currentAppointmentType.web_meetings.provider?((0,o.wg)(),(0,o.j4)(f,{key:1,theme:"amber",inline:!0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.appointmentType.noWebMeetingUrl),1)])),_:1})):(0,o.kq)("",!0)])),_:2},1032,["modelValue","id","name","value","label"])))),128))])],64)):(0,o.kq)("",!0)],64)):((0,o.wg)(),(0,o.j4)(h,{key:2,label:"No team members yet"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/staff"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.actions.addNew),1)])),_:1})])),_:1}))])}var xu={name:"AppointmentTypeStaff",components:{Loading:ge},data(){return{loading:!0}},mounted(){this.staff&&this.staff.length?this.loading=!1:this.fetchStaff().then((()=>{this.loading=!1}))},watch:{staffRequired(){if(""===this.staffRequired&&Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"web_meetings")&&"staff"===this.currentAppointmentType.web_meetings.provider){let e=wa().cloneDeep(this.currentAppointmentType.web_meetings);e.provider=""!==e.url?"custom":"",this.updateCurrentAppointmentType({key:"web_meetings",value:e})}}},computed:{staffRequired:{get(){return Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"staff")&&this.currentAppointmentType.staff?this.currentAppointmentType.staff.required:""},set(e){let t=this.currentAppointmentType.staff;t="string"===typeof t||"undefined"===typeof t?wa().cloneDeep(U):wa().cloneDeep(this.currentAppointmentType.staff),t.required=e;let i=Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"staff")&&this.currentAppointmentType.staff?this.currentAppointmentType.staff.required:"";this.$emit("staffRequiredChange",{oldStaff:i,newStaff:e}),this.updateCurrentAppointmentType({key:"staff",value:t}),this.validationCheck()}},staffAssignment:{get(){return Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"staff")&&this.currentAppointmentType.staff?this.currentAppointmentType.staff.assignment:"random"},set(e){let t=this.currentAppointmentType.staff;t="string"===typeof t||"undefined"===typeof t?wa().cloneDeep(U):wa().cloneDeep(this.currentAppointmentType.staff),t.assignment=e,this.updateCurrentAppointmentType({key:"staff",value:t}),this.validationCheck()}},selectedStaff:{get(){return Object.prototype.hasOwnProperty.call(this.currentAppointmentType,"staff_ids")&&this.currentAppointmentType.staff_ids?this.currentAppointmentType.staff_ids.map(String):[]},set(e){this.updateCurrentAppointmentType({key:"staff_ids",value:e}),this.validationCheck()}},staffError(){return!!this.staffRequired&&!this.selectedStaff.length},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("staff",["staffStatusPublish"]),...(0,m.rn)(["settings"])},methods:{validationCheck(){this.$emit("validationCheck",!this.staffError)},...(0,m.nv)("staff",["fetchStaff"]),...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const Cu=(0,he.Z)(xu,[["render",wu]]);var vu=Cu;const bu={class:"appt-type-google-calendar"},Bu={class:"md-heading-group"},Su={class:"md-headline"},ku={class:"md-subheading"},Au={key:0,style:{padding:"1rem"}},Mu={class:"md-heading-group"},Du={class:"md-headline"},Tu={class:"md-subheading"},Ou={class:"checkboxes-list-flex-row"};function Gu(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-empty"),f=(0,o.up)("foxy-radio"),u=(0,o.up)("foxy-list-item"),c=(0,o.up)("foxy-list"),h=(0,o.up)("foxy-switch"),m=(0,o.up)("foxy-checkbox");return(0,o.wg)(),(0,o.iD)("div",bu,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,size:"body",message:e.translations.settings.google_calendar.loadingCalendars},null,8,["message"])):l.error?((0,o.wg)(),(0,o.j4)(p,{key:1,label:e.translations.appointmentTypes.google_calendar.checkSettingsMessage},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/google-calendar"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.google_calendar.checkSettings),1)])),_:1})])),_:1},8,["label"])):e.settings.google_calendar.access_token?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o._)("div",Bu,[(0,o._)("h3",Su,(0,r.zw)(e.translations.wizard.appointmentType.apptSyncHeading),1),(0,o._)("div",ku,(0,r.zw)(e.translations.wizard.appointmentType.apptSyncDesc),1)]),(0,o.Wm)(c,{"non-interactive":"","fit-content":""},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.writeableGoogleCalendars,(e=>((0,o.wg)(),(0,o.j4)(u,{key:e.gcal_id},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{modelValue:s.googleCalendarBooking,"onUpdate:modelValue":t[0]||(t[0]=e=>s.googleCalendarBooking=e),label:e.summary,value:e.gcal_id,name:"googleCalendarBooking"},null,8,["modelValue","label","value"])])),_:2},1024)))),128)),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{modelValue:s.googleCalendarBooking,"onUpdate:modelValue":t[1]||(t[1]=e=>s.googleCalendarBooking=e),label:e.translations.wizard.googleCalendar.dontAdd,value:"",name:"googleCalendarBooking"},null,8,["modelValue","label"])])),_:1})])),_:1}),s.googleCalendarBooking?((0,o.wg)(),(0,o.iD)("div",Au,[(0,o.Wm)(h,{id:"sharedCalendarEvent",modelValue:s.sharedCalendarEvent,"onUpdate:modelValue":t[2]||(t[2]=e=>s.sharedCalendarEvent=e),name:"sharedCalendarEvent"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.google_calendar.sharedCalendarEvent),1)])),_:1},8,["modelValue"]),(0,o._)("div",null,(0,r.zw)(e.translations.appointmentTypes.google_calendar.sharedCalendarEventDesc),1)])):(0,o.kq)("",!0),(0,o._)("div",Mu,[(0,o._)("h3",Du,(0,r.zw)(e.translations.wizard.appointmentType.checkCalendars),1),(0,o._)("div",Tu,(0,r.zw)(e.translations.wizard.appointmentType.checkCalendarsDesc),1)]),(0,o._)("div",Ou,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.googleCalendars,(e=>((0,o.wg)(),(0,o.j4)(m,{key:e.gcal_id,modelValue:s.googleCalendarsAvailability,"onUpdate:modelValue":t[3]||(t[3]=e=>s.googleCalendarsAvailability=e),id:e.gcal_id,name:e.gcal_id,value:e.gcal_id.toString(),label:e.summary},null,8,["modelValue","id","name","value","label"])))),128))])],64)):((0,o.wg)(),(0,o.j4)(p,{key:3,label:e.translations.appointmentTypes.google_calendar.noAccessToken},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/google-calendar"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.google_calendar.setup),1)])),_:1})])),_:1},8,["label"]))])}var Eu={name:"GoogleCalendar",components:{Loading:ge},data(){return{loading:!0,error:!1}},mounted(){this.googleCalendars.length?this.loading=!1:this.fetchGoogleCalendars().then((()=>{this.cleanUpCalendars(),this.loading=!1})).catch((e=>{console.log(e),this.loading=!1,this.error=!0}))},computed:{googleCalendarBooking:{get(){return this.currentAppointmentType.google_calendar_booking},set(e){this.updateCurrentAppointmentType({key:"google_calendar_booking",value:e})}},googleCalendarsAvailability:{get(){return this.currentAppointmentType.google_calendars_availability&&"boolean"!==typeof this.currentAppointmentType.google_calendars_availability?this.currentAppointmentType.google_calendars_availability:[]},set(e){this.updateCurrentAppointmentType({key:"google_calendars_availability",value:e})}},sharedCalendarEvent:{get(){return 0!==parseInt(this.currentAppointmentType.shared_calendar_event)},set(e){const t=e?"1":"0";this.updateCurrentAppointmentType({key:"shared_calendar_event",value:t})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("google_calendar",["googleCalendars"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("google_calendar",["writeableGoogleCalendars"])},methods:{cleanUpCalendars(){let e=this.currentAppointmentType.google_calendars_availability.slice(0),t=this.googleCalendars.map((e=>e.gcal_id)),i=e.filter((e=>t.indexOf(e)>=0));this.updateCurrentAppointmentType({key:"google_calendars_availability",value:i})},...(0,m.nv)("google_calendar",["fetchGoogleCalendars"]),...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const Uu=(0,he.Z)(Eu,[["render",Gu]]);var Fu=Uu;const Iu=e=>((0,o.dD)("data-v-46faddac"),e=e(),(0,o.Cn)(),e),zu={class:"ssa-web-meetings-type"},Pu=Iu((()=>(0,o._)("br",null,null,-1))),Vu={key:0,class:"subsection-title"},Wu={key:1},Ru={key:2,class:"md-whiteframe banner vert"},Lu={class:"md-subheading"},ju={class:"md-body"},qu={key:3},Nu={class:"subsection-title"},$u={key:4},Hu={class:"subsection-title"},Zu={class:"link",target:"_blank",href:"https://simplyscheduleappointments.com/guides/zoom/#open-meeting"};function Yu(e,t,i,a,l,s){const n=(0,o.up)("foxy-radio"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-notification"),u=(0,o.up)("foxy-list"),c=(0,o.up)("foxy-textfield"),h=(0,o.up)("foxy-button"),m=(0,o.up)("promo-web-meetings"),g=(0,o.up)("foxy-dialog"),_=(0,o.up)("promo-business");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("div",zu,[(0,o.Wm)(u,{"non-interactive":"","fit-content":""},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProvider,"onUpdate:modelValue":t[0]||(t[0]=e=>s.webMeetingProvider=e),name:"webMeetingProvider",value:"",label:e.translations.appointmentTypes.web_meetings.providers.none.label},null,8,["modelValue","label"])])),_:1}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.availableWebMeetingsProviders,(i=>((0,o.wg)(),(0,o.j4)(d,{onClick:()=>s.maybeShowUpgrade(i),disabled:!i.installed,key:i.name,class:(0,r.C_)({staff:"staff"===i.name})},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProvider,"onUpdate:modelValue":t[1]||(t[1]=e=>s.webMeetingProvider=e),name:"webMeetingProvider",value:i.name,disabled:!i.installed},{default:(0,o.w5)((()=>["staff"===i.name&&e.currentStaffMissingWebMeetingsUrl?((0,o.wg)(),(0,o.j4)(p,{key:0,theme:"yellow",icon:"warning"})):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers[i.name].label),1)])),_:2},1032,["modelValue","value","disabled"]),Pu,"staff"===i.name&&e.currentStaffMissingWebMeetingsUrl?((0,o.wg)(),(0,o.j4)(f,{key:0,theme:"amber",inline:!0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.staff.warning),1)])),_:1})):(0,o.kq)("",!0)])),_:2},1032,["onClick","disabled","class"])))),128))])),_:1}),s.includeCustomMeetingUrlField?((0,o.wg)(),(0,o.iD)("h3",Vu,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers[s.webMeetingProvider].settingsHeading),1)):(0,o.kq)("",!0),s.includeCustomMeetingUrlField?((0,o.wg)(),(0,o.iD)("fieldset",Wu,[(0,o._)("legend",null,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers[s.webMeetingProvider].legend),1),(0,o.Wm)(c,{type:"url",id:"custom-provider",placeholder:"https://",modelValue:l.v$.webMeetingUrl.$model,"onUpdate:modelValue":t[2]||(t[2]=e=>l.v$.webMeetingUrl.$model=e),label:e.translations.appointmentTypes.web_meetings.providers[s.webMeetingProvider].urlLabel,helptext:s.webMeetingUrlError?e.translations.appointmentTypes.web_meetings.providers[s.webMeetingProvider].error:"","helptext-persistent":"","helptext-validation":"",valid:!s.webMeetingUrlError},null,8,["modelValue","label","helptext","valid"])])):(0,o.kq)("",!0),s.googleCalendarBooking||"google"!==s.webMeetingProvider?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",Ru,[(0,o._)("div",Lu,[(0,o.Wm)(p,{icon:"warning",theme:"amber"}),(0,o.Uk)(" "+(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.google.googleNoCalendarHeading),1)]),(0,o._)("div",ju,[(0,o._)("p",null,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.google.noCalendarSelectedMessage),1),(0,o.Wm)(h,{class:"md-raised md-primary",onClick:s.editGoogleCalendar},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.google.googleEditSettings),1)])),_:1},8,["onClick"])])])),"webex"===s.webMeetingProvider?((0,o.wg)(),(0,o.iD)("fieldset",qu,[(0,o._)("legend",Nu,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.webex.legend),1),(0,o.Wm)(u,{"non-interactive":"","fit-content":""},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProviderWebexPrivate,"onUpdate:modelValue":t[3]||(t[3]=e=>s.webMeetingProviderWebexPrivate=e),value:"private",name:"webMeetingProviderWebexPrivate",label:e.translations.appointmentTypes.web_meetings.providers.webex.options.private},null,8,["modelValue","label"])])),_:1}),(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProviderWebexPrivate,"onUpdate:modelValue":t[4]||(t[4]=e=>s.webMeetingProviderWebexPrivate=e),name:"webMeetingProviderWebexPrivate",value:"open",label:e.translations.appointmentTypes.web_meetings.providers.webex.options.open},null,8,["modelValue","label"])])),_:1})])),_:1})])):(0,o.kq)("",!0),"zoom"===s.webMeetingProvider?((0,o.wg)(),(0,o.iD)("fieldset",$u,[(0,o._)("legend",Hu,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.zoom.legend),1),(0,o.Wm)(u,{"non-interactive":"","fit-content":""},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProviderZoomPrivate,"onUpdate:modelValue":t[5]||(t[5]=e=>s.webMeetingProviderZoomPrivate=e),name:"webMeetingProviderZoomPrivate",value:"private",label:e.translations.appointmentTypes.web_meetings.providers.zoom.options.private},null,8,["modelValue","label"])])),_:1}),(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"mdc-radio-input-field",modelValue:s.webMeetingProviderZoomPrivate,"onUpdate:modelValue":t[6]||(t[6]=e=>s.webMeetingProviderZoomPrivate=e),name:"webMeetingProviderZoomPrivate",value:"open",label:e.translations.appointmentTypes.web_meetings.providers.zoom.options.open},null,8,["modelValue","label"])])),_:1})])),_:1}),"open"===s.webMeetingProviderZoomPrivate?((0,o.wg)(),(0,o.j4)(f,{key:0,theme:"amber",icon:"warning"},{default:(0,o.w5)((()=>[(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.web_meetings.providers.zoom.notice.openMeeting),1),(0,o._)("span",null,[(0,o.Uk)("   "),(0,o._)("a",Zu,(0,r.zw)(e.translations.general.learnMore),1)])])),_:1})):(0,o.kq)("",!0)])):(0,o.kq)("",!0),(0,o.Wm)(g,{ref:"upgradeWebMeetings"},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{dismissable:!1,onPromoClicked:t[7]||(t[7]=e=>s.closeDialog("upgradeWebMeetings"))})])),_:1},512),(0,o.Wm)(g,{ref:"upgradeBusiness"},{default:(0,o.w5)((()=>[(0,o.Wm)(_,{"upgrade-url-params":l.promoBusiness,dismissable:!1,onPromoClicked:t[8]||(t[8]=t=>s.closeDialog(e.upgradeBusiness))},null,8,["upgrade-url-params"])])),_:1},512)])])}const Ku=["href"],Ju=["src"],Xu=(0,o._)("div",{class:"md-title"},[(0,o.Uk)(" Simply Schedule Appointments "),(0,o._)("strong",null,"Plus")],-1);function Qu(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",{href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-promo-plus.svg",alt:"Simply Schedule Appointments Plus",class:"promo-img promo-plus"},null,8,Ju)],8,Ku)])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[Xu])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.webMeetingsText),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.webMeetingsTextBullets.google),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.webMeetingsTextBullets.zoom),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.customFields),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.plusTextBullets.classes),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",class:"md-accent",href:e.upgradeUrlParsed(l.purchasePlusLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)(" Upgrade now ")])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var ec={name:"PromoWebMeetings",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"plus-features",utm_content:"general-plus-web-meeting-settings"}}}},data(){return{slug:"promo-web-meetings",purchasePlusLink:qe}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const tc=(0,he.Z)(ec,[["render",Qu]]);var ic=tc;const ac={href:"https://simplyscheduleappointments.com/features",target:"_blank"},oc=["src"],rc=(0,o._)("h2",{class:"md-title"},[(0,o.Uk)(" Simply Schedule Appointments "),(0,o._)("strong",null,"Business")],-1);function lc(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",ac,[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-promo-business.svg",alt:"Simply Schedule Appointments Pro",class:"promo-img promo-business"},null,8,oc)])])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[rc])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.businessText),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.businessTextBullets.team),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.businessTextBullets.resources),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.businessTextBullets.bonus),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",theme:"accent",href:e.upgradeUrlParsed(this.businessUpgradeLink,this.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.businessTextCta.upgrade),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var sc={name:"PromoBusiness",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-business",utm_term:"business-features",utm_content:"general-business-settings-popup"}}}},data(){return{slug:"promo-business"}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["upgradeUrlParsed","businessUpgradeLink"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const nc=(0,he.Z)(sc,[["render",lc]]);var dc=nc,pc={name:"WebMeetings",components:{PromoWebMeetings:ic,PromoBusiness:dc},data(){return{v$:(0,Rd.Xw)(),webMeetingsInfo:{},promoBusiness:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-business",utm_term:"business-features",utm_content:"general-business-web-meeting-settings"}}},validations:{webMeetingUrl:{url:Ld.HQ,maxLength:(0,Ld.BS)(256)}},mounted(){let e=wa().cloneDeep(this.currentAppointmentType.web_meetings);wa().isEmpty(e)&&(e={provider:"",url:""}),this.staffEnabled||"staff"!==e.provider||(e.provider=""!==e.url?"custom":"",this.updateCurrentAppointmentType({key:"web_meetings",value:e})),this.webMeetingsInfo=e,this.fetchStaff()},watch:{webMeetingsInfo:{handler(e){this.updateCurrentAppointmentType({key:"web_meetings",value:wa().cloneDeep(e)})},deep:!0},staffEnabled(e){e||(this.webMeetingsInfo.provider=""!==this.webMeetingsInfo.url?"custom":"")}},computed:{webMeetingProvider:{get(){return this.webMeetingsInfo.provider?this.webMeetingsInfo.provider:""},set(e){this.webMeetingsInfo.provider=e,this.validationCheck()}},includeCustomMeetingUrlField(){return["custom","staff"].includes(this.webMeetingProvider)},webMeetingProviderZoomPrivate:{get(){return this.webMeetingsInfo.zoom_privacy?this.webMeetingsInfo.zoom_privacy:"private"},set(e){this.webMeetingsInfo.zoom_privacy=e,this.validationCheck()}},webMeetingProviderWebexPrivate:{get(){return this.webMeetingsInfo.webex_privacy?this.webMeetingsInfo.webex_privacy:"private"},set(e){this.webMeetingsInfo.webex_privacy=e,this.validationCheck()}},webMeetingUrl:{get(){return this.webMeetingsInfo.url?this.webMeetingsInfo.url:""},set(e){this.webMeetingsInfo.url=e,this.validationCheck()}},webMeetingUrlError(){return"custom"===this.webMeetingProvider&&this.v$.webMeetingUrl.$invalid},availableWebMeetingsProviders(){return this.webMeetingsProviders?this.webMeetingsProviders.filter((e=>e.enabled||!e.installed)):[]},googleCalendarBooking(){return this.currentAppointmentType.google_calendar_booking},staffEnabled(){return!!Object.prototype.hasOwnProperty.call(this.settings,"staff")&&(!!this.settings.staff.enabled&&!!this.settings.installed.staff)},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)(["webMeetingsProviders"]),...(0,m.Se)("staff",["currentStaffMissingWebMeetingsUrl"])},methods:{closeDialog(e){this.$refs[e].close()},editGoogleCalendar(){let e=this.getClosest(this.$el,".ssa-accordion-item"),t=e.parentNode.querySelector('.ssa-accordion-item[data-section="google-calendar"] button');t.click()},getClosest(e,t){for(;e&&e!==document;e=e.parentNode)if(e.matches(t))return e;return null},maybeShowUpgrade(e){e.installed||("staff"!==e.name?this.$refs["upgradeWebMeetings"].open():this.$refs["upgradeBusiness"].open())},validationCheck(){this.$emit("validationCheck",!this.webMeetingUrlError)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"]),...(0,m.nv)("staff",["fetchStaff"])}};const fc=(0,he.Z)(pc,[["render",Yu],["__scopeId","data-v-46faddac"]]);var uc=fc;const cc={class:"appt-type-mailchimp"},hc={key:1};function mc(e,t,i,a,l,s){const n=(0,o.up)("foxy-radio"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",cc,[e.settings.mailchimp.account_details?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[e.settings.mailchimp.lists.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("p",null,(0,r.zw)(e.translations.appointmentTypes.mailchimp.listSelect),1),(0,o.Wm)(p,{"non-interactive":"","fit-content":""},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.settings.mailchimp.lists,(e=>((0,o.wg)(),(0,o.j4)(d,{key:e.id},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{modelValue:l.optin_list,"onUpdate:modelValue":t[0]||(t[0]=e=>l.optin_list=e),label:e.name,id:"list-"+e.id,name:"mailchimpList",value:e.id,class:"md-primary"},null,8,["modelValue","label","id","value"])])),_:2},1024)))),128)),(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{modelValue:l.optin_list,"onUpdate:modelValue":t[1]||(t[1]=e=>l.optin_list=e),label:e.translations.appointmentTypes.mailchimp.noSelection,id:"list-none",name:"mailchimpList",value:"",class:"md-primary"},null,8,["modelValue","label"])])),_:1})])),_:1}),(0,o.Wm)(f,{modelValue:l.optin_text,"onUpdate:modelValue":t[2]||(t[2]=e=>l.optin_text=e),label:e.translations.appointmentTypes.mailchimp.optinTextLabel,helptext:l.validMailchimp?"":e.translations.appointmentTypes.mailchimp.optinTextError,"helptext-persistent":"","helptext-validation":"",id:"mailchimpOptinText",required:"",onChange:s.queueUpdateMailchimp,valid:l.validMailchimp},null,8,["modelValue","label","helptext","onChange","valid"])],64)):((0,o.wg)(),(0,o.iD)("p",hc,(0,r.zw)(e.translations.appointmentTypes.mailchimp.noLists),1))],64)):((0,o.wg)(),(0,o.j4)(c,{key:1,label:e.translations.appointmentTypes.mailchimp.noConnection},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/mailchimp"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.mailchimp.setup),1)])),_:1})])),_:1},8,["label"]))])}var gc={name:"AppointmentTypeMailchimp",props:["modelValue"],emits:["update:modelValue","validationCheck"],data(){return{optin_list:"",optin_text:"",validMailchimp:!0}},mounted(){this.optin_text=this.modelValue.optin_text?this.modelValue.optin_text:this.translations.appointmentTypes.mailchimp.optin,this.optin_list=this.modelValue.optin_list?this.modelValue.optin_list:"",this.updateMailchimp(this.optin_list)},watch:{optin_list(e){this.queueUpdateMailchimp(e)}},computed:{mailchimp(){return this.currentAppointmentType?.mailchimp?wa().cloneDeep(this.currentAppointmentType.mailchimp):{}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"])},methods:{validateMailchimp(e){let t=!e.optin_list.length||e.optin_text.length>0;this.validMailchimp=t,this.$emit("validationCheck",t)},queueUpdateMailchimp:function(e){this.$nextTick((()=>{this.updateMailchimp(e)}))},updateMailchimp(e){let t={};t.optin_text=this.optin_text,"string"===typeof e&&(t.optin_list=e);let i=Object.assign({},this.mailchimp,t);this.validateMailchimp(i),this.$emit("update:modelValue",i)}}};const _c=(0,he.Z)(gc,[["render",mc]]);var yc=_c;const wc={class:"appt-type-webhooks"},xc={class:"webhooks-container"},Cc={class:"webhooks-container webhooks-container-left"};function vc(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list"),f=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",wc,[s.applicableWebhooks.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("p",null,(0,r.zw)(e.translations.settings.webhooks.intro),1),(0,o.Wm)(p,{class:"md-double-line"},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.applicableWebhooks,((t,i)=>((0,o.wg)(),(0,o.j4)(d,{key:i,onClick:e=>s.editWebhook(i)},{default:(0,o.w5)((()=>[(0,o._)("div",xc,[(0,o._)("div",Cc,[(0,o._)("span",null,(0,r.zw)(t.title),1),(0,o._)("span",null,[1===t.triggers.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.trigger_single),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.trigger_plural),1)],64)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(t.triggers,((i,a)=>((0,o.wg)(),(0,o.iD)(o.HY,null,[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.triggerNames[i]),1),as.editWebhook(i)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"])])])),_:2},1032,["onClick"])))),128))])),_:1})],64)):((0,o.wg)(),(0,o.j4)(f,{key:1,label:e.translations.settings.webhooks.empty_appointment_type,class:"appt-type-webhooks-empty-state"},null,8,["label"])),(0,o.Wm)(n,{class:"md-primary",onClick:s.editWebhooksSettings},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.action),1)])),_:1},8,["onClick"])])}var bc={name:"AppointmentTypeWebhooks",data(){return{}},computed:{applicableWebhooks(){let e=this.settings.webhooks.webhooks;return e.filter((e=>0===e.appointment_types.length||e.appointment_types.indexOf(this.currentAppointmentType.id)>-1))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"])},methods:{editWebhook(e){this.$router.push({name:"webhook-single",params:{index:e}})},editWebhooksSettings(){this.$router.push("/ssa/settings/webhooks")}}};const Bc=(0,he.Z)(bc,[["render",vc],["__scopeId","data-v-6cb8f1c8"]]);var Sc=Bc;function kc(e,t,i,a,r,l){const s=(0,o.up)("customer-information-plus"),n=(0,o.up)("customer-information-basic");return e.settings.installed.license?((0,o.wg)(),(0,o.j4)(s,{key:0})):((0,o.wg)(),(0,o.j4)(n,{key:1}))}const Ac={class:"appt-type-customer-information"},Mc={class:"md-body-2"};function Dc(e,t,i,a,l,s){const n=(0,o.up)("foxy-layout"),d=(0,o.up)("foxy-checkbox"),p=(0,o.up)("foxy-button"),f=(0,o.up)("promo-plus"),u=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",Ac,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.currentAppointmentType.customer_information,((i,a)=>((0,o.wg)(),(0,o.j4)(n,{"md-row":"","md-vertical-align":"center",class:"customer-info-field",key:a},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{"md-flex":"20"},{default:(0,o.w5)((()=>[(0,o._)("span",Mc,(0,r.zw)(e.translations.appointmentTypes.customer_information[i.field]),1)])),_:2},1024),(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o.Wm)(d,{id:"display-"+a,name:"display-"+a,value:i.field.toString(),modelValue:s.display,"onUpdate:modelValue":t[0]||(t[0]=e=>s.display=e),disabled:"name"===i.field.toLowerCase()||"email"===i.field.toLowerCase(),label:e.translations.appointmentTypes.display},null,8,["id","name","value","modelValue","disabled","label"]),(0,o.Wm)(d,{id:"required-"+a,name:"required-"+a,value:i.field.toString(),modelValue:s.required,"onUpdate:modelValue":t[1]||(t[1]=e=>s.required=e),disabled:"name"===i.field.toLowerCase()||"email"===i.field.toLowerCase(),label:e.translations.appointmentTypes.required},null,8,["id","name","value","modelValue","disabled","label"])])),_:2},1024)])),_:2},1024)))),128)),(0,o._)("div",null,[(0,o.Wm)(p,{"data-test":"test-customer-info-add-field","data-test-showUpdage":"",mode:"raised",class:"md-primary",icon:"add",theme:"grey",onClick:s.ShowUpgrade},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions["add-field"]),1)])),_:1},8,["onClick"])]),(0,o.Wm)(u,{ref:"upgradeCustomerInfo"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"upgrade-url-params":l.promoPlusUpgradeParams,dismissable:!1,onPromoClicked:s.closeDialog},null,8,["upgrade-url-params","onPromoClicked"])])),_:1},512)])}var Tc={name:"AppointmentTypeCustomerInformationBasic",components:{PromoPlus:it},store:$J,data(){return{promoPlusUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"custom-fields",utm_content:"general-plus-popup"}}},computed:{customer_information:{get(){return this.currentAppointmentType.customer_information},set(e){this.updateCurrentAppointmentType({key:"customer_information",value:e})}},display:{get(){var e=this.currentAppointmentType.customer_information.filter((e=>"boolean"===typeof e.display?e.display:"true"===e.display));return e=e.map((e=>e.field)),e},set(e){this.updateDisplay(e)}},required:{get(){var e=this.currentAppointmentType.customer_information.filter((e=>"boolean"===typeof e.required?e.required:"true"===e.required));return e=e.map((e=>e.field)),e},set(e){this.updateRequired(e)}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["currentAppointmentType"])},methods:{updateDisplay:function(e){var t=wa().cloneDeep(this.currentAppointmentType.customer_information);t.map((t=>{var i=e.includes(t.field);t.display=i,i||(t.required=i)})),this.updateCurrentAppointmentType({key:"customer_information",value:t})},updateRequired:function(e){var t=wa().cloneDeep(this.currentAppointmentType.customer_information);t.map((t=>{var i=e.includes(t.field);t.required=i,i&&(t.display=i)})),this.updateCurrentAppointmentType({key:"customer_information",value:t})},closeDialog(){this.$refs["upgradeCustomerInfo"].close()},ShowUpgrade(){this.$refs["upgradeCustomerInfo"].open()},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const Oc=(0,he.Z)(Tc,[["render",Dc]]);var Gc=Oc;const Ec={class:"list-container appt-type-customer-information"},Uc={class:"list-item-group"},Fc={class:"md-list-text-container"},Ic={key:0,class:"required"},zc={class:"screen-reader-text"};function Pc(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon"),d=(0,o.up)("foxy-icon-button"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-menu"),u=(0,o.up)("foxy-menu-anchor"),c=(0,o.up)("draggable"),h=(0,o.up)("foxy-button"),m=(0,o.up)("foxy-dialog-title"),g=(0,o.up)("foxy-textfield"),_=(0,o.up)("foxy-layout"),y=(0,o.up)("foxy-checkbox"),w=(0,o.up)("foxy-select"),x=(0,o.up)("foxy-dialog-content"),C=(0,o.up)("foxy-dialog-button"),v=(0,o.up)("foxy-dialog-footer"),b=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",Ec,[((0,o.wg)(),(0,o.j4)(c,{animation:150,class:"list-group sortable-list","ghost-class":"ghost",move:s.sortableMove,tag:"ul",modelValue:s.fields,"onUpdate:modelValue":t[0]||(t[0]=e=>s.fields=e),"item-key":"id",key:l.refreshKey},{item:(0,o.w5)((({element:t,index:i})=>[(0,o._)("li",Uc,[(0,o.Wm)(n,{class:"md-primary",theme:s.getLabelColor(t),icon:t.icon?t.icon:"bookmark"},null,8,["theme","icon"]),(0,o._)("div",Fc,[(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(Object.prototype.hasOwnProperty.call(e.translations.appointmentTypes.customer_information,t.field)?e.translations.appointmentTypes.customer_information[t.field]:t.field)+" ",1),t.required?((0,o.wg)(),(0,o.iD)("span",Ic,"*")):(0,o.kq)("",!0)]),(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.custom_fields.types[t.type]),1)]),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:"md-icon-button md-list-action",onClick:e=>l.openMenu[i]=!0},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{theme:e.currentAppointmentType.label,icon:"settings"},null,8,["theme"]),(0,o._)("span",zc,(0,r.zw)(e.translations.appointmentTypes.custom_fields.actions.menu),1)])),_:2},1032,["onClick"]),(0,o.Wm)(f,{modelValue:l.openMenu[i],"onUpdate:modelValue":e=>l.openMenu[i]=e},{default:(0,o.w5)((()=>[s.isEditable(t)?((0,o.wg)(),(0,o.j4)(p,{key:0,onClick:e=>s.editInfo(i)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.actions["edit"]),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0),(0,o.Wm)(p,{onClick:e=>s.cloneInfo(i)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"content_copy"}),(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.actions["clone"]),1)])),_:2},1032,["onClick"]),s.isEditable(t)?((0,o.wg)(),(0,o.j4)(p,{key:1,onClick:e=>s.deleteInfo(i)},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.appointmentTypes.actions["delete"]),1)])),_:2},1032,["onClick"])):(0,o.kq)("",!0)])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024)])])),_:1},8,["move","modelValue"])),(0,o.Wm)(h,{"data-test":"test-customer-info-add-field",mode:"raised",class:"md-primary",onClick:s.addInfo,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions["add-field"]),1)])),_:1},8,["onClick"]),(0,o.Wm)(b,{class:"customer-inforamtion-plus-dialog",ref:"editInfoDialog"},{default:(0,o.w5)((()=>[(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions["edit"]),1)])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(_,{"md-gutter":!0,"md-vertical-align":"center"},{default:(0,o.w5)((()=>[(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:s.label,"onUpdate:modelValue":t[1]||(t[1]=e=>s.label=e),label:e.translations.appointmentTypes.custom_fields.labels.label,helptext:l.labelError?e.translations.appointmentTypes.custom_fields.errors.label:"","helptext-persistent":"","helptext-validation":"",id:"custom-field-label",ref:"labelField",valid:!l.labelError},null,8,["modelValue","label","helptext","valid"])])),_:1}),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(y,{id:"required",name:"required",modelValue:s.required,"onUpdate:modelValue":t[2]||(t[2]=e=>s.required=e),label:e.translations.appointmentTypes.custom_fields.labels["required"]},null,8,["modelValue","label"])])),_:1})])),_:1}),(0,o.Wm)(_,{"md-gutter":!0},{default:(0,o.w5)((()=>[(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,{label:e.translations.appointmentTypes.custom_fields.labels["type"],name:"type",id:"type",modelValue:s.type,"onUpdate:modelValue":t[3]||(t[3]=e=>s.type=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.customerInformationFieldTypes,(t=>((0,o.wg)(),(0,o.j4)(p,{"data-value":t,key:t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.custom_fields.types[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])])),_:1}),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:l.currentInfo.icon},null,8,["icon"])])),_:1}),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,{label:e.translations.appointmentTypes.custom_fields.labels["icon"],name:"icon",id:"icon",modelValue:s.icon,"onUpdate:modelValue":t[4]||(t[4]=e=>s.icon=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{"data-value":"",role:"option"}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.iconOptions,(e=>((0,o.wg)(),(0,o.j4)(p,{"data-value":e,key:e,role:"option",class:"icon-list-item"},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{icon:e},null,8,["icon"])])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])])),_:1})])),_:1}),"checkboxes"===l.currentInfo.type||"radios"===l.currentInfo.type?((0,o.wg)(),(0,o.j4)(_,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:s.values,"onUpdate:modelValue":t[5]||(t[5]=e=>s.values=e),label:e.translations.appointmentTypes.custom_fields.labels.values,helptext:e.translations.appointmentTypes.custom_fields.labels["one-per-line"],"helptext-persistent":"",multiline:""},null,8,["modelValue","label","helptext"])])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:s.instructions,"onUpdate:modelValue":t[6]||(t[6]=e=>s.instructions=e),label:e.translations.appointmentTypes.custom_fields.labels.instructions},null,8,["modelValue","label"])])),_:1})])),_:1}),(0,o.Wm)(v,null,{default:(0,o.w5)((()=>[(0,o.Wm)(C,{action:"dismiss",class:"md-primary",onClick:s.cancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions["cancel"]),1)])),_:1},8,["onClick"]),(0,o.Wm)(C,{class:"md-primary",onClick:s.updateInfo},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions["update"]),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)])}var Vc={name:"AppointmentTypeCustomerInformationPlus",components:{draggable:yd()},data(){return{currentInfo:{},iconOptions:["alarm","assignment","bookmark","build","cake","call","chat","check_circle","code","cloud","computer","create","done","email","face","favorite","fingerprint","flag","folder","gite","help","home","https","image","info","label","link","map","person","pets","phone","place","schedule","smartphone","star","watch","whatshot","work"],customerInformationFieldTypes:x,labelError:!1,openMenu:{},refreshKey:0}},watch:{fields:{handler(){this.refreshKey++},deep:!0}},computed:{label:{get(){return this.currentInfo.field?this.currentInfo.field:""},set(e){this.currentInfo.field.trim()!==e.trim()&&(this.labelError=!1),this.currentInfo.field=e}},required:{get(){return this.currentInfo.required},set(e){this.currentInfo.required=e}},type:{get(){return this.currentInfo["type"]},set(e){this.currentInfo.type=e}},icon:{get(){return this.currentInfo.icon},set(e){this.currentInfo.icon=e}},values:{get(){return this.currentInfo.values},set(e){this.currentInfo.values=e}},instructions:{get(){return this.currentInfo.instructions},set(e){this.currentInfo.instructions=e}},fields:{get(){return this.currentAppointmentType.custom_customer_information},set(e){this.updateCurrentAppointmentType({key:"custom_customer_information",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("appointment_types",["labelInfo"])},methods:{isEditable(e){var t=!0,i=["name","Name","email","Email","Email address"];return i.includes(e.field)&&(t=!1),t},getLabelColor(e){return this.isEditable(e)?this.labelInfo(this.currentAppointmentType.label_id,"color"):"grey"},prepInfo(e){let t=wa().clone(this.currentAppointmentType.custom_customer_information[e]);return t.values=Array.isArray(t.values)?t.values.join("\r\n"):t.values,t},editInfo(e){let t=this.prepInfo(e);t.index=e,this.currentInfo=t,this.$refs["editInfoDialog"].open()},cloneInfo(e){let t=this.prepInfo(e);this.currentInfo=t,this.$refs["editInfoDialog"].open()},deleteInfo(e){let t=this.currentAppointmentType.custom_customer_information.slice(0);t.splice(e,1),this.updateCurrentAppointmentType({key:"custom_customer_information",value:t})},addInfo(){this.currentInfo=wa().clone(w),this.$refs["editInfoDialog"].open()},checkForDuplicateLabel(){let e=this.label.trim().toLowerCase(),t=this.currentAppointmentType.custom_customer_information.map((e=>e.field.trim().toLowerCase()));Object.prototype.hasOwnProperty.call(this.currentInfo,"index")&&(t=t.filter(((e,t)=>t!==this.currentInfo.index))),this.labelError=t.includes(e)},updateInfo(){if(this.checkForDuplicateLabel(),this.labelError){let e=this.$refs.labelField;return void e.$el.focus()}let e=this.currentAppointmentType.custom_customer_information.slice(0),t=Object.prototype.hasOwnProperty.call(this.currentInfo,"index")?this.currentInfo.index:void 0,i=wa().clone(this.currentInfo),a=i.values.split(/\n/),o=a.map((e=>e.trim())).filter((e=>e));i.values=o,"undefined"!==typeof t?(delete i.index,e.splice(t,1,i)):e.push(i),this.updateCurrentAppointmentType({key:"custom_customer_information",value:e}),this.$refs["editInfoDialog"].close(),this.currentInfo={}},cancel(){this.currentInfo={},this.$refs["editInfoDialog"].close()},sortableMove(e){return!e.related.classList.contains("sortable-fixed")},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const Wc=(0,he.Z)(Vc,[["render",Pc]]);var Rc=Wc,Lc={name:"AppointmentTypeCustomerInformation",store:$J,props:{bulkMode:{default:!1,type:Boolean}},components:{CustomerInformationBasic:Gc,CustomerInformationPlus:Rc},data(){return{}},beforeMount(){this.bulkMode&&this.defineAppointmentTypeCustomerInformation(this.settings)},computed:{...(0,m.rn)(["settings"])},methods:{...(0,m.OI)("appointment_types",["defineAppointmentTypeCustomerInformation"])}};const jc=(0,he.Z)(Lc,[["render",kc]]);var qc=jc;const Nc={class:"appt-type-notifications"},$c={class:"appt-type-notifications__selected"},Hc={class:"subsection-title"},Zc={class:"md-list-item-container"},Yc={class:"md-list-text-container"},Kc={class:"appt-type-notifications__opt-in"},Jc={class:"subsection-title"},Xc={class:"description"},Qc={key:0,class:"opt-in-settings"};function eh(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-list"),f=(0,o.up)("foxy-switch"),u=(0,o.up)("foxy-textfield"),c=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",Nc,[s.applicableNotifications.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o._)("div",$c,[(0,o._)("h3",Hc,(0,r.zw)(e.translations.settings.notifications.selected),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.notifications.intro),1),(0,o.Wm)(p,{class:"md-double-line"},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.applicableNotifications,(t=>((0,o.wg)(),(0,o.j4)(d,{key:t.id,onClick:e=>s.editNotification(t.id)},{default:(0,o.w5)((()=>[(0,o._)("div",Zc,[(0,o._)("div",Yc,[(0,o._)("span",null,(0,r.zw)(t.title),1),(0,o._)("span",null,[e.remindersInstalled&&t.duration>0?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.displayDuration(t.duration)+" "+e.translations.settings.notifications.when[t.when].toLowerCase()+" "),1)],64)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.notifications.triggers[t.trigger]),1)])]),(0,o.Wm)(n,{class:"md-list-action md-primary",onClick:e=>s.editNotification(t.id)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"])])])),_:2},1032,["onClick"])))),128))])),_:1})]),(0,o._)("div",Kc,[(0,o._)("h3",Jc,(0,r.zw)(e.translations.settings.notifications.optinSettings.title),1),(0,o._)("p",Xc,(0,r.zw)(e.translations.settings.notifications.optinSettings.description),1),(0,o.Wm)(f,{modelValue:s.optinEnabled,"onUpdate:modelValue":t[0]||(t[0]=e=>s.optinEnabled=e),id:"optinEnabled",name:"optinEnabled"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.optinSettings.enabled),1)])),_:1},8,["modelValue"]),s.optinEnabled?((0,o.wg)(),(0,o.iD)("div",Qc,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.notifications.optinSettings.explanation),1),(0,o.Wm)(u,{modelValue:s.optinLabel,"onUpdate:modelValue":t[1]||(t[1]=e=>s.optinLabel=e),required:"",label:e.translations.settings.notifications.optinSettings.labelField.label,valid:l.isOptinLabelValid,helptext:e.translations.settings.notifications.optinSettings.labelField.helptext,"helptext-validation":"","helptext-persistent":""},null,8,["modelValue","label","valid","helptext"]),(0,o.Wm)(u,{modelValue:s.optinDescription,"onUpdate:modelValue":t[2]||(t[2]=e=>s.optinDescription=e),label:e.translations.settings.notifications.optinSettings.descriptionField.label,helptext:e.translations.settings.notifications.optinSettings.descriptionField.helptext,"helptext-persistent":""},null,8,["modelValue","label","helptext"])])):(0,o.kq)("",!0)])],64)):((0,o.wg)(),(0,o.j4)(c,{key:1,label:e.translations.settings.notifications.empty_appointment_type},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"md-primary",onClick:s.editNotificationsSettings},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.actions.editAll),1)])),_:1},8,["onClick"])])),_:1},8,["label"]))])}var th={name:"AppointmentTypeNotifications",data(){return{isOptinLabelValid:!0}},emits:["validationCheck"],computed:{optinEnabled:{get(){return this.currentAppointmentType.notifications.notifications_opt_in?.enabled||!1},set(e){!0===e&&this.maybePopulateOptinValues(),this.currentAppointmentType.notifications.notifications_opt_in||(this.currentAppointmentType.notifications.notifications_opt_in={}),this.currentAppointmentType.notifications.notifications_opt_in.enabled=e,this.validationCheck()}},optinLabel:{get(){return this.currentAppointmentType.notifications.notifications_opt_in?.label},set(e){this.currentAppointmentType.notifications.notifications_opt_in.label=e,this.validationCheck()}},optinDescription:{get(){return this.currentAppointmentType.notifications.notifications_opt_in?.description},set(e){this.currentAppointmentType.notifications.notifications_opt_in.description=e,this.validationCheck()}},applicableNotifications(){let e=this.settings.notifications.notifications;return e.filter((e=>!1!==e.active&&(0===e.appointment_types.length||e.appointment_types.indexOf(this.currentAppointmentType.id)>-1)))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)(["displayDuration"]),...(0,m.Se)("notifications",["remindersInstalled"])},methods:{maybePopulateOptinValues(){wa().isEmpty(this.currentAppointmentType?.notifications?.notifications_opt_in)&&(this.currentAppointmentType.notifications=C)},editNotification(e){this.$router.push({name:"notification-single",params:{id:e}})},editNotificationsSettings(){this.$router.push("/ssa/settings/notifications")},validationCheck(){let e=!0;this.optinEnabled&&(e=this.optinLabel.length>0,this.isOptinLabelValid=e),this.$emit("validationCheck",e)}}};const ih=(0,he.Z)(th,[["render",eh]]);var ah=ih;const oh={class:"appt-type-capacity"},rh={key:4,class:"md-checkbox-with-note"},lh={class:"md-checkbox-note"};function sh(e,t,i,a,l,s){const n=(0,o.up)("foxy-list-item"),d=(0,o.up)("foxy-select"),p=(0,o.up)("foxy-layout"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-checkbox"),c=(0,o.up)("promo-capacity"),h=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",oh,[s.capacityEnabled?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",{key:0,class:"accordion-item-disabled-overlay",onClick:t[0]||(t[0]=(...e)=>s.maybeShowUpgrade&&s.maybeShowUpgrade(...e))})),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o.Wm)(d,{label:e.translations.appointmentTypes.capacity.fields.capacity_type.label,id:"capacity_type",disabled:!s.capacityEnabled,modelValue:s.capacity_type,"onUpdate:modelValue":t[1]||(t[1]=e=>s.capacity_type=e),helptext:s.capacityTypeHelp},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.capacityTypes,(t=>((0,o.wg)(),(0,o.j4)(n,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.capacity.capacityTypeOptions[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","disabled","modelValue","helptext"])])),_:1}),s.staffEnabled&&!s.resourcesEnabled&&"group"===s.capacity_type?((0,o.wg)(),(0,o.j4)(f,{key:1,type:"number",min:"1",max:"100000",disabled:!s.capacityEnabled,modelValue:l.v$.staff_capacity.$model,"onUpdate:modelValue":t[2]||(t[2]=e=>l.v$.staff_capacity.$model=e),modelModifiers:{number:!0},label:e.translations.appointmentTypes.capacity.fields.staff_capacity.label,helptext:e.translations.appointmentTypes.capacity.fields.staff_capacity.help,"helptext-persistent":"",id:"staff-capacity"},null,8,["disabled","modelValue","label","helptext"])):(0,o.kq)("",!0),s.resourcesEnabled&&!s.staffEnabled&&"group"===s.capacity_type?((0,o.wg)(),(0,o.j4)(f,{key:2,type:"number",min:1,max:1e5,disabled:!s.capacityEnabled,modelValue:l.v$.resources_capacity.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>l.v$.resources_capacity.$model=e),modelModifiers:{number:!0},label:e.translations.appointmentTypes.capacity.fields.resources_capacity.label,helptext:e.translations.appointmentTypes.capacity.fields.resources_capacity.help,"helptext-persistent":"",id:"resources-capacity"},null,8,["disabled","modelValue","label","helptext"])):(0,o.kq)("",!0),s.resourcesEnabled&&s.staffEnabled&&"group"===s.capacity_type?((0,o.wg)(),(0,o.j4)(f,{key:3,type:"number",min:1,max:1e5,disabled:!s.capacityEnabled,modelValue:l.v$.resources_staff_capacity.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>l.v$.resources_staff_capacity.$model=e),modelModifiers:{number:!0},label:e.translations.appointmentTypes.capacity.fields.resources_staff_capacity.label,helptext:e.translations.appointmentTypes.capacity.fields.resources_staff_capacity.help,"helptext-persistent":"",id:"resources-staff-capacity"},null,8,["disabled","modelValue","label","helptext"])):(0,o.kq)("",!0),s.staffEnabled||s.resourcesEnabled?((0,o.wg)(),(0,o.iD)("div",rh,[(0,o.Wm)(u,{id:"has_max_capacity",name:"has_max_capacity",onChange:s.maxUpdateCapacity,modelValue:s.has_max_capacity,"onUpdate:modelValue":t[5]||(t[5]=e=>s.has_max_capacity=e),label:e.translations.appointmentTypes.capacity.fields.has_max_capacity.label},null,8,["onChange","modelValue","label"]),(0,o._)("p",lh,(0,r.zw)(e.translations.appointmentTypes.capacity.fields.has_max_capacity.help),1)])):(0,o.kq)("",!0),l.showCapacity?((0,o.wg)(),(0,o.j4)(f,{key:5,type:"number",min:1,max:1e5,disabled:!s.capacityEnabled,modelValue:l.v$.capacity.$model,"onUpdate:modelValue":t[6]||(t[6]=e=>l.v$.capacity.$model=e),modelModifiers:{number:!0},valid:!l.v$.capacity.$invalid,label:s.capacityLabel,helptext:s.capacityError?l.v$.capacity.$invalid?e.translations.appointmentTypes.capacity.fields.capacity.error_bounds:e.translations.appointmentTypes.capacity.fields.capacity.error_mismatch:s.capacityHelp,"helptext-persistent":"","helptext-validation":"",id:"capacity"},null,8,["disabled","modelValue","valid","label","helptext"])):(0,o.kq)("",!0),(0,o.Wm)(h,{ref:"upgradeCapacity"},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{dismissable:!1,onPromoClicked:s.closeDialog},null,8,["onPromoClicked"])])),_:1},512)])}const nh={href:"https://simplyscheduleappointments.com/features",target:"_blank"},dh=["src"],ph=(0,o._)("div",{class:"md-title"},[(0,o.Uk)(" Simply Schedule Appointments "),(0,o._)("strong",null,"Plus")],-1);function fh(e,t,i,a,l,s){const n=(0,o.up)("foxy-fab"),d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-area"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-card-actions"),h=(0,o.up)("foxy-card-content"),m=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(m,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[i.dismissable?((0,o.wg)(),(0,o.j4)(n,{key:0,"wrapper-class":"promo-close-fab",mini:"",icon:"clear",theme:"white",onClick:s.clearAd,"aria-label":e.translations.promo.dismissNotice},null,8,["onClick","aria-label"])):(0,o.kq)("",!0),(0,o._)("a",nh,[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/upsell-promo-plus.svg",alt:"Simply Schedule Appointments Plus",class:"promo-img promo-plus"},null,8,dh)])])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[ph])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.capacityText),1),(0,o._)("ul",null,[(0,o._)("li",null,(0,r.zw)(e.translations.promo.capacityTextBullets.google),1),(0,o._)("li",null,(0,r.zw)(e.translations.promo.capacityTextBullets.webMeeting),1)])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{mode:"raised",theme:"accent",href:s.upgradeLink,target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)(" Upgrade now ")])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var uh={name:"PromoCapacity",store:$J,props:{dismissable:{type:Boolean,default:!0}},data(){return{slug:"promo-capacity",purchasePlusLink:qe}},computed:{upgradeLink(){const e=this.purchasePlusLink.split("?"),t=e[0];let i=e.length>1?Wt().parse(e[1]):null;if(!i)return this.purchasePlusLink;const a={utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"capacity",utm_content:"capacity-plus-popup"};return i=Object.assign(i,a),t+"?"+Wt().stringify(i)},...(0,m.rn)("translations",["translations"])},methods:{clearAd(){this.$emit("clearAd",this.slug)},promoClicked(){this.$emit("promoClicked")}}};const ch=(0,he.Z)(uh,[["render",fh]]);var hh=ch,mh={name:"AppointmentTypeCapacity",components:{PromoCapacity:hh},props:{bulkMode:{default:!1,type:Boolean}},data(){return{v$:(0,Rd.Xw)(),capacityTypes:N,showCapacity:!0}},validations(){const e=this.bulkMode;return{capacity:{required:(0,Ld.CF)((()=>!e)),minValue:(0,Ld.uv)(1),maxValue:(0,Ld.PW)(1e5)},staff_capacity:{required:(0,Ld.CF)((()=>!e)),minValue:(0,Ld.uv)(1),maxValue:(0,Ld.PW)(1e5)},resources_capacity:{required:(0,Ld.CF)((()=>!e)),minValue:(0,Ld.uv)(1),maxValue:(0,Ld.PW)(1e5)},resources_staff_capacity:{required:(0,Ld.CF)((()=>!e)),minValue:(0,Ld.uv)(1),maxValue:(0,Ld.PW)(1e5)}}},mounted(){this.showCapacity=!this.staffEnabled&&!this.resourcesEnabled||this.has_max_capacity,this.staffEnabled||this.resourcesEnabled||1e5!=this.capacity||this.updateCurrentAppointmentType({key:"capacity",value:1})},watch:{capacity_type(e,t){this.staffUpdateCapacity({val:e,oldVal:t}),this.resourcesUpdateCapacity({val:e,oldVal:t})}},computed:{capacity:{get(){return this.currentAppointmentType?parseInt(this.currentAppointmentType.capacity,10):1},set(e){this.updateCurrentAppointmentType({key:"capacity",value:e}),this.v$.capacity.$touch(),this.validationCheck()}},capacity_type:{get(){return this.currentAppointmentType?this.currentAppointmentType.capacity_type:"individual"},set(e){this.updateCurrentAppointmentType({key:"capacity_type",value:e})}},capacityEnabled(){return this.settings.capacity&&this.settings.capacity.enabled},capacityError(){return!this.bulkMode&&(!!("group"===this.capacity_type&&this.staffEnabled&&this.staff_capacity>this.capacity)||(!!("group"===this.capacity_type&&this.resourcesEnabled&&this.resources_capacity>this.capacity)||this.v$.capacity.$invalid))},capacityHelp(){return this.staffEnabled?this.translations.appointmentTypes.capacity.fields.capacity.help_staff:"group"===this.capacity_type?this.translations.appointmentTypes.capacity.fields.capacity.help_group:this.translations.appointmentTypes.capacity.fields.capacity.help},capacityLabel(){return this.staffEnabled?this.translations.appointmentTypes.capacity.fields.capacity.label_staff:this.translations.appointmentTypes.capacity.fields.capacity.label},capacityTypeHelp(){return this.staffEnabled&&this.resourcesEnabled?this.translations.appointmentTypes.capacity.fields.capacity_type.help_staff_resources:this.staffEnabled?this.translations.appointmentTypes.capacity.fields.capacity_type.help_staff:this.resourcesEnabled?this.translations.appointmentTypes.capacity.fields.capacity_type.help_resources:this.translations.appointmentTypes.capacity.fields.capacity_type.help},has_max_capacity:{get(){return!!this.currentAppointmentType&&Ps(this.currentAppointmentType.has_max_capacity)},set(e){this.updateCurrentAppointmentType({key:"has_max_capacity",value:e}),this.showCapacity=!this.staffEnabled&&!this.resourcesEnabled||e,this.validationCheck()}},staff_capacity:{get(){return this.currentAppointmentType?parseInt(this.currentAppointmentType.staff_capacity,10):1},set(e){this.updateCurrentAppointmentType({key:"staff_capacity",value:e}),this.v$.staff_capacity.$touch(),this.validationCheck()}},resources_capacity:{get(){return this.currentAppointmentType?parseInt(this.currentAppointmentType.resource_capacity,10):1},set(e){this.updateCurrentAppointmentType({key:"resource_capacity",value:e}),this.v$.resources_capacity.$touch(),this.validationCheck()}},resources_staff_capacity:{get(){return this.currentAppointmentType?parseInt(this.currentAppointmentType.resource_capacity,10):1},set(e){this.resources_capacity=e,this.staff_capacity=e}},staffEnabled(){return this.staffModule.enabled&&""!==this.currentAppointmentType.staff.required},resourcesEnabled(){return this.resourcesModule.enabled&&0!=this.currentAppointmentType.resources_settings.length},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.Se)("staff",["staffModule"]),...(0,m.Se)("resources",["resourcesModule"])},methods:{closeDialog(){this.$refs["upgradeCapacity"].close()},maxUpdateCapacity(e){let t=e?10:1e5;this.updateCurrentAppointmentType({key:"capacity",value:t})},maybeShowUpgrade(){this.capacityEnabled||this.$refs["upgradeCapacity"].open()},staffUpdateCapacity(e){e.val!==e.oldVal&&this.staffEnabled&&"individual"===e.val&&this.updateCurrentAppointmentType({key:"staff_capacity",value:1})},resourcesUpdateCapacity(e){e.val!==e.oldVal&&this.resourcesEnabled&&"individual"===e.val&&this.updateCurrentAppointmentType({key:"resource_capacity",value:1})},validationCheck(){this.$emit("validationCheck",!this.capacityError)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const gh=(0,he.Z)(mh,[["render",sh]]);var _h=gh;const yh={class:"tabs"},wh={class:"tabs-nav"},xh=["onClick"],Ch={class:"step"},vh={class:"img-container"},bh={class:"tabs-content"};function Bh(e,t,i,a,l,s){const n=(0,o.up)("resources-team-list"),d=(0,o.up)("resources-team-radio"),p=(0,o.up)("list-resources-list-team"),f=(0,o.up)("list-resources-radio-team"),u=(0,o.up)("radio-resources-list-team"),c=(0,o.up)("radio-resources-radio-team"),h=(0,o.up)("date-month"),m=(0,o.up)("date-week"),g=(0,o.up)("date-only-available"),_=(0,o.up)("time-of-day-columns"),y=(0,o.up)("single-column"),w=(0,o.up)("row-view"),x=(0,o.up)("block-view"),C=(0,o.up)("appointment-options"),v=(0,o.up)("express-single-column"),b=(0,o.up)("express-rows"),B=(0,o.up)("express-blocks"),S=(0,o.up)("express-list-resources-multiple-time"),k=(0,o.up)("express-radio-resources-multiple-time"),A=(0,o.up)("express-radio-resources-single-time"),M=(0,o.up)("express-list-resources-single-time"),D=(0,o.up)("express-radio-resources-rows"),T=(0,o.up)("express-list-resources-rows"),O=(0,o.up)("express-radio-resources-block"),G=(0,o.up)("express-list-resources-block"),E=(0,o.up)("list-resources-list-team-multiple-time"),U=(0,o.up)("list-resources-radio-team-multiple-time"),F=(0,o.up)("radio-resources-radio-team-multiple-time"),I=(0,o.up)("radio-resources-list-team-multiple-time"),z=(0,o.up)("list-resources-radio-team-single-time"),P=(0,o.up)("list-resources-list-team-single-time"),V=(0,o.up)("radio-resources-radio-team-single-time"),W=(0,o.up)("radio-resources-list-team-single-time"),R=(0,o.up)("list-resources-list-team-rows"),L=(0,o.up)("list-resources-radio-team-rows"),j=(0,o.up)("radio-resources-list-team-rows"),q=(0,o.up)("radio-resources-radio-team-rows"),N=(0,o.up)("list-resources-list-team-block"),$=(0,o.up)("radio-resources-list-team-block"),H=(0,o.up)("list-resources-radio-team-block"),Z=(0,o.up)("radio-resources-radio-team-block"),Y=(0,o.up)("foxy-list-item"),K=(0,o.up)("foxy-select"),J=(0,o.up)("foxy-switch"),X=(0,o.up)("promo-pro"),Q=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",yh,[(0,o._)("div",wh,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.steps,((t,i)=>((0,o.wg)(),(0,o.iD)("div",{key:t,class:(0,r.C_)(["tabs-nav-tab",[t===l.activeStep?"tabs-nav-tab-active":"",{"tabs-nav-tab-disabled":!s.bookingFlowEnabled},[`md-theme-${s.label.color}`]]]),onClick:e=>s.activate(t)},[(0,o._)("span",{class:(0,r.C_)(["number",[`md-theme-${s.label.color}`]])},(0,r.zw)(i+1),3),(0,o._)("span",Ch,(0,r.zw)(e.translations.appointmentTypes.steps[t]),1),(0,o._)("div",vh,["resources"!=t&&"team"!=t||!s.shouldShowListViewForResourcesTeam?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(n,{key:0,color:s.label.color},null,8,["color"])),"resources"!=t&&"team"!=t||!s.shouldShowRadioViewForResourcesTeam?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:1,color:s.label.color},null,8,["color"])),"resources_and_team"==t&&"list"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(p,{key:2,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"resources_and_team"==t&&"list"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(f,{key:3,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"resources_and_team"==t&&"radio"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(u,{key:4,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"resources_and_team"==t&&"radio"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(c,{key:5,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"date"==t&&"month"==s.dateView?((0,o.wg)(),(0,o.j4)(h,{key:6,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"date"==t&&"week"==s.dateView?((0,o.wg)(),(0,o.j4)(m,{key:7,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"date"==t&&"only_available"==s.dateView?((0,o.wg)(),(0,o.j4)(g,{key:8,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"time"==t&&"time_of_day_columns"==s.timeView?((0,o.wg)(),(0,o.j4)(_,{key:9,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"time"==t&&"single_column"==s.timeView?((0,o.wg)(),(0,o.j4)(y,{key:10,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"time"==t&&"rows"==s.timeView?((0,o.wg)(),(0,o.j4)(w,{key:11,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"time"==t&&"block"==s.timeView?((0,o.wg)(),(0,o.j4)(x,{key:12,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&s.resourcesTeamNotRequired?((0,o.wg)(),(0,o.j4)(C,{key:13,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&s.resourcesTeamNotRequired?((0,o.wg)(),(0,o.j4)(v,{key:14,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&s.resourcesTeamNotRequired?((0,o.wg)(),(0,o.j4)(b,{key:15,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&s.resourcesTeamNotRequired?((0,o.wg)(),(0,o.j4)(B,{key:16,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&s.shouldShowListViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(S,{key:17,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&s.shouldShowRadioViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(k,{key:18,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&s.shouldShowRadioViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(A,{key:19,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&s.shouldShowListViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(M,{key:20,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&s.shouldShowRadioViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(D,{key:21,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&s.shouldShowListViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(T,{key:22,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&s.shouldShowRadioViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(O,{key:23,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&s.shouldShowListViewForResourcesTeam?((0,o.wg)(),(0,o.j4)(G,{key:24,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&"list"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(E,{key:25,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&"list"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(U,{key:26,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&"radio"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(F,{key:27,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"time_of_day_columns"==s.timeView&&"radio"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(I,{key:28,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&"list"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(z,{key:29,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&"list"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(P,{key:30,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&"radio"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(V,{key:31,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"single_column"==s.timeView&&"radio"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(W,{key:32,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&"list"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(R,{key:33,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&"list"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(L,{key:34,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&"radio"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(j,{key:35,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"rows"==s.timeView&&"radio"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(q,{key:36,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&"list"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(N,{key:37,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&"radio"==s.resourcesView&&"list"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)($,{key:38,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&"list"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(H,{key:39,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0),"appointmentOptions"==t&&"block"==s.timeView&&"radio"==s.resourcesView&&"radio"==s.teamView&&s.isResourcesTeamRequired?((0,o.wg)(),(0,o.j4)(Z,{key:40,color:s.label.color},null,8,["color"])):(0,o.kq)("",!0)])],10,xh)))),128))]),(0,o._)("div",bh,["resources"!=l.activeStep&&"appointmentOptions"!=l.activeStep&&"resources_and_team"!=l.activeStep||!s.onlyResourcesRequired&&!s.isResourcesTeamRequired?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(K,{key:0,label:e.translations.appointmentTypes.resourcesView,id:"resourcesView",modelValue:s.resourcesView,"onUpdate:modelValue":t[0]||(t[0]=e=>s.resourcesView=e),disabled:!s.bookingFlowEnabled},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.resourceViews,(t=>((0,o.wg)(),(0,o.j4)(Y,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.resourcesViews[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"])),"team"!=l.activeStep&&"appointmentOptions"!=l.activeStep&&"resources_and_team"!=l.activeStep||!s.onlyTeamRequired&&!s.isResourcesTeamRequired?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(K,{key:1,label:e.translations.appointmentTypes.teamView,id:"teamView",modelValue:s.teamView,"onUpdate:modelValue":t[1]||(t[1]=e=>s.teamView=e),disabled:!s.bookingFlowEnabled},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.teamViews,(t=>((0,o.wg)(),(0,o.j4)(Y,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.teamViews[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"])),"date"==l.activeStep?((0,o.wg)(),(0,o.j4)(K,{key:2,label:e.translations.appointmentTypes.dateView,id:"dateView",modelValue:s.dateView,"onUpdate:modelValue":t[2]||(t[2]=e=>s.dateView=e),disabled:!s.bookingFlowEnabled},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.dateViewOptions,(t=>((0,o.wg)(),(0,o.j4)(Y,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.dateViews[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"])):(0,o.kq)("",!0),"time"==l.activeStep||"appointmentOptions"==l.activeStep?((0,o.wg)(),(0,o.j4)(K,{key:3,label:e.translations.appointmentTypes.timeView,id:"timeView",modelValue:s.timeView,"onUpdate:modelValue":t[3]||(t[3]=e=>s.timeView=e),disabled:!s.bookingFlowEnabled},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.timeViews,(t=>((0,o.wg)(),(0,o.j4)(Y,{key:t,"data-value":t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.timeViews[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"])):(0,o.kq)("",!0),"time"==l.activeStep||"appointmentOptions"==l.activeStep?((0,o.wg)(),(0,o.j4)(J,{key:4,modelValue:s.showEndTime,"onUpdate:modelValue":t[4]||(t[4]=e=>s.showEndTime=e),id:"show_end_time",theme:s.label["color"],name:"show_end_time"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.showEndTime),1)])),_:1},8,["modelValue","theme"])):(0,o.kq)("",!0)]),(0,o.Wm)(Q,{ref:"upgradeBookingFlow"},{default:(0,o.w5)((()=>[(0,o.Wm)(X,{"upgrade-url-params":l.promoProUpgradeParams,"pro-text":e.translations.promo.proTextPopUp,dismissable:!1,onPromoClicked:s.closeDialog},null,8,["upgrade-url-params","pro-text","onPromoClicked"])])),_:1},512)])}const Sh={width:"138",height:"79",viewBox:"0 0 138 79",fill:"none",xmlns:"http://www.w3.org/2000/svg"},kh=(0,o.uE)('',16),Ah={filter:"url(#filter0_ddd_1887_13357)"},Mh=(0,o.uE)('',24);function Dh(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Sh,[kh,(0,o._)("g",Ah,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"59.4844",y:"55.499",width:"17.7188",height:"6.15",fill:"#8BC34A"},null,2)]),Mh]))])}var Th={name:"DateMonth",props:{color:{default:"light-green",type:String}}};const Oh=(0,he.Z)(Th,[["render",Dh]]);var Gh=Oh;const Eh={width:"143",height:"46",viewBox:"0 0 143 46",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Uh=(0,o.uE)('',7),Fh={filter:"url(#filter1_ddd_3046_15637)"},Ih=(0,o.uE)('',7);function zh(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Eh,[Uh,(0,o._)("g",Fh,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"35.8584",y:"27",width:"23.8524",height:"12.2",fill:"#8BC34A"},null,2)]),Ih]))])}var Ph={name:"DateWeek",props:{color:{default:"light-green",type:String}}};const Vh=(0,he.Z)(Ph,[["render",zh]]);var Wh=Vh;const Rh={width:"138",height:"45",viewBox:"0 0 138 45",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Lh=(0,o.uE)('',7),jh={filter:"url(#filter2_ddd_1862_13311)"},qh=(0,o.uE)('',7);function Nh(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Rh,[Lh,(0,o._)("g",jh,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"56.5938",y:"26.6001",width:"24.375",height:"12.2",fill:"#8BC34A"},null,2)]),qh]))])}var $h={name:"DateOnlyAvailable",props:{color:{default:"light-green",type:String}}};const Hh=(0,he.Z)($h,[["render",Nh]]);var Zh=Hh;const Yh={width:"140",height:"97",viewBox:"0 0 140 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Kh={filter:"url(#filter0_ddd_2801_15627)"},Jh=(0,o._)("rect",{x:"116",y:"83.425",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Xh={filter:"url(#filter1_ddd_2801_15627)"},Qh=(0,o._)("rect",{x:"91",y:"83.425",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),em={filter:"url(#filter2_ddd_2801_15627)"},tm=(0,o._)("rect",{x:"116",y:"71.7402",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),im={filter:"url(#filter3_ddd_2801_15627)"},am=(0,o._)("rect",{x:"91",y:"71.7402",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),om=(0,o.uE)('',22),rm={filter:"url(#filter4_ddd_2801_15627)"},lm=(0,o.uE)('',21),sm={filter:"url(#filter5_ddd_2801_15627)"},nm=(0,o._)("rect",{x:"116",y:"25",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),dm={filter:"url(#filter6_ddd_2801_15627)"},pm=(0,o._)("rect",{x:"91",y:"25",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),fm={filter:"url(#filter7_ddd_2801_15627)"},um=(0,o._)("rect",{x:"91",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),cm={filter:"url(#filter8_ddd_2801_15627)"},hm=(0,o._)("rect",{x:"118.961",y:"40.7852",width:"13.3247",height:"1.025",fill:"white"},null,-1),mm=(0,o._)("rect",{x:"25.3125",y:"20.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),gm=(0,o._)("rect",{x:"101",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),_m={filter:"url(#filter9_ddd_2801_15627)"},ym=(0,o._)("rect",{x:"116",y:"48.3701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),wm={filter:"url(#filter10_ddd_2801_15627)"},xm=(0,o._)("rect",{x:"91",y:"48.3701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Cm={filter:"url(#filter11_ddd_2801_15627)"},vm=(0,o._)("rect",{x:"116",y:"60.0552",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),bm={filter:"url(#filter12_ddd_2801_15627)"},Bm=(0,o._)("rect",{x:"91",y:"60.0552",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Sm=(0,o.uE)('',1);function km(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Yh,[(0,o._)("g",Kh,[Jh,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"87.5251",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Xh,[Qh,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"87.5251",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",em,[tm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"75.8403",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",im,[am,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"75.8403",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),om,(0,o._)("g",rm,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"36.5653",y:"57.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),lm,(0,o._)("g",sm,[nm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"29.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",dm,[pm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"29.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",fm,[um,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",cm,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"116.1",y:"36.7851",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),hm]),mm,gm,(0,o._)("g",_m,[ym,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"52.4702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",wm,[xm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"52.4702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Cm,[vm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"64.1553",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",bm,[Bm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"93.9608",y:"64.1553",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Sm]))])}var Am={name:"AppointmentOptions",props:{color:{default:"light-green",type:String}}};const Mm=(0,he.Z)(Am,[["render",km]]);var Dm=Mm;const Tm={width:"139",height:"83",viewBox:"0 0 139 83",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Om=(0,o.uE)('',8),Gm={filter:"url(#filter0_ddd_1773_15061)"},Em=(0,o._)("rect",{x:"40.7065",y:"72.4092",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Um={filter:"url(#filter1_ddd_1773_15061)"},Fm=(0,o._)("rect",{x:"40.7065",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Im={filter:"url(#filter2_ddd_1773_15061)"},zm=(0,o._)("rect",{x:"43.7915",y:"50.2959",width:"13.8835",height:"0.732234",fill:"white"},null,-1),Pm={filter:"url(#filter3_ddd_1773_15061)"},Vm=(0,o._)("rect",{x:"40.7065",y:"55.7148",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Wm={filter:"url(#filter4_ddd_1773_15061)"},Rm=(0,o._)("rect",{x:"40.7065",y:"64.0615",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Lm={filter:"url(#filter5_ddd_1773_15061)"},jm=(0,o._)("rect",{x:"12.4487",y:"71.5303",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),qm={filter:"url(#filter6_ddd_1773_15061)"},Nm=(0,o._)("rect",{x:"68.9644",y:"71.5303",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),$m={filter:"url(#filter7_ddd_1773_15061)"},Hm=(0,o._)("rect",{x:"97.2222",y:"71.5303",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Zm={filter:"url(#filter8_ddd_1773_15061)"},Ym=(0,o._)("rect",{x:"12.4487",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Km={filter:"url(#filter9_ddd_1773_15061)"},Jm=(0,o._)("rect",{x:"68.9644",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Xm={filter:"url(#filter10_ddd_1773_15061)"},Qm=(0,o._)("rect",{x:"97.2222",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),eg={filter:"url(#filter11_ddd_1773_15061)"},tg=(0,o._)("rect",{x:"12.4487",y:"46.9277",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ig={filter:"url(#filter12_ddd_1773_15061)"},ag=(0,o._)("rect",{x:"68.9644",y:"46.9277",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),og={filter:"url(#filter13_ddd_1773_15061)"},rg=(0,o._)("rect",{x:"97.2222",y:"46.9277",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),lg={filter:"url(#filter14_ddd_1773_15061)"},sg=(0,o._)("rect",{x:"12.4487",y:"54.8359",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ng={filter:"url(#filter15_ddd_1773_15061)"},dg=(0,o._)("rect",{x:"68.9644",y:"54.8359",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),pg={filter:"url(#filter16_ddd_1773_15061)"},fg=(0,o._)("rect",{x:"97.2222",y:"54.8359",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ug={filter:"url(#filter17_ddd_1773_15061)"},cg=(0,o._)("rect",{x:"12.4487",y:"63.1836",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),hg={filter:"url(#filter18_ddd_1773_15061)"},mg=(0,o._)("rect",{x:"68.9644",y:"63.1836",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),gg={filter:"url(#filter19_ddd_1773_15061)"},_g=(0,o._)("rect",{x:"97.2222",y:"63.1836",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),yg=(0,o.uE)('',1);function wg(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Tm,[Om,(0,o._)("g",Gm,[Em,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"43.7915",y:"75.3379",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Um,[Fm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"43.7915",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Im,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"40.8065",y:"47.4672",width:"19.8539",height:"6.39011",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),zm]),(0,o._)("g",Pm,[Vm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"43.7915",y:"58.6436",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Wm,[Rm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"43.7915",y:"66.9902",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Lm,[jm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.5337",y:"74.459",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",qm,[Nm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.0493",y:"74.459",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",$m,[Hm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.307",y:"74.459",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Zm,[Ym,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.5337",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Km,[Jm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.0493",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Xm,[Qm,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.307",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",eg,[tg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.5337",y:"49.8564",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",ig,[ag,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.0493",y:"49.8564",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",og,[rg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.307",y:"49.8564",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",lg,[sg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.5337",y:"57.7646",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",ng,[dg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.0493",y:"57.7646",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",pg,[fg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.307",y:"57.7646",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",ug,[cg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.5337",y:"66.1123",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",hg,[mg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.0493",y:"66.1123",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",gg,[_g,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.307",y:"66.1123",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),yg]))])}var xg={name:"TimeOfDayColumns",props:{color:{default:"light-green",type:String}}};const Cg=(0,he.Z)(xg,[["render",wg]]);var vg=Cg;const bg={width:"134",height:"88",viewBox:"0 0 134 88",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Bg={filter:"url(#filter0_ddd_2919_15498)"},Sg=(0,o._)("rect",{x:"52.2188",y:"73.8701",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),kg=(0,o._)("rect",{x:"0.1875",y:"0.0700684",width:"30.4688",height:"4.92",fill:"#434343"},null,-1),Ag=(0,o._)("rect",{x:"0.1875",y:"6.21997",width:"23.1562",height:"4.92",fill:"#BDBDBD"},null,-1),Mg=(0,o._)("rect",{x:"109.875",y:"0.0700684",width:"23.1562",height:"4.92",fill:"#BDBDBD"},null,-1),Dg={filter:"url(#filter1_ddd_2919_15498)"},Tg=(0,o._)("rect",{x:"52.2188",y:"27.1299",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),Og={filter:"url(#filter2_ddd_2919_15498)"},Gg=(0,o._)("rect",{x:"56.3433",y:"42.915",width:"18.5625",height:"1.025",fill:"white"},null,-1),Eg=(0,o._)("rect",{x:"51",y:"17.98",width:"29.25",height:"2.46",fill:"#434343"},null,-1),Ug={filter:"url(#filter3_ddd_2919_15498)"},Fg=(0,o._)("rect",{x:"52.2188",y:"50.5",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ig={filter:"url(#filter4_ddd_2919_15498)"},zg=(0,o._)("rect",{x:"52.2188",y:"62.1851",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),Pg=(0,o.uE)('',1);function Vg(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",bg,[(0,o._)("g",Bg,[Sg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"56.3433",y:"77.9702",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),kg,Ag,Mg,(0,o._)("g",Dg,[Tg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"56.3433",y:"31.23",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Og,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"52.3188",y:"38.9149",width:"26.6125",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),Gg]),Eg,(0,o._)("g",Ug,[Fg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"56.3433",y:"54.6001",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Ig,[zg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"56.3433",y:"66.2852",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),Pg]))])}var Wg={name:"FirstAvailableView",props:{color:{default:"light-green",type:String}}};const Rg=(0,he.Z)(Wg,[["render",Vg]]);var Lg=Rg;const jg={width:"139",height:"77",viewBox:"0 0 139 77",fill:"none",xmlns:"http://www.w3.org/2000/svg"},qg=(0,o.uE)('',6),Ng={filter:"url(#filter0_ddd_4343_2181)"},$g=(0,o._)("rect",{x:"44.0852",y:"41.9287",width:"13.8835",height:"0.732234",fill:"white"},null,-1),Hg={filter:"url(#filter1_ddd_4343_2181)"},Zg=(0,o._)("rect",{x:"12.748",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Yg={filter:"url(#filter2_ddd_4343_2181)"},Kg=(0,o._)("rect",{x:"69.2635",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Jg={filter:"url(#filter3_ddd_4343_2181)"},Xg=(0,o._)("rect",{x:"97.5215",y:"39.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Qg={filter:"url(#filter4_ddd_4343_2181)"},e_=(0,o._)("rect",{x:"13",y:"66.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),t_={filter:"url(#filter5_ddd_4343_2181)"},i_=(0,o._)("rect",{x:"69.5156",y:"66.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),a_={filter:"url(#filter6_ddd_4343_2181)"},o_=(0,o._)("rect",{x:"41",y:"66",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),r_={filter:"url(#filter7_ddd_4343_2181)"},l_=(0,o._)("rect",{x:"97.7734",y:"66.0195",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),s_=(0,o.uE)('',1);function n_(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",jg,[qg,(0,o._)("g",Ng,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"41.1",y:"39.1",width:"19.8539",height:"6.39011",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),$g]),(0,o._)("g",Hg,[Zg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"15.8329",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Yg,[Kg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.3483",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Jg,[Xg,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.606",y:"41.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",Qg,[e_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"16.0848",y:"68.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",t_,[i_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.6004",y:"68.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",a_,[o_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"44.0848",y:"68.9287",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",r_,[l_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"100.858",y:"68.9482",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),s_]))])}var d_={name:"RowTimeView",props:{color:{default:"light-green",type:String}}};const p_=(0,he.Z)(d_,[["render",n_]]);var f_=p_;const u_={width:"139",height:"65",viewBox:"0 0 139 65",fill:"none",xmlns:"http://www.w3.org/2000/svg"},c_=(0,o.uE)('',5),h_={filter:"url(#filter0_ddd_4343_2152)"},m_=(0,o._)("rect",{x:"16.3922",y:"39",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),g_={filter:"url(#filter1_ddd_4343_2152)"},__=(0,o._)("rect",{x:"47.5313",y:"41.9287",width:"13.8835",height:"0.732234",fill:"white"},null,-1),y_={filter:"url(#filter2_ddd_4343_2152)"},w_=(0,o._)("rect",{x:"72.5",y:"39",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),x_={filter:"url(#filter3_ddd_4343_2152)"},C_=(0,o._)("rect",{x:"100.554",y:"39",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),v_={filter:"url(#filter4_ddd_4343_2152)"},b_=(0,o._)("rect",{x:"30.4191",y:"53.5901",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),B_={filter:"url(#filter5_ddd_4343_2152)"},S_=(0,o._)("rect",{x:"58.4731",y:"53.5901",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),k_={filter:"url(#filter6_ddd_4343_2152)"},A_=(0,o._)("rect",{x:"86.527",y:"53.5901",width:"20.0539",height:"6.59011",rx:"0.5",fill:"white"},null,-1),M_=(0,o.uE)('',1);function D_(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",u_,[c_,(0,o._)("g",h_,[m_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"19.477",y:"41.9287",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",g_,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"44.5461",y:"39.1",width:"19.8539",height:"6.39011",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),__]),(0,o._)("g",y_,[w_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"75.5848",y:"41.9287",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",x_,[C_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"103.639",y:"41.9287",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",v_,[b_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"33.5039",y:"56.5188",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",B_,[S_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"61.5579",y:"56.5188",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),(0,o._)("g",k_,[A_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"89.6118",y:"56.5188",width:"13.8835",height:"0.732234",fill:"#8BC34A"},null,2)]),M_]))])}var T_={name:"BlockTimeView",props:{color:{default:"light-green",type:String}}};const O_=(0,he.Z)(T_,[["render",D_]]);var G_=O_;const E_={width:"134",height:"99",viewBox:"0 0 134 99",fill:"none",xmlns:"http://www.w3.org/2000/svg"},U_={filter:"url(#filter0_ddd_2986_15430)"},F_=(0,o._)("rect",{x:"101.434",y:"85.5549",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),I_={filter:"url(#filter1_ddd_2986_15430)"},z_=(0,o._)("rect",{x:"101.434",y:"73.8701",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),P_=(0,o.uE)('',22),V_={filter:"url(#filter2_ddd_2986_15430)"},W_=(0,o.uE)('',21),R_={filter:"url(#filter3_ddd_2986_15430)"},L_=(0,o._)("rect",{x:"101.434",y:"27.1299",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),j_={filter:"url(#filter4_ddd_2986_15430)"},q_=(0,o._)("rect",{x:"105.559",y:"42.915",width:"18.5625",height:"1.025",fill:"white"},null,-1),N_=(0,o._)("rect",{x:"31.9656",y:"19.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),$_=(0,o._)("rect",{x:"100.216",y:"20.98",width:"29.25",height:"2.46",fill:"#434343"},null,-1),H_={filter:"url(#filter5_ddd_2986_15430)"},Z_=(0,o._)("rect",{x:"101.434",y:"50.5",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),Y_={filter:"url(#filter6_ddd_2986_15430)"},K_=(0,o._)("rect",{x:"101.434",y:"62.1851",width:"26.8125",height:"9.225",rx:"0.5",fill:"white"},null,-1),J_=(0,o.uE)('',1);function X_(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",E_,[(0,o._)("g",U_,[F_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"105.559",y:"89.655",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",I_,[z_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"105.559",y:"77.9702",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),P_,(0,o._)("g",V_,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"42.9343",y:"57.8799",width:"7.3125",height:"6.15",fill:"#8BC34A"},null,2)]),W_,(0,o._)("g",R_,[L_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"105.559",y:"31.23",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",j_,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"101.534",y:"38.9149",width:"26.6125",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),q_]),N_,$_,(0,o._)("g",H_,[Z_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"105.559",y:"54.6001",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Y_,[K_,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"105.559",y:"66.2852",width:"18.5625",height:"1.025",fill:"#8BC34A"},null,2)]),J_]))])}var Q_={name:"ExpressStingleColumn",props:{color:{default:"light-green",type:String}}};const ey=(0,he.Z)(Q_,[["render",X_]]);var ty=ey;const iy={width:"156",height:"79",viewBox:"0 0 156 79",fill:"none",xmlns:"http://www.w3.org/2000/svg"},ay=(0,o.uE)('',22),oy={filter:"url(#filter0_ddd_5774_2266)"},ry=(0,o.uE)('',24),ly={filter:"url(#filter1_ddd_5774_2266)"},sy=(0,o._)("rect",{x:"91.3526",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ny={filter:"url(#filter2_ddd_5774_2266)"},dy=(0,o._)("rect",{x:"109.564",y:"39.6187",width:"9.72692",height:"0.732234",fill:"white"},null,-1),py={filter:"url(#filter3_ddd_5774_2266)"},fy=(0,o._)("rect",{x:"123.453",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),uy={filter:"url(#filter4_ddd_5774_2266)"},cy=(0,o._)("rect",{x:"139.503",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),hy={filter:"url(#filter5_ddd_5774_2266)"},my=(0,o._)("rect",{x:"91.3526",y:"47.2803",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),gy={filter:"url(#filter6_ddd_5774_2266)"},_y=(0,o._)("rect",{x:"107.403",y:"47.2803",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),yy={filter:"url(#filter7_ddd_5774_2266)"},wy=(0,o._)("rect",{x:"123.453",y:"47.2803",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),xy={filter:"url(#filter8_ddd_5774_2266)"},Cy=(0,o._)("rect",{x:"139.503",y:"47.2803",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),vy={filter:"url(#filter9_ddd_5774_2266)"},by=(0,o._)("rect",{x:"97.3776",y:"57.8701",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),By={filter:"url(#filter10_ddd_5774_2266)"},Sy=(0,o._)("rect",{x:"115.428",y:"57.8701",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ky={filter:"url(#filter11_ddd_5774_2266)"},Ay=(0,o._)("rect",{x:"133.478",y:"57.8701",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),My=(0,o.uE)('',1);function Dy(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",iy,[ay,(0,o._)("g",oy,[(0,o._)("rect",{x:"31.9068",y:"57.8799",width:"8.20312",height:"6.15",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),ry,(0,o._)("g",ly,[sy,(0,o._)("rect",{x:"93.5139",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",ny,[(0,o._)("rect",{x:"107.503",y:"36.7899",width:"13.85",height:"6.39011",rx:"0.4",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),stroke:"#8BC34A","stroke-width":"0.2"},null,2),dy]),(0,o._)("g",py,[fy,(0,o._)("rect",{x:"125.614",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",uy,[cy,(0,o._)("rect",{x:"141.664",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",hy,[my,(0,o._)("rect",{x:"93.5139",y:"50.209",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",gy,[_y,(0,o._)("rect",{x:"109.564",y:"50.209",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",yy,[wy,(0,o._)("rect",{x:"125.614",y:"50.209",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",xy,[Cy,(0,o._)("rect",{x:"141.664",y:"50.209",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",vy,[by,(0,o._)("rect",{x:"99.5389",y:"60.7988",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",By,[Sy,(0,o._)("rect",{x:"117.589",y:"60.7988",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",ky,[Ay,(0,o._)("rect",{x:"135.639",y:"60.7988",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),My]))])}var Ty={name:"expressRows",props:{color:{default:"light-green",type:String}}};const Oy=(0,he.Z)(Ty,[["render",Dy]]);var Gy=Oy;const Ey={width:"157",height:"79",viewBox:"0 0 157 79",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Uy=(0,o.uE)('',22),Fy={filter:"url(#filter0_ddd_5772_1874)"},Iy=(0,o.uE)('',24),zy={filter:"url(#filter1_ddd_5772_1874)"},Py=(0,o._)("rect",{x:"92",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Vy={filter:"url(#filter2_ddd_5772_1874)"},Wy=(0,o._)("rect",{x:"110.212",y:"39.6187",width:"9.72692",height:"0.732234",fill:"white"},null,-1),Ry={filter:"url(#filter3_ddd_5772_1874)"},Ly=(0,o._)("rect",{x:"124.1",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),jy={filter:"url(#filter4_ddd_5772_1874)"},qy=(0,o._)("rect",{x:"140.15",y:"36.6899",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Ny=(0,o._)("rect",{x:"120.6",y:"46.2803",width:"5",height:"1.23",fill:"#434343"},null,-1),$y={filter:"url(#filter5_ddd_5772_1874)"},Hy=(0,o._)("rect",{x:"92",y:"50.5103",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Zy={filter:"url(#filter6_ddd_5772_1874)"},Yy=(0,o._)("rect",{x:"108.05",y:"50.5103",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Ky={filter:"url(#filter7_ddd_5772_1874)"},Jy=(0,o._)("rect",{x:"124.1",y:"50.5103",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),Xy={filter:"url(#filter8_ddd_5772_1874)"},Qy=(0,o._)("rect",{x:"140.15",y:"50.5103",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),ew=(0,o._)("rect",{x:"120.6",y:"60.1001",width:"5",height:"1.23",fill:"#434343"},null,-1),tw={filter:"url(#filter9_ddd_5772_1874)"},iw=(0,o._)("rect",{x:"92",y:"64.3301",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),aw={filter:"url(#filter10_ddd_5772_1874)"},ow=(0,o._)("rect",{x:"108.05",y:"64.3301",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),rw={filter:"url(#filter11_ddd_5772_1874)"},lw=(0,o._)("rect",{x:"124.1",y:"64.3301",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),sw={filter:"url(#filter12_ddd_5772_1874)"},nw=(0,o._)("rect",{x:"140.15",y:"64.3301",width:"14.05",height:"6.59011",rx:"0.5",fill:"white"},null,-1),dw=(0,o.uE)('',1);function pw(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Ey,[Uy,(0,o._)("g",Fy,[(0,o._)("rect",{x:"28.9087",y:"57.8799",width:"7.54141",height:"6.15",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),Iy,(0,o._)("g",zy,[Py,(0,o._)("rect",{x:"94.1613",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",Vy,[(0,o._)("rect",{x:"108.15",y:"36.7899",width:"13.85",height:"6.39011",rx:"0.4",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),stroke:"#8BC34A","stroke-width":"0.2"},null,2),Wy]),(0,o._)("g",Ry,[Ly,(0,o._)("rect",{x:"126.261",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",jy,[qy,(0,o._)("rect",{x:"142.311",y:"39.6187",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),Ny,(0,o._)("g",$y,[Hy,(0,o._)("rect",{x:"94.1613",y:"53.439",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",Zy,[Yy,(0,o._)("rect",{x:"110.211",y:"53.439",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",Ky,[Jy,(0,o._)("rect",{x:"126.261",y:"53.439",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",Xy,[Qy,(0,o._)("rect",{x:"142.311",y:"53.439",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),ew,(0,o._)("g",tw,[iw,(0,o._)("rect",{x:"94.1613",y:"67.2588",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",aw,[ow,(0,o._)("rect",{x:"110.211",y:"67.2588",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",rw,[lw,(0,o._)("rect",{x:"126.261",y:"67.2588",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),(0,o._)("g",sw,[nw,(0,o._)("rect",{x:"142.311",y:"67.2588",width:"9.72692",height:"0.732234",class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]])},null,2)]),dw]))])}var fw={name:"expressBlocks",props:{color:{default:"light-green",type:String}}};const uw=(0,he.Z)(fw,[["render",pw]]);var cw=uw;const hw={width:"135",height:"81",viewBox:"0 0 135 81",fill:"none",xmlns:"http://www.w3.org/2000/svg"},mw=(0,o.uE)('',7),gw={filter:"url(#filter0_ddd_3688_15819)"},_w=(0,o._)("rect",{width:"42",height:"36",transform:"translate(47 39)",fill:"white"},null,-1),yw=(0,o._)("rect",{x:"52",y:"55",width:"27",height:"2",fill:"#434343"},null,-1),ww=(0,o._)("rect",{x:"52",y:"64",width:"27",height:"2",fill:"#434343"},null,-1),xw=(0,o.uE)('',2);function Cw(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",hw,[mw,(0,o._)("g",gw,[_w,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"52",y:"46",width:"27",height:"2",fill:"#689F38"},null,2),yw,ww]),xw]))])}var vw={name:"ResourcesTeamList",props:{color:{default:"light-green",type:String}}};const bw=(0,he.Z)(vw,[["render",Cw]]);var Bw=bw;const Sw={width:"135",height:"54",viewBox:"0 0 135 54",fill:"none",xmlns:"http://www.w3.org/2000/svg"},kw=(0,o._)("rect",{width:"26",height:"5",fill:"#434343"},null,-1),Aw=(0,o._)("rect",{y:"6",width:"20",height:"5",fill:"#BDBDBD"},null,-1),Mw=(0,o._)("rect",{x:"115",width:"20",height:"5",fill:"#BDBDBD"},null,-1),Dw=(0,o._)("rect",{x:"47",y:"21",width:"43",height:"2",fill:"#434343"},null,-1),Tw=(0,o._)("rect",{x:"55",y:"42",width:"31",height:"2",fill:"#9E9E9E"},null,-1),Ow=(0,o._)("rect",{x:"55",y:"50",width:"31",height:"2",fill:"#9E9E9E"},null,-1),Gw={"clip-path":"url(#clip0_3688_15820)"},Ew=(0,o.uE)('',3);function Uw(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Sw,[kw,Aw,Mw,Dw,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"55",y:"33",width:"31",height:"2",fill:"#689F38"},null,2),Tw,Ow,(0,o._)("g",Gw,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M47 32.75C46.31 32.75 45.75 33.31 45.75 34C45.75 34.69 46.31 35.25 47 35.25C47.69 35.25 48.25 34.69 48.25 34C48.25 33.31 47.69 32.75 47 32.75ZM47 31.5C45.62 31.5 44.5 32.62 44.5 34C44.5 35.38 45.62 36.5 47 36.5C48.38 36.5 49.5 35.38 49.5 34C49.5 32.62 48.38 31.5 47 31.5ZM47 36C45.895 36 45 35.105 45 34C45 32.895 45.895 32 47 32C48.105 32 49 32.895 49 34C49 35.105 48.105 36 47 36Z",fill:"#689F38"},null,2)]),Ew]))])}var Fw={name:"ResourcesTeamList",props:{color:{default:"light-green",type:String}}};const Iw=(0,he.Z)(Fw,[["render",Uw]]);var zw=Iw;const Pw={width:"157",height:"97",viewBox:"0 0 157 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Vw={filter:"url(#filter0_ddd_3688_15780)"},Ww=(0,o._)("rect",{x:"111",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Rw={filter:"url(#filter1_ddd_3688_15780)"},Lw=(0,o._)("rect",{x:"111",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),jw=(0,o.uE)('',22),qw={filter:"url(#filter2_ddd_3688_15780)"},Nw=(0,o.uE)('',21),$w={filter:"url(#filter3_ddd_3688_15780)"},Hw=(0,o._)("rect",{x:"111",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Zw={filter:"url(#filter4_ddd_3688_15780)"},Yw=(0,o._)("rect",{x:"113.961",y:"40.915",width:"13.3247",height:"1.025",fill:"white"},null,-1),Kw=(0,o._)("rect",{x:"62.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),Jw=(0,o._)("rect",{x:"118",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),Xw={filter:"url(#filter5_ddd_3688_15780)"},Qw=(0,o._)("rect",{x:"111",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ex={filter:"url(#filter6_ddd_3688_15780)"},tx=(0,o._)("rect",{x:"111",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ix={filter:"url(#filter7_ddd_3688_15780)"},ax=(0,o._)("rect",{x:"134",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ox={filter:"url(#filter8_ddd_3688_15780)"},rx=(0,o._)("rect",{x:"134",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),lx={filter:"url(#filter9_ddd_3688_15780)"},sx=(0,o._)("rect",{x:"134",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),nx={filter:"url(#filter10_ddd_3688_15780)"},dx=(0,o._)("rect",{x:"134",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),px={filter:"url(#filter11_ddd_3688_15780)"},fx=(0,o._)("rect",{x:"134",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ux={filter:"url(#filter12_ddd_3688_15780)"},cx=(0,o._)("rect",{x:"134",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),hx=(0,o._)("mask",{id:"path-71-inside-1_3688_15780",fill:"white"},[(0,o._)("path",{d:"M2.90942 23H42.9094V31H2.90942V23Z"})],-1),mx=(0,o._)("path",{d:"M2.90942 23H42.9094V31H2.90942V23Z",fill:"#E0E0E0"},null,-1),gx=(0,o._)("path",{d:"M42.9094 30H2.90942V32H42.9094V30Z",fill:"black",mask:"url(#path-71-inside-1_3688_15780)"},null,-1),_x={filter:"url(#filter13_ddd_3688_15780)"},yx=(0,o._)("rect",{width:"27",height:"34",transform:"translate(5.90942 27)",fill:"white"},null,-1),wx=(0,o._)("rect",{x:"10.9094",y:"43",width:"17",height:"2",fill:"#434343"},null,-1),xx=(0,o._)("rect",{x:"10.9094",y:"52",width:"17",height:"2",fill:"#434343"},null,-1),Cx=(0,o.uE)('',2);function vx(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",Pw,[(0,o._)("g",Vw,[Ww,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"113.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Rw,[Lw,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"113.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),jw,(0,o._)("g",qw,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"74.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),Nw,(0,o._)("g",$w,[Hw,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"113.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Zw,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.1",y:"36.9149",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),Yw]),Kw,Jw,(0,o._)("g",Xw,[Qw,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"113.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",ex,[tx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"113.961",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",ix,[ax,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",ox,[rx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",lx,[sx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",nx,[dx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",px,[fx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",ux,[cx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"136.961",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),hx,mx,gx,(0,o._)("g",_x,[yx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"10.9094",y:"34",width:"17",height:"2",fill:"#689F38"},null,2),wx,xx]),Cx]))])}var bx={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Bx=(0,he.Z)(bx,[["render",vx]]);var Sx=Bx;const kx={width:"152",height:"97",viewBox:"0 0 152 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Ax={filter:"url(#filter0_ddd_3688_15778)"},Mx=(0,o._)("rect",{x:"106",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Dx={filter:"url(#filter1_ddd_3688_15778)"},Tx=(0,o._)("rect",{x:"106",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ox=(0,o.uE)('',22),Gx={filter:"url(#filter2_ddd_3688_15778)"},Ex=(0,o.uE)('',21),Ux={filter:"url(#filter3_ddd_3688_15778)"},Fx=(0,o._)("rect",{x:"106",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ix={filter:"url(#filter4_ddd_3688_15778)"},zx=(0,o._)("rect",{x:"108.961",y:"40.915",width:"13.3247",height:"1.025",fill:"white"},null,-1),Px=(0,o._)("rect",{x:"55.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),Vx=(0,o._)("rect",{x:"113",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),Wx=(0,o._)("rect",{x:"6",y:"20",width:"25",height:"2",fill:"#434343"},null,-1),Rx={filter:"url(#filter5_ddd_3688_15778)"},Lx=(0,o._)("rect",{x:"106",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),jx={filter:"url(#filter6_ddd_3688_15778)"},qx=(0,o._)("rect",{x:"106",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Nx={filter:"url(#filter7_ddd_3688_15778)"},$x=(0,o._)("rect",{x:"129",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Hx={filter:"url(#filter8_ddd_3688_15778)"},Zx=(0,o._)("rect",{x:"129",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Yx={filter:"url(#filter9_ddd_3688_15778)"},Kx=(0,o._)("rect",{x:"129",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Jx={filter:"url(#filter10_ddd_3688_15778)"},Xx=(0,o._)("rect",{x:"129",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Qx={filter:"url(#filter11_ddd_3688_15778)"},eC=(0,o._)("rect",{x:"129",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),tC={filter:"url(#filter12_ddd_3688_15778)"},iC=(0,o._)("rect",{x:"129",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),aC=(0,o._)("rect",{x:"13",y:"38",width:"20",height:"2",fill:"#9E9E9E"},null,-1),oC=(0,o._)("rect",{x:"13",y:"46",width:"20",height:"2",fill:"#9E9E9E"},null,-1),rC={"clip-path":"url(#clip0_3688_15778)"},lC=(0,o.uE)('',3);function sC(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",kx,[(0,o._)("g",Ax,[Mx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Dx,[Tx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Ox,(0,o._)("g",Gx,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),Ex,(0,o._)("g",Ux,[Fx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Ix,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"106.1",y:"36.9149",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),zx]),Px,Vx,Wx,(0,o._)("g",Rx,[Lx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",jx,[qx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Nx,[$x,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Hx,[Zx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Yx,[Kx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Jx,[Xx,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Qx,[eC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",tC,[iC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"29",width:"20",height:"2",fill:"#689F38"},null,2),aC,oC,(0,o._)("g",rC,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 28.75C4.31 28.75 3.75 29.31 3.75 30C3.75 30.69 4.31 31.25 5 31.25C5.69 31.25 6.25 30.69 6.25 30C6.25 29.31 5.69 28.75 5 28.75ZM5 27.5C3.62 27.5 2.5 28.62 2.5 30C2.5 31.38 3.62 32.5 5 32.5C6.38 32.5 7.5 31.38 7.5 30C7.5 28.62 6.38 27.5 5 27.5ZM5 32C3.895 32 3 31.105 3 30C3 28.895 3.895 28 5 28C6.105 28 7 28.895 7 30C7 31.105 6.105 32 5 32Z",fill:"#689F38"},null,2)]),lC]))])}var nC={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const dC=(0,he.Z)(nC,[["render",sC]]);var pC=dC;const fC={width:"141",height:"97",viewBox:"0 0 141 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},uC={filter:"url(#filter0_ddd_3688_15777)"},cC=(0,o._)("rect",{x:"116",y:"83.5549",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),hC={filter:"url(#filter1_ddd_3688_15777)"},mC=(0,o._)("rect",{x:"116",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),gC=(0,o.uE)('',22),_C={filter:"url(#filter2_ddd_3688_15777)"},yC=(0,o.uE)('',21),wC={filter:"url(#filter3_ddd_3688_15777)"},xC=(0,o._)("rect",{x:"116",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),CC={filter:"url(#filter4_ddd_3688_15777)"},vC=(0,o._)("rect",{x:"118.961",y:"40.915",width:"13.3247",height:"1.025",fill:"white"},null,-1),bC=(0,o._)("rect",{x:"55.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),BC=(0,o._)("rect",{x:"113",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),SC={filter:"url(#filter5_ddd_3688_15777)"},kC=(0,o._)("rect",{x:"116",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),AC={filter:"url(#filter6_ddd_3688_15777)"},MC=(0,o._)("rect",{x:"116",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),DC=(0,o._)("rect",{x:"13",y:"38",width:"20",height:"2",fill:"#9E9E9E"},null,-1),TC=(0,o._)("rect",{x:"13",y:"46",width:"20",height:"2",fill:"#9E9E9E"},null,-1),OC={"clip-path":"url(#clip0_3688_15777)"},GC=(0,o.uE)('',3);function EC(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",fC,[(0,o._)("g",uC,[cC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"87.655",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",hC,[mC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),gC,(0,o._)("g",_C,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),yC,(0,o._)("g",wC,[xC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",CC,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"116.1",y:"36.9149",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),vC]),bC,BC,(0,o._)("g",SC,[kC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",AC,[MC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"29",width:"20",height:"2",fill:"#689F38"},null,2),DC,TC,(0,o._)("g",OC,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 28.75C4.31 28.75 3.75 29.31 3.75 30C3.75 30.69 4.31 31.25 5 31.25C5.69 31.25 6.25 30.69 6.25 30C6.25 29.31 5.69 28.75 5 28.75ZM5 27.5C3.62 27.5 2.5 28.62 2.5 30C2.5 31.38 3.62 32.5 5 32.5C6.38 32.5 7.5 31.38 7.5 30C7.5 28.62 6.38 27.5 5 27.5ZM5 32C3.895 32 3 31.105 3 30C3 28.895 3.895 28 5 28C6.105 28 7 28.895 7 30C7 31.105 6.105 32 5 32Z",fill:"#689F38"},null,2)]),GC]))])}var UC={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const FC=(0,he.Z)(UC,[["render",EC]]);var IC=FC;const zC={width:"143",height:"97",viewBox:"0 0 143 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},PC={filter:"url(#filter0_ddd_3688_15779)"},VC=(0,o._)("rect",{x:"118.909",y:"83.5549",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),WC={filter:"url(#filter1_ddd_3688_15779)"},RC=(0,o._)("rect",{x:"118.909",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),LC=(0,o.uE)('',22),jC={filter:"url(#filter2_ddd_3688_15779)"},qC=(0,o.uE)('',21),NC={filter:"url(#filter3_ddd_3688_15779)"},$C=(0,o._)("rect",{x:"118.909",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),HC={filter:"url(#filter4_ddd_3688_15779)"},ZC=(0,o._)("rect",{x:"121.87",y:"40.915",width:"13.3247",height:"1.025",fill:"white"},null,-1),YC=(0,o._)("rect",{x:"63.2219",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),KC=(0,o._)("rect",{x:"115.909",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),JC={filter:"url(#filter5_ddd_3688_15779)"},XC=(0,o._)("rect",{x:"118.909",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),QC={filter:"url(#filter6_ddd_3688_15779)"},ev=(0,o._)("rect",{x:"118.909",y:"60.1851",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),tv=(0,o._)("mask",{id:"path-59-inside-1_3688_15779",fill:"white"},[(0,o._)("path",{d:"M2.90942 23H42.9094V31H2.90942V23Z"})],-1),iv=(0,o._)("path",{d:"M2.90942 23H42.9094V31H2.90942V23Z",fill:"#E0E0E0"},null,-1),av=(0,o._)("path",{d:"M42.9094 30H2.90942V32H42.9094V30Z",fill:"black",mask:"url(#path-59-inside-1_3688_15779)"},null,-1),ov={filter:"url(#filter7_ddd_3688_15779)"},rv=(0,o._)("rect",{width:"27",height:"34",transform:"translate(5.90942 27)",fill:"white"},null,-1),lv=(0,o._)("rect",{x:"10.9094",y:"43",width:"17",height:"2",fill:"#434343"},null,-1),sv=(0,o._)("rect",{x:"10.9094",y:"52",width:"17",height:"2",fill:"#434343"},null,-1),nv=(0,o.uE)('',2);function dv(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",zC,[(0,o._)("g",PC,[VC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.87",y:"87.655",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",WC,[RC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.87",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),LC,(0,o._)("g",jC,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"74.4747",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),qC,(0,o._)("g",NC,[$C,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.87",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",HC,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"119.009",y:"36.9149",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),ZC]),YC,KC,(0,o._)("g",JC,[XC,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.87",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",QC,[ev,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.87",y:"64.2852",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),tv,iv,av,(0,o._)("g",ov,[rv,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"10.9094",y:"34",width:"17",height:"2",fill:"#689F38"},null,2),lv,sv]),nv]))])}var pv={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const fv=(0,he.Z)(pv,[["render",dv]]);var uv=fv;const cv=(0,o.uE)('',1),hv=[cv];function mv(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,hv)}var gv={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const _v=(0,he.Z)(gv,[["render",mv]]);var yv=_v;const wv=(0,o.uE)('',1),xv=[wv];function Cv(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,xv)}var vv={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const bv=(0,he.Z)(vv,[["render",Cv]]);var Bv=bv;const Sv=(0,o.uE)('',1),kv=[Sv];function Av(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,kv)}var Mv={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Dv=(0,he.Z)(Mv,[["render",Av]]);var Tv=Dv;const Ov=(0,o.uE)('',1),Gv=[Ov];function Ev(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,Gv)}var Uv={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Fv=(0,he.Z)(Uv,[["render",Ev]]);var Iv=Fv;const zv={width:"155",height:"97",viewBox:"0 0 155 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Pv={filter:"url(#filter0_ddd_3834_15666)"},Vv=(0,o._)("rect",{x:"109",y:"83.4844",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Wv={filter:"url(#filter1_ddd_3834_15666)"},Rv=(0,o._)("rect",{x:"109",y:"71.7998",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Lv=(0,o.uE)('',22),jv={filter:"url(#filter2_ddd_3834_15666)"},qv=(0,o.uE)('',21),Nv={filter:"url(#filter3_ddd_3834_15666)"},$v=(0,o._)("rect",{x:"109",y:"25.0596",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Hv={filter:"url(#filter4_ddd_3834_15666)"},Zv=(0,o._)("rect",{x:"111.961",y:"40.8452",width:"13.3247",height:"1.025",fill:"white"},null,-1),Yv=(0,o._)("rect",{x:"60.3125",y:"18.6797",width:"29.25",height:"2.46",fill:"#434343"},null,-1),Kv=(0,o._)("rect",{x:"116",y:"18.9297",width:"25",height:"2",fill:"#434343"},null,-1),Jv={filter:"url(#filter5_ddd_3834_15666)"},Xv=(0,o._)("rect",{x:"109",y:"48.4297",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Qv={filter:"url(#filter6_ddd_3834_15666)"},eb=(0,o._)("rect",{x:"109",y:"60.1152",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),tb={filter:"url(#filter7_ddd_3834_15666)"},ib=(0,o._)("rect",{x:"132",y:"83.4844",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ab={filter:"url(#filter8_ddd_3834_15666)"},ob=(0,o._)("rect",{x:"132",y:"71.7998",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),rb={filter:"url(#filter9_ddd_3834_15666)"},lb=(0,o._)("rect",{x:"132",y:"25.0596",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),sb={filter:"url(#filter10_ddd_3834_15666)"},nb=(0,o._)("rect",{x:"132",y:"48.4297",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),db={filter:"url(#filter11_ddd_3834_15666)"},pb=(0,o._)("rect",{x:"132",y:"36.9297",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),fb={filter:"url(#filter12_ddd_3834_15666)"},ub=(0,o._)("rect",{x:"132",y:"60.1152",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),cb=(0,o.uE)('',6),hb={filter:"url(#filter13_ddd_3834_15666)"},mb=(0,o._)("rect",{width:"25.65",height:"34",transform:"translate(5.85001 31.9297)",fill:"white"},null,-1),gb=(0,o._)("rect",{x:"10.85",y:"47.9297",width:"17",height:"2",fill:"#434343"},null,-1),_b=(0,o._)("rect",{x:"10.85",y:"56.9297",width:"17",height:"2",fill:"#434343"},null,-1),yb=(0,o.uE)('',3);function wb(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",zv,[(0,o._)("g",Pv,[Vv,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.961",y:"87.5845",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Wv,[Rv,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.961",y:"75.8999",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Lv,(0,o._)("g",jv,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"72.5653",y:"55.376",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),qv,(0,o._)("g",Nv,[$v,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.961",y:"29.1597",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Hv,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"109.1",y:"36.8451",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),Zv]),Yv,Kv,(0,o._)("g",Jv,[Xv,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.961",y:"52.5298",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Qv,[eb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"111.961",y:"64.2153",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",tb,[ib,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"87.5845",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",ab,[ob,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"75.8999",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",rb,[lb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"29.1597",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",sb,[nb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"52.5298",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",db,[pb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"41.0298",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",fb,[ub,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"134.961",y:"64.2153",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),cb,(0,o._)("g",hb,[mb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"10.85",y:"38.9297",width:"17",height:"2",fill:"#689F38"},null,2),gb,_b]),yb]))])}var xb={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Cb=(0,he.Z)(xb,[["render",wb]]);var vb=Cb;const bb={width:"144",height:"97",viewBox:"0 0 144 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Bb=(0,o._)("rect",{x:"9",y:"20",width:"25",height:"2",fill:"#434343"},null,-1),Sb={filter:"url(#filter0_ddd_3834_16963)"},kb=(0,o._)("rect",{x:"119",y:"83.5552",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ab={filter:"url(#filter1_ddd_3834_16963)"},Mb=(0,o._)("rect",{x:"119",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Db=(0,o.uE)('',22),Tb={filter:"url(#filter2_ddd_3834_16963)"},Ob=(0,o.uE)('',21),Gb={filter:"url(#filter3_ddd_3834_16963)"},Eb=(0,o._)("rect",{x:"119",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ub={filter:"url(#filter4_ddd_3834_16963)"},Fb=(0,o._)("rect",{x:"121.961",y:"40.9155",width:"13.3247",height:"1.025",fill:"white"},null,-1),Ib=(0,o._)("rect",{x:"58.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),zb=(0,o._)("rect",{x:"116",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),Pb={filter:"url(#filter5_ddd_3834_16963)"},Vb=(0,o._)("rect",{x:"119",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Wb={filter:"url(#filter6_ddd_3834_16963)"},Rb=(0,o._)("rect",{x:"119",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Lb=(0,o.uE)('',6),jb={filter:"url(#filter7_ddd_3834_16963)"},qb=(0,o._)("rect",{width:"26.325",height:"34",transform:"translate(5.92499 32)",fill:"white"},null,-1),Nb=(0,o._)("rect",{x:"10.925",y:"48",width:"17",height:"2",fill:"#434343"},null,-1),$b=(0,o._)("rect",{x:"10.925",y:"57",width:"17",height:"2",fill:"#434343"},null,-1),Hb=(0,o.uE)('',2);function Zb(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",bb,[Bb,(0,o._)("g",Sb,[kb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.961",y:"87.6553",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Ab,[Mb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Db,(0,o._)("g",Tb,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"70.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),Ob,(0,o._)("g",Gb,[Eb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Ub,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"119.1",y:"36.9154",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),Fb]),Ib,zb,(0,o._)("g",Pb,[Vb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Wb,[Rb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"121.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Lb,(0,o._)("g",jb,[qb,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"10.925",y:"39",width:"17",height:"2",fill:"#689F38"},null,2),Nb,$b]),Hb]))])}var Yb={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Kb=(0,he.Z)(Yb,[["render",Zb]]);var Jb=Kb;const Xb=(0,o.uE)('',1),Qb=[Xb];function eB(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,Qb)}var tB={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const iB=(0,he.Z)(tB,[["render",eB]]);var aB=iB;const oB=(0,o.uE)('',1),rB=[oB];function lB(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,rB)}var sB={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const nB=(0,he.Z)(sB,[["render",lB]]);var dB=nB;const pB={width:"154",height:"97",viewBox:"0 0 154 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},fB={filter:"url(#filter0_ddd_3834_17404)"},uB=(0,o._)("rect",{x:"108",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),cB={filter:"url(#filter1_ddd_3834_17404)"},hB=(0,o._)("rect",{x:"108",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),mB=(0,o.uE)('',22),gB={filter:"url(#filter2_ddd_3834_17404)"},_B=(0,o.uE)('',21),yB={filter:"url(#filter3_ddd_3834_17404)"},wB=(0,o._)("rect",{x:"108",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),xB={filter:"url(#filter4_ddd_3834_17404)"},CB=(0,o._)("rect",{x:"110.961",y:"40.9155",width:"13.3247",height:"1.025",fill:"white"},null,-1),vB=(0,o._)("rect",{x:"59.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),bB=(0,o._)("rect",{x:"115",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),BB={filter:"url(#filter5_ddd_3834_17404)"},SB=(0,o._)("rect",{x:"108",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),kB={filter:"url(#filter6_ddd_3834_17404)"},AB=(0,o._)("rect",{x:"108",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),MB={filter:"url(#filter7_ddd_3834_17404)"},DB=(0,o._)("rect",{x:"131",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),TB={filter:"url(#filter8_ddd_3834_17404)"},OB=(0,o._)("rect",{x:"131",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),GB={filter:"url(#filter9_ddd_3834_17404)"},EB=(0,o._)("rect",{x:"131",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),UB={filter:"url(#filter10_ddd_3834_17404)"},FB=(0,o._)("rect",{x:"131",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),IB={filter:"url(#filter11_ddd_3834_17404)"},zB=(0,o._)("rect",{x:"131",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),PB={filter:"url(#filter12_ddd_3834_17404)"},VB=(0,o._)("rect",{x:"131",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),WB=(0,o.uE)('',5),RB=(0,o._)("rect",{x:"13",y:"54",width:"20",height:"2",fill:"#9E9E9E"},null,-1),LB=(0,o._)("rect",{x:"13",y:"62",width:"20",height:"2",fill:"#9E9E9E"},null,-1),jB={"clip-path":"url(#clip0_3834_17404)"},qB=(0,o.uE)('',3);function NB(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",pB,[(0,o._)("g",fB,[uB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",cB,[hB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),mB,(0,o._)("g",gB,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"71.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),_B,(0,o._)("g",yB,[wB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",xB,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.1",y:"36.9154",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),CB]),vB,bB,(0,o._)("g",BB,[SB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",kB,[AB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",MB,[DB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",TB,[OB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",GB,[EB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",UB,[FB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",IB,[zB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",PB,[VB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),WB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"45",width:"20",height:"2",fill:"#689F38"},null,2),RB,LB,(0,o._)("g",jB,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 44.75C4.31 44.75 3.75 45.31 3.75 46C3.75 46.69 4.31 47.25 5 47.25C5.69 47.25 6.25 46.69 6.25 46C6.25 45.31 5.69 44.75 5 44.75ZM5 43.5C3.62 43.5 2.5 44.62 2.5 46C2.5 47.38 3.62 48.5 5 48.5C6.38 48.5 7.5 47.38 7.5 46C7.5 44.62 6.38 43.5 5 43.5ZM5 48C3.895 48 3 47.105 3 46C3 44.895 3.895 44 5 44C6.105 44 7 44.895 7 46C7 47.105 6.105 48 5 48Z",fill:"#689F38"},null,2)]),qB]))])}var $B={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const HB=(0,he.Z)($B,[["render",NB]]);var ZB=HB;const YB={width:"141",height:"97",viewBox:"0 0 141 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},KB={filter:"url(#filter0_ddd_3834_17073)"},JB=(0,o._)("rect",{x:"116",y:"83.4849",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),XB={filter:"url(#filter1_ddd_3834_17073)"},QB=(0,o._)("rect",{x:"116",y:"71.7998",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),eS=(0,o.uE)('',22),tS={filter:"url(#filter2_ddd_3834_17073)"},iS=(0,o.uE)('',21),aS={filter:"url(#filter3_ddd_3834_17073)"},oS=(0,o._)("rect",{x:"116",y:"25.0596",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),rS={filter:"url(#filter4_ddd_3834_17073)"},lS=(0,o._)("rect",{x:"118.961",y:"40.8452",width:"13.3247",height:"1.025",fill:"white"},null,-1),sS=(0,o._)("rect",{x:"55.3125",y:"18.6797",width:"29.25",height:"2.46",fill:"#434343"},null,-1),nS=(0,o._)("rect",{x:"113",y:"18.9297",width:"25",height:"2",fill:"#434343"},null,-1),dS={filter:"url(#filter5_ddd_3834_17073)"},pS=(0,o._)("rect",{x:"116",y:"48.4297",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),fS={filter:"url(#filter6_ddd_3834_17073)"},uS=(0,o._)("rect",{x:"116",y:"60.1152",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),cS=(0,o.uE)('',5),hS=(0,o._)("rect",{x:"11",y:"53.9297",width:"20",height:"2",fill:"#9E9E9E"},null,-1),mS=(0,o._)("rect",{x:"11",y:"61.9297",width:"20",height:"2",fill:"#9E9E9E"},null,-1),gS={"clip-path":"url(#clip0_3834_17073)"},_S=(0,o.uE)('',3);function yS(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",YB,[(0,o._)("g",KB,[JB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"87.585",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",XB,[QB,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"75.8999",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),eS,(0,o._)("g",tS,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.376",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),iS,(0,o._)("g",aS,[oS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"29.1597",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",rS,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"116.1",y:"36.8451",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),lS]),sS,nS,(0,o._)("g",dS,[pS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"52.5298",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",fS,[uS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"64.2153",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),cS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"11",y:"44.9297",width:"20",height:"2",fill:"#689F38"},null,2),hS,mS,(0,o._)("g",gS,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M3 44.6797C2.31 44.6797 1.75 45.2397 1.75 45.9297C1.75 46.6197 2.31 47.1797 3 47.1797C3.69 47.1797 4.25 46.6197 4.25 45.9297C4.25 45.2397 3.69 44.6797 3 44.6797ZM3 43.4297C1.62 43.4297 0.5 44.5497 0.5 45.9297C0.5 47.3097 1.62 48.4297 3 48.4297C4.38 48.4297 5.5 47.3097 5.5 45.9297C5.5 44.5497 4.38 43.4297 3 43.4297ZM3 47.9297C1.895 47.9297 1 47.0347 1 45.9297C1 44.8247 1.895 43.9297 3 43.9297C4.105 43.9297 5 44.8247 5 45.9297C5 47.0347 4.105 47.9297 3 47.9297Z",fill:"#689F38"},null,2)]),_S]))])}var wS={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const xS=(0,he.Z)(wS,[["render",yS]]);var CS=xS;const vS=(0,o.uE)('',1),bS=[vS];function BS(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,bS)}var SS={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const kS=(0,he.Z)(SS,[["render",BS]]);var AS=kS;const MS=(0,o.uE)('',1),DS=[MS];function TS(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,DS)}var OS={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const GS=(0,he.Z)(OS,[["render",TS]]);var ES=GS;const US={width:"141",height:"97",viewBox:"0 0 141 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},FS=(0,o._)("rect",{x:"6",y:"19.9297",width:"25",height:"2",fill:"#434343"},null,-1),IS={filter:"url(#filter0_ddd_3834_17167)"},zS=(0,o._)("rect",{x:"116",y:"83.4849",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),PS={filter:"url(#filter1_ddd_3834_17167)"},VS=(0,o._)("rect",{x:"116",y:"71.7998",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),WS=(0,o.uE)('',22),RS={filter:"url(#filter2_ddd_3834_17167)"},LS=(0,o.uE)('',21),jS={filter:"url(#filter3_ddd_3834_17167)"},qS=(0,o._)("rect",{x:"116",y:"25.0596",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),NS={filter:"url(#filter4_ddd_3834_17167)"},$S=(0,o._)("rect",{x:"118.961",y:"40.8452",width:"13.3247",height:"1.025",fill:"white"},null,-1),HS=(0,o._)("rect",{x:"55.3125",y:"18.6797",width:"29.25",height:"2.46",fill:"#434343"},null,-1),ZS=(0,o._)("rect",{x:"113",y:"18.9297",width:"25",height:"2",fill:"#434343"},null,-1),YS={filter:"url(#filter5_ddd_3834_17167)"},KS=(0,o._)("rect",{x:"116",y:"48.4297",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),JS={filter:"url(#filter6_ddd_3834_17167)"},XS=(0,o._)("rect",{x:"116",y:"60.1152",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),QS=(0,o.uE)('',4),ek=(0,o._)("rect",{x:"11",y:"37.9297",width:"20",height:"2",fill:"#9E9E9E"},null,-1),tk=(0,o._)("rect",{x:"11",y:"45.9297",width:"20",height:"2",fill:"#9E9E9E"},null,-1),ik={"clip-path":"url(#clip0_3834_17167)"},ak=(0,o.uE)('',3);function ok(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",US,[FS,(0,o._)("g",IS,[zS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"87.585",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",PS,[VS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"75.8999",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),WS,(0,o._)("g",RS,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.376",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),LS,(0,o._)("g",jS,[qS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"29.1597",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",NS,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"116.1",y:"36.8451",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),$S]),HS,ZS,(0,o._)("g",YS,[KS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"52.5298",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",JS,[XS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"64.2153",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),QS,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"11",y:"28.9297",width:"20",height:"2",fill:"#689F38"},null,2),ek,tk,(0,o._)("g",ik,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M3 28.6797C2.31 28.6797 1.75 29.2397 1.75 29.9297C1.75 30.6197 2.31 31.1797 3 31.1797C3.69 31.1797 4.25 30.6197 4.25 29.9297C4.25 29.2397 3.69 28.6797 3 28.6797ZM3 27.4297C1.62 27.4297 0.5 28.5497 0.5 29.9297C0.5 31.3097 1.62 32.4297 3 32.4297C4.38 32.4297 5.5 31.3097 5.5 29.9297C5.5 28.5497 4.38 27.4297 3 27.4297ZM3 31.9297C1.895 31.9297 1 31.0347 1 29.9297C1 28.8247 1.895 27.9297 3 27.9297C4.105 27.9297 5 28.8247 5 29.9297C5 31.0347 4.105 31.9297 3 31.9297Z",fill:"#689F38"},null,2)]),ak]))])}var rk={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const lk=(0,he.Z)(rk,[["render",ok]]);var sk=lk;const nk={width:"154",height:"97",viewBox:"0 0 154 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},dk={filter:"url(#filter0_ddd_3834_17405)"},pk=(0,o._)("rect",{x:"108",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),fk={filter:"url(#filter1_ddd_3834_17405)"},uk=(0,o._)("rect",{x:"108",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),ck=(0,o.uE)('',22),hk={filter:"url(#filter2_ddd_3834_17405)"},mk=(0,o.uE)('',21),gk={filter:"url(#filter3_ddd_3834_17405)"},_k=(0,o._)("rect",{x:"108",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),yk={filter:"url(#filter4_ddd_3834_17405)"},wk=(0,o._)("rect",{x:"110.961",y:"40.9155",width:"13.3247",height:"1.025",fill:"white"},null,-1),xk=(0,o._)("rect",{x:"59.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),Ck=(0,o._)("rect",{x:"115",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),vk={filter:"url(#filter5_ddd_3834_17405)"},bk=(0,o._)("rect",{x:"108",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Bk={filter:"url(#filter6_ddd_3834_17405)"},Sk=(0,o._)("rect",{x:"108",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),kk={filter:"url(#filter7_ddd_3834_17405)"},Ak=(0,o._)("rect",{x:"131",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Mk={filter:"url(#filter8_ddd_3834_17405)"},Dk=(0,o._)("rect",{x:"131",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Tk={filter:"url(#filter9_ddd_3834_17405)"},Ok=(0,o._)("rect",{x:"131",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Gk={filter:"url(#filter10_ddd_3834_17405)"},Ek=(0,o._)("rect",{x:"131",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Uk={filter:"url(#filter11_ddd_3834_17405)"},Fk=(0,o._)("rect",{x:"131",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Ik={filter:"url(#filter12_ddd_3834_17405)"},zk=(0,o._)("rect",{x:"131",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),Pk=(0,o.uE)('',5),Vk=(0,o._)("rect",{x:"13",y:"38",width:"20",height:"2",fill:"#9E9E9E"},null,-1),Wk=(0,o._)("rect",{x:"13",y:"46",width:"20",height:"2",fill:"#9E9E9E"},null,-1),Rk={"clip-path":"url(#clip0_3834_17405)"},Lk=(0,o.uE)('',3);function jk(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",nk,[(0,o._)("g",dk,[pk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",fk,[uk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),ck,(0,o._)("g",hk,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"71.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),mk,(0,o._)("g",gk,[_k,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",yk,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.1",y:"36.9154",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),wk]),xk,Ck,(0,o._)("g",vk,[bk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Bk,[Sk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"110.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",kk,[Ak,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Mk,[Dk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Tk,[Ok,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Gk,[Ek,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Uk,[Fk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",Ik,[zk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"133.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),Pk,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"29",width:"20",height:"2",fill:"#689F38"},null,2),Vk,Wk,(0,o._)("g",Rk,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 28.75C4.31 28.75 3.75 29.31 3.75 30C3.75 30.69 4.31 31.25 5 31.25C5.69 31.25 6.25 30.69 6.25 30C6.25 29.31 5.69 28.75 5 28.75ZM5 27.5C3.62 27.5 2.5 28.62 2.5 30C2.5 31.38 3.62 32.5 5 32.5C6.38 32.5 7.5 31.38 7.5 30C7.5 28.62 6.38 27.5 5 27.5ZM5 32C3.895 32 3 31.105 3 30C3 28.895 3.895 28 5 28C6.105 28 7 28.895 7 30C7 31.105 6.105 32 5 32Z",fill:"#689F38"},null,2)]),Lk]))])}var qk={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Nk=(0,he.Z)(qk,[["render",jk]]);var $k=Nk;const Hk=(0,o.uE)('',1),Zk=[Hk];function Yk(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,Zk)}var Kk={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const Jk=(0,he.Z)(Kk,[["render",Yk]]);var Xk=Jk;const Qk=(0,o.uE)('',1),eA=[Qk];function tA(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,eA)}var iA={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const aA=(0,he.Z)(iA,[["render",tA]]);var oA=aA;const rA={width:"141",height:"97",viewBox:"0 0 141 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},lA=(0,o._)("rect",{x:"6",y:"20",width:"25",height:"2",fill:"#434343"},null,-1),sA={filter:"url(#filter0_ddd_3834_15762)"},nA=(0,o._)("rect",{x:"116",y:"83.5552",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),dA={filter:"url(#filter1_ddd_3834_15762)"},pA=(0,o._)("rect",{x:"116",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),fA=(0,o.uE)('',22),uA={filter:"url(#filter2_ddd_3834_15762)"},cA=(0,o.uE)('',21),hA={filter:"url(#filter3_ddd_3834_15762)"},mA=(0,o._)("rect",{x:"116",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),gA={filter:"url(#filter4_ddd_3834_15762)"},_A=(0,o._)("rect",{x:"118.961",y:"40.9155",width:"13.3247",height:"1.025",fill:"white"},null,-1),yA=(0,o._)("rect",{x:"55.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),wA=(0,o._)("rect",{x:"113",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),xA={filter:"url(#filter5_ddd_3834_15762)"},CA=(0,o._)("rect",{x:"116",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),vA={filter:"url(#filter6_ddd_3834_15762)"},bA=(0,o._)("rect",{x:"116",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),BA=(0,o._)("rect",{x:"13",y:"38",width:"20",height:"2",fill:"#9E9E9E"},null,-1),SA=(0,o._)("rect",{x:"13",y:"46",width:"20",height:"2",fill:"#9E9E9E"},null,-1),kA={"clip-path":"url(#clip0_3834_15762)"},AA=(0,o._)("g",{"clip-path":"url(#clip1_3834_15762)"},[(0,o._)("path",{d:"M5 36.5C3.62 36.5 2.5 37.62 2.5 39C2.5 40.38 3.62 41.5 5 41.5C6.38 41.5 7.5 40.38 7.5 39C7.5 37.62 6.38 36.5 5 36.5ZM5 41C3.895 41 3 40.105 3 39C3 37.895 3.895 37 5 37C6.105 37 7 37.895 7 39C7 40.105 6.105 41 5 41Z",fill:"#9E9E9E"})],-1),MA=(0,o._)("g",{"clip-path":"url(#clip2_3834_15762)"},[(0,o._)("path",{d:"M5 44.5C3.62 44.5 2.5 45.62 2.5 47C2.5 48.38 3.62 49.5 5 49.5C6.38 49.5 7.5 48.38 7.5 47C7.5 45.62 6.38 44.5 5 44.5ZM5 49C3.895 49 3 48.105 3 47C3 45.895 3.895 45 5 45C6.105 45 7 45.895 7 47C7 48.105 6.105 49 5 49Z",fill:"#9E9E9E"})],-1),DA=(0,o._)("rect",{x:"13",y:"68",width:"20",height:"2",fill:"#9E9E9E"},null,-1),TA=(0,o._)("rect",{x:"13",y:"76",width:"20",height:"2",fill:"#9E9E9E"},null,-1),OA={"clip-path":"url(#clip3_3834_15762)"},GA=(0,o.uE)('',3);function EA(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",rA,[lA,(0,o._)("g",sA,[nA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"87.6553",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",dA,[pA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),fA,(0,o._)("g",uA,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),cA,(0,o._)("g",hA,[mA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",gA,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"116.1",y:"36.9154",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),_A]),yA,wA,(0,o._)("g",xA,[CA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",vA,[bA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"118.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"29",width:"20",height:"2",fill:"#689F38"},null,2),BA,SA,(0,o._)("g",kA,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 28.75C4.31 28.75 3.75 29.31 3.75 30C3.75 30.69 4.31 31.25 5 31.25C5.69 31.25 6.25 30.69 6.25 30C6.25 29.31 5.69 28.75 5 28.75ZM5 27.5C3.62 27.5 2.5 28.62 2.5 30C2.5 31.38 3.62 32.5 5 32.5C6.38 32.5 7.5 31.38 7.5 30C7.5 28.62 6.38 27.5 5 27.5ZM5 32C3.895 32 3 31.105 3 30C3 28.895 3.895 28 5 28C6.105 28 7 28.895 7 30C7 31.105 6.105 32 5 32Z",fill:"#689F38"},null,2)]),AA,MA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"59",width:"20",height:"2",fill:"#689F38"},null,2),DA,TA,(0,o._)("g",OA,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 58.75C4.31 58.75 3.75 59.31 3.75 60C3.75 60.69 4.31 61.25 5 61.25C5.69 61.25 6.25 60.69 6.25 60C6.25 59.31 5.69 58.75 5 58.75ZM5 57.5C3.62 57.5 2.5 58.62 2.5 60C2.5 61.38 3.62 62.5 5 62.5C6.38 62.5 7.5 61.38 7.5 60C7.5 58.62 6.38 57.5 5 57.5ZM5 62C3.895 62 3 61.105 3 60C3 58.895 3.895 58 5 58C6.105 58 7 58.895 7 60C7 61.105 6.105 62 5 62Z",fill:"#689F38"},null,2)]),GA]))])}var UA={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const FA=(0,he.Z)(UA,[["render",EA]]);var IA=FA;const zA={width:"152",height:"97",viewBox:"0 0 152 97",fill:"none",xmlns:"http://www.w3.org/2000/svg"},PA={filter:"url(#filter0_ddd_3834_15561)"},VA=(0,o._)("rect",{x:"106",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),WA={filter:"url(#filter1_ddd_3834_15561)"},RA=(0,o._)("rect",{x:"106",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),LA=(0,o.uE)('',22),jA={filter:"url(#filter2_ddd_3834_15561)"},qA=(0,o.uE)('',21),NA={filter:"url(#filter3_ddd_3834_15561)"},$A=(0,o._)("rect",{x:"106",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),HA={filter:"url(#filter4_ddd_3834_15561)"},ZA=(0,o._)("rect",{x:"108.961",y:"40.9155",width:"13.3247",height:"1.025",fill:"white"},null,-1),YA=(0,o._)("rect",{x:"55.3125",y:"18.75",width:"29.25",height:"2.46",fill:"#434343"},null,-1),KA=(0,o._)("rect",{x:"113",y:"19",width:"25",height:"2",fill:"#434343"},null,-1),JA=(0,o._)("rect",{x:"6",y:"20",width:"25",height:"2",fill:"#434343"},null,-1),XA={filter:"url(#filter5_ddd_3834_15561)"},QA=(0,o._)("rect",{x:"106",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),eM={filter:"url(#filter6_ddd_3834_15561)"},tM=(0,o._)("rect",{x:"106",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),iM={filter:"url(#filter7_ddd_3834_15561)"},aM=(0,o._)("rect",{x:"129",y:"83.5547",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),oM={filter:"url(#filter8_ddd_3834_15561)"},rM=(0,o._)("rect",{x:"129",y:"71.8701",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),lM={filter:"url(#filter9_ddd_3834_15561)"},sM=(0,o._)("rect",{x:"129",y:"25.1299",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),nM={filter:"url(#filter10_ddd_3834_15561)"},dM=(0,o._)("rect",{x:"129",y:"48.5",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),pM={filter:"url(#filter11_ddd_3834_15561)"},fM=(0,o._)("rect",{x:"129",y:"37",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),uM={filter:"url(#filter12_ddd_3834_15561)"},cM=(0,o._)("rect",{x:"129",y:"60.1855",width:"19.2468",height:"9.225",rx:"0.5",fill:"white"},null,-1),hM=(0,o._)("rect",{x:"13",y:"38",width:"20",height:"2",fill:"#9E9E9E"},null,-1),mM=(0,o._)("rect",{x:"13",y:"46",width:"20",height:"2",fill:"#9E9E9E"},null,-1),gM={"clip-path":"url(#clip0_3834_15561)"},_M=(0,o._)("g",{"clip-path":"url(#clip1_3834_15561)"},[(0,o._)("path",{d:"M5 36.5C3.62 36.5 2.5 37.62 2.5 39C2.5 40.38 3.62 41.5 5 41.5C6.38 41.5 7.5 40.38 7.5 39C7.5 37.62 6.38 36.5 5 36.5ZM5 41C3.895 41 3 40.105 3 39C3 37.895 3.895 37 5 37C6.105 37 7 37.895 7 39C7 40.105 6.105 41 5 41Z",fill:"#9E9E9E"})],-1),yM=(0,o._)("g",{"clip-path":"url(#clip2_3834_15561)"},[(0,o._)("path",{d:"M5 44.5C3.62 44.5 2.5 45.62 2.5 47C2.5 48.38 3.62 49.5 5 49.5C6.38 49.5 7.5 48.38 7.5 47C7.5 45.62 6.38 44.5 5 44.5ZM5 49C3.895 49 3 48.105 3 47C3 45.895 3.895 45 5 45C6.105 45 7 45.895 7 47C7 48.105 6.105 49 5 49Z",fill:"#9E9E9E"})],-1),wM=(0,o._)("rect",{x:"13",y:"66",width:"20",height:"2",fill:"#9E9E9E"},null,-1),xM=(0,o._)("rect",{x:"13",y:"74",width:"20",height:"2",fill:"#9E9E9E"},null,-1),CM={"clip-path":"url(#clip3_3834_15561)"},vM=(0,o.uE)('',3);function bM(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",zA,[(0,o._)("g",PA,[VA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",WA,[RA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),LA,(0,o._)("g",jA,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"67.5653",y:"55.4463",width:"6.14747",height:"5.68927",fill:"#8BC34A"},null,2)]),qA,(0,o._)("g",NA,[$A,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",HA,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"106.1",y:"36.9154",width:"19.0468",height:"9.025",rx:"0.4",fill:"#8BC34A",stroke:"#8BC34A","stroke-width":"0.2"},null,2),ZA]),YA,KA,JA,(0,o._)("g",XA,[QA,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",eM,[tM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"108.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",iM,[aM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"87.6548",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",oM,[rM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"75.9702",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",lM,[sM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"29.23",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",nM,[dM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"52.6001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",pM,[fM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"41.1001",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("g",uM,[cM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"131.961",y:"64.2856",width:"13.3247",height:"1.025",fill:"#8BC34A"},null,2)]),(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"29",width:"20",height:"2",fill:"#689F38"},null,2),hM,mM,(0,o._)("g",gM,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 28.75C4.31 28.75 3.75 29.31 3.75 30C3.75 30.69 4.31 31.25 5 31.25C5.69 31.25 6.25 30.69 6.25 30C6.25 29.31 5.69 28.75 5 28.75ZM5 27.5C3.62 27.5 2.5 28.62 2.5 30C2.5 31.38 3.62 32.5 5 32.5C6.38 32.5 7.5 31.38 7.5 30C7.5 28.62 6.38 27.5 5 27.5ZM5 32C3.895 32 3 31.105 3 30C3 28.895 3.895 28 5 28C6.105 28 7 28.895 7 30C7 31.105 6.105 32 5 32Z",fill:"#689F38"},null,2)]),_M,yM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"13",y:"57",width:"20",height:"2",fill:"#689F38"},null,2),wM,xM,(0,o._)("g",CM,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M5 56.75C4.31 56.75 3.75 57.31 3.75 58C3.75 58.69 4.31 59.25 5 59.25C5.69 59.25 6.25 58.69 6.25 58C6.25 57.31 5.69 56.75 5 56.75ZM5 55.5C3.62 55.5 2.5 56.62 2.5 58C2.5 59.38 3.62 60.5 5 60.5C6.38 60.5 7.5 59.38 7.5 58C7.5 56.62 6.38 55.5 5 55.5ZM5 60C3.895 60 3 59.105 3 58C3 56.895 3.895 56 5 56C6.105 56 7 56.895 7 58C7 59.105 6.105 60 5 60Z",fill:"#689F38"},null,2)]),vM]))])}var BM={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const SM=(0,he.Z)(BM,[["render",bM]]);var kM=SM;const AM=(0,o.uE)('',1),MM=[AM];function DM(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,MM)}var TM={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const OM=(0,he.Z)(TM,[["render",DM]]);var GM=OM;const EM=(0,o.uE)('',1),UM=[EM];function FM(e,t,i,a,r,l){return(0,o.wg)(),(0,o.iD)("div",null,UM)}var IM={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const zM=(0,he.Z)(IM,[["render",FM]]);var PM=zM;const VM={width:"135",height:"81",viewBox:"0 0 135 81",fill:"none",xmlns:"http://www.w3.org/2000/svg"},WM=(0,o.uE)('',12),RM={filter:"url(#filter0_ddd_3834_17260)"},LM=(0,o._)("rect",{width:"42",height:"36",transform:"translate(47 39)",fill:"white"},null,-1),jM=(0,o._)("rect",{x:"52",y:"55",width:"27",height:"2",fill:"#434343"},null,-1),qM=(0,o._)("rect",{x:"52",y:"64",width:"27",height:"2",fill:"#434343"},null,-1),NM=(0,o.uE)('',1);function $M(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",VM,[WM,(0,o._)("g",RM,[LM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"52",y:"46",width:"27",height:"2",fill:"#689F38"},null,2),jM,qM]),NM]))])}var HM={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const ZM=(0,he.Z)(HM,[["render",$M]]);var YM=ZM;const KM={width:"135",height:"79",viewBox:"0 0 135 79",fill:"none",xmlns:"http://www.w3.org/2000/svg"},JM=(0,o.uE)('',8),XM=(0,o._)("rect",{x:"54",y:"67",width:"31",height:"2",fill:"#9E9E9E"},null,-1),QM=(0,o._)("rect",{x:"54",y:"75",width:"31",height:"2",fill:"#9E9E9E"},null,-1),eD={"clip-path":"url(#clip1_3834_17406)"},tD=(0,o.uE)('',3);function iD(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",KM,[JM,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"54",y:"58",width:"31",height:"2",fill:"#689F38"},null,2),XM,QM,(0,o._)("g",eD,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M46 57.75C45.31 57.75 44.75 58.31 44.75 59C44.75 59.69 45.31 60.25 46 60.25C46.69 60.25 47.25 59.69 47.25 59C47.25 58.31 46.69 57.75 46 57.75ZM46 56.5C44.62 56.5 43.5 57.62 43.5 59C43.5 60.38 44.62 61.5 46 61.5C47.38 61.5 48.5 60.38 48.5 59C48.5 57.62 47.38 56.5 46 56.5ZM46 61C44.895 61 44 60.105 44 59C44 57.895 44.895 57 46 57C47.105 57 48 57.895 48 59C48 60.105 47.105 61 46 61Z",fill:"#689F38"},null,2)]),tD]))])}var aD={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const oD=(0,he.Z)(aD,[["render",iD]]);var rD=oD;const lD={width:"135",height:"75",viewBox:"0 0 135 75",fill:"none",xmlns:"http://www.w3.org/2000/svg"},sD=(0,o._)("rect",{width:"26",height:"5",fill:"#434343"},null,-1),nD=(0,o._)("rect",{y:"6",width:"20",height:"5",fill:"#BDBDBD"},null,-1),dD=(0,o._)("rect",{x:"115",width:"20",height:"5",fill:"#BDBDBD"},null,-1),pD=(0,o._)("rect",{x:"47",y:"21",width:"43",height:"2",fill:"#434343"},null,-1),fD=(0,o._)("rect",{x:"58",y:"42",width:"31",height:"2",fill:"#9E9E9E"},null,-1),uD=(0,o._)("rect",{x:"58",y:"50",width:"31",height:"2",fill:"#9E9E9E"},null,-1),cD={"clip-path":"url(#clip0_3834_17407)"},hD=(0,o.uE)('',7);function mD(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",lD,[sD,nD,dD,pD,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"58",y:"33",width:"31",height:"2",fill:"#689F38"},null,2),fD,uD,(0,o._)("g",cD,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M50 32.75C49.31 32.75 48.75 33.31 48.75 34C48.75 34.69 49.31 35.25 50 35.25C50.69 35.25 51.25 34.69 51.25 34C51.25 33.31 50.69 32.75 50 32.75ZM50 31.5C48.62 31.5 47.5 32.62 47.5 34C47.5 35.38 48.62 36.5 50 36.5C51.38 36.5 52.5 35.38 52.5 34C52.5 32.62 51.38 31.5 50 31.5ZM50 36C48.895 36 48 35.105 48 34C48 32.895 48.895 32 50 32C51.105 32 52 32.895 52 34C52 35.105 51.105 36 50 36Z",fill:"#689F38"},null,2)]),hD]))])}var gD={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const _D=(0,he.Z)(gD,[["render",mD]]);var yD=_D;const wD={width:"135",height:"85",viewBox:"0 0 135 85",fill:"none",xmlns:"http://www.w3.org/2000/svg"},xD=(0,o._)("rect",{width:"26",height:"5",fill:"#434343"},null,-1),CD=(0,o._)("rect",{y:"6",width:"20",height:"5",fill:"#BDBDBD"},null,-1),vD=(0,o._)("rect",{x:"115",width:"20",height:"5",fill:"#BDBDBD"},null,-1),bD=(0,o._)("rect",{x:"47",y:"21",width:"43",height:"2",fill:"#434343"},null,-1),BD=(0,o._)("rect",{x:"58",y:"42",width:"31",height:"2",fill:"#9E9E9E"},null,-1),SD=(0,o._)("rect",{x:"58",y:"50",width:"31",height:"2",fill:"#9E9E9E"},null,-1),kD={"clip-path":"url(#clip0_3834_17276)"},AD=(0,o._)("g",{"clip-path":"url(#clip1_3834_17276)"},[(0,o._)("path",{d:"M50 40.5C48.62 40.5 47.5 41.62 47.5 43C47.5 44.38 48.62 45.5 50 45.5C51.38 45.5 52.5 44.38 52.5 43C52.5 41.62 51.38 40.5 50 40.5ZM50 45C48.895 45 48 44.105 48 43C48 41.895 48.895 41 50 41C51.105 41 52 41.895 52 43C52 44.105 51.105 45 50 45Z",fill:"#9E9E9E"})],-1),MD=(0,o._)("g",{"clip-path":"url(#clip2_3834_17276)"},[(0,o._)("path",{d:"M50 48.5C48.62 48.5 47.5 49.62 47.5 51C47.5 52.38 48.62 53.5 50 53.5C51.38 53.5 52.5 52.38 52.5 51C52.5 49.62 51.38 48.5 50 48.5ZM50 53C48.895 53 48 52.105 48 51C48 49.895 48.895 49 50 49C51.105 49 52 49.895 52 51C52 52.105 51.105 53 50 53Z",fill:"#9E9E9E"})],-1),DD=(0,o._)("rect",{x:"58",y:"73",width:"31",height:"2",fill:"#9E9E9E"},null,-1),TD=(0,o._)("rect",{x:"58",y:"81",width:"31",height:"2",fill:"#9E9E9E"},null,-1),OD={"clip-path":"url(#clip3_3834_17276)"},GD=(0,o.uE)('',3);function ED(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",wD,[xD,CD,vD,bD,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"58",y:"33",width:"31",height:"2",fill:"#689F38"},null,2),BD,SD,(0,o._)("g",kD,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M50 32.75C49.31 32.75 48.75 33.31 48.75 34C48.75 34.69 49.31 35.25 50 35.25C50.69 35.25 51.25 34.69 51.25 34C51.25 33.31 50.69 32.75 50 32.75ZM50 31.5C48.62 31.5 47.5 32.62 47.5 34C47.5 35.38 48.62 36.5 50 36.5C51.38 36.5 52.5 35.38 52.5 34C52.5 32.62 51.38 31.5 50 31.5ZM50 36C48.895 36 48 35.105 48 34C48 32.895 48.895 32 50 32C51.105 32 52 32.895 52 34C52 35.105 51.105 36 50 36Z",fill:"#689F38"},null,2)]),AD,MD,(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"58",y:"64",width:"31",height:"2",fill:"#689F38"},null,2),DD,TD,(0,o._)("g",OD,[(0,o._)("path",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),d:"M50 63.75C49.31 63.75 48.75 64.31 48.75 65C48.75 65.69 49.31 66.25 50 66.25C50.69 66.25 51.25 65.69 51.25 65C51.25 64.31 50.69 63.75 50 63.75ZM50 62.5C48.62 62.5 47.5 63.62 47.5 65C47.5 66.38 48.62 67.5 50 67.5C51.38 67.5 52.5 66.38 52.5 65C52.5 63.62 51.38 62.5 50 62.5ZM50 67C48.895 67 48 66.105 48 65C48 63.895 48.895 63 50 63C51.105 63 52 63.895 52 65C52 66.105 51.105 67 50 67Z",fill:"#689F38"},null,2)]),GD]))])}var UD={name:"ResourcesList",props:{color:{default:"light-green",type:String}}};const FD=(0,he.Z)(UD,[["render",ED]]);var ID=FD,zD={name:"BookingFlow",components:{DateMonth:Gh,DateWeek:Wh,AppointmentOptions:Dm,TimeOfDayColumns:vg,SingleColumn:Lg,RowView:f_,BlockView:G_,ExpressSingleColumn:ty,ExpressRows:Gy,ExpressBlocks:cw,DateOnlyAvailable:Zh,ResourcesTeamList:Bw,ResourcesTeamRadio:zw,ExpressListResourcesMultipleTime:Sx,ExpressRadioResourcesMultipleTime:pC,ExpressRadioResourcesSingleTime:IC,ExpressListResourcesSingleTime:uv,ExpressListResourcesRows:yv,ExpressRadioResourcesRows:Bv,ExpressListResourcesBlock:Tv,ExpressRadioResourcesBlock:Iv,ListResourcesListTeamMultipleTime:vb,ListResourcesRadioTeamMultipleTime:ZB,ListResourcesRadioTeamSingleTime:CS,ListResourcesListTeamSingleTime:Jb,ListResourcesListTeamRows:aB,ListResourcesRadioTeamRows:AS,RadioResourcesListTeamRows:Xk,RadioResourcesRadioTeamRows:GM,ListResourcesListTeamBlock:dB,RadioResourcesListTeamBlock:oA,ListResourcesRadioTeamBlock:ES,RadioResourcesRadioTeamBlock:PM,RadioResourcesRadioTeamSingleTime:IA,RadioResourcesListTeamSingleTime:sk,RadioResourcesListTeamMultipleTime:$k,RadioResourcesRadioTeamMultipleTime:kM,ListResourcesListTeam:YM,ListResourcesRadioTeam:rD,RadioResourcesListTeam:yD,RadioResourcesRadioTeam:ID,PromoPro:ft},props:{bookingFlow:{default:"expanded",type:String}},data(){return{activeStep:"",options:X,promoProUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"booking-flows",utm_content:"general-pro-settings-popup"}}},watch:{steps(e,t){e!=t&&(this.activeStep=this.steps[0])}},mounted(){this.activeStep=this.steps[0]},computed:{label(){let e=this.apptTypeLabels.find((e=>e.id==this.currentAppointmentType.label_id));return e||this.defaultLabel},resourcesView:{get(){return this.currentAppointmentType.booking_flow_settings.resources_view?this.currentAppointmentType.booking_flow_settings.resources_view:"list"},set(e){this.updateBookingFlowSettings({key:"resources_view",value:e})}},dateView:{get(){return this.currentAppointmentType.booking_layout?this.currentAppointmentType.booking_layout:"week"},set(e){this.updateCurrentAppointmentType({key:"booking_layout",value:e})}},dateViewOptions(){return this.settings.installed.booking_flows?this.options.dateViews:this.options.bookingLayouts},timeView:{get(){return this.currentAppointmentType.booking_flow_settings.time_view?this.currentAppointmentType.booking_flow_settings.time_view:"time_of_day_columns"},set(e){this.updateBookingFlowSettings({key:"time_view",value:e})}},teamView:{get(){return this.currentAppointmentType.booking_flow_settings.team_view?this.currentAppointmentType.booking_flow_settings.team_view:"list"},set(e){this.updateBookingFlowSettings({key:"team_view",value:e})}},isResourcesEnabled(){return this.settings.installed.resources&&this.settings.resources.enabled},isTeamEnabled(){return this.settings.installed.staff&&this.settings.staff.enabled},showEndTime:{get(){return!!this.currentAppointmentType.booking_flow_settings.show_end_time&&this.currentAppointmentType.booking_flow_settings.show_end_time},set(e){this.updateBookingFlowSettings({key:"show_end_time",value:e})}},steps(){let e=this.options.expandedSteps;switch(this.currentAppointmentType.booking_flow_settings.booking_flow){case"expanded":e=this.getExpandedSteps();break;case"express":e=this.options.expressSteps;break;case"first_available":switch(this.currentAppointmentType.booking_flow_settings.fallback_booking_flow){case"expanded":e=e=this.getExpandedSteps();break;case"express":e=this.options.expressSteps;break}break}return e},shouldShowListViewForResourcesTeam(){return"list"==this.resourcesView&&this.onlyResourcesRequired||"list"==this.teamView&&this.onlyTeamRequired},shouldShowRadioViewForResourcesTeam(){return"radio"==this.resourcesView&&this.onlyResourcesRequired||"radio"==this.teamView&&this.onlyTeamRequired},onlyResourcesRequired(){return this.isResourcesEnabled&&(!this.isTeamEnabled||"user_preference"!=this.currentAppointmentType.staff.required)&&this.currentAppointmentType.resources_settings.some((e=>"user_preference"==e.resource_option))},onlyTeamRequired(){return this.isTeamEnabled&&"user_preference"==this.currentAppointmentType.staff.required&&(!this.isResourcesEnabled||this.currentAppointmentType.resources_settings.every((e=>"user_preference"!=e.resource_option)))},isResourcesTeamRequired(){return this.isTeamEnabled&&this.isResourcesEnabled&&"user_preference"==this.currentAppointmentType.staff.required&&this.currentAppointmentType.resources_settings.some((e=>"user_preference"==e.resource_option))},resourcesTeamNotRequired(){return!(this.onlyResourcesRequired||this.isResourcesTeamRequired)&&!(this.onlyTeamRequired||this.isResourcesTeamRequired)},bookingFlowEnabled(){return this.settings.installed.booking_flows},...(0,m.rn)("appointment_types",["currentAppointmentType","booking_flow_settings"]),...(0,m.rn)("labels",["apptTypeLabels"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.Se)("labels",["defaultLabel"])},methods:{getExpandedSteps(){let e=this.options.expandedSteps;return this.isResourcesTeamRequired?e.unshift("resources_and_team"):e=e.filter((e=>"resources_and_team"!==e)),this.onlyResourcesRequired?e.unshift("resources"):e=e.filter((e=>"resources"!==e)),this.onlyTeamRequired?e.unshift("team"):e=e.filter((e=>"team"!==e)),e=[...new Set(e)],e},activate(e){this.bookingFlowEnabled?this.activeStep=e:this.maybeShowUpgrade()},maybeShowUpgrade(){this.bookingFlowEnabled||this.$refs["upgradeBookingFlow"].open()},closeDialog(){this.$refs["upgradeBookingFlow"].close()},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"]),...(0,m.OI)("appointment_types",["updateBookingFlowSettings"])}};const PD=(0,he.Z)(zD,[["render",Bh],["__scopeId","data-v-415390dd"]]);var VD=PD;const WD={class:"inline-label"},RD={class:"md-subheading"};function LD(e,t,i,a,l,s){const n=(0,o.up)("first-available-view"),d=(0,o.up)("duration"),p=(0,o.up)("foxy-layout"),f=(0,o.up)("foxy-notification"),u=(0,o.up)("foxy-list-item"),c=(0,o.up)("foxy-select");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(p,{class:(0,r.C_)(["complex-field",{"md-input-invalid":!l.validMinMax}])},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{class:"preview",color:s.label.color},null,8,["color"]),(0,o._)("div",WD,[(0,o._)("p",RD,(0,r.zw)(e.translations.appointmentTypes.first_available_within),1)]),(0,o.Wm)(d,{modelValue:l.v$.suggest_first_available_within_minutes.$model,"onUpdate:modelValue":t[0]||(t[0]=e=>l.v$.suggest_first_available_within_minutes.$model=e),"allow-null":!0,"help-text":e.translations.appointmentTypes.first_available_within_help},null,8,["modelValue","help-text"])])),_:1},8,["class"]),(0,o.Wm)(f,{theme:"blue",icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.first_available_notification),1)])),_:1}),(0,o.Wm)(c,{label:e.translations.appointmentTypes.fallBackBookingFlow,name:"firstBookingFlow",id:"firstBookingFlow",modelValue:s.fallBackBookingFlow,"onUpdate:modelValue":t[1]||(t[1]=e=>s.fallBackBookingFlow=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.options.fallBackBookingFlows,(t=>((0,o.wg)(),(0,o.j4)(u,{"data-value":t,key:t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.bookingFlows[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])])}const jD={width:"141",height:"48",viewBox:"0 0 141 48",fill:"none",xmlns:"http://www.w3.org/2000/svg"},qD={filter:"url(#filter0_ddd_2823_15688)"},ND=(0,o.uE)('',6);function $D(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",null,[((0,o.wg)(),(0,o.iD)("svg",jD,[(0,o._)("g",qD,[(0,o._)("rect",{class:(0,r.C_)(["changeColor",[`md-theme-${i.color}`]]),x:"3.73277",y:"35.1401",width:"47.7763",height:"7.32",fill:"#8BC34A"},null,2)]),ND]))])}var HD={name:"FirstAvailableView",props:{color:{default:"light-green",type:String}}};const ZD=(0,he.Z)(HD,[["render",$D]]);var YD=ZD,KD={name:"FirstAvailable",components:{Duration:Wd,FirstAvailableView:YD},props:{},data(){return{v$:(0,Rd.Xw)(),options:X,validMinMax:!0}},validations:{suggest_first_available_within_minutes:{minValue:(0,Ld.uv)(0)}},computed:{suggest_first_available_within_minutes:{get(){return this.currentAppointmentType.booking_flow_settings.suggest_first_available_within_minutes},set(e){this.updateBookingFlowSettings({key:"suggest_first_available_within_minutes",value:e}),this.validationCheck()}},fallBackBookingFlow:{get(){return this.currentAppointmentType.booking_flow_settings.fallback_booking_flow?this.currentAppointmentType.booking_flow_settings.fallback_booking_flow:"expanded"},set(e){this.updateBookingFlowSettings({key:"fallback_booking_flow",value:e})}},label(){let e=this.apptTypeLabels.find((e=>e.id==this.currentAppointmentType.label_id));return e||this.defaultLabel},...(0,m.rn)("appointment_types",["currentAppointmentType"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)("labels",["apptTypeLabels"])},methods:{validationCheck(){let e=this.suggest_first_available_within_minutes?parseInt(this.suggest_first_available_within_minutes,10):null;this.validMinMax=!(e<0),this.$emit("validationCheck",this.validMinMax)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"]),...(0,m.OI)("appointment_types",["updateBookingFlowSettings"]),...(0,m.Se)("labels",["defaultLabel"])}};const JD=(0,he.Z)(KD,[["render",LD]]);var XD=JD;const QD={class:"md-heading"},eT={key:0},tT=["onClick"],iT={key:1},aT={key:0,class:"radio-list",role:"radiogroup","aria-labelledby":"groupLabel",style:{"padding-left":"2rem"}},oT={id:"groupLabel",class:"screen-reader-text"},rT={key:1};function lT(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-radio"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.iD)("div",null,[s.loadingValue?((0,o.wg)(),(0,o.j4)(n,{key:0,size:"body",message:e.translations.settings.resources.loading},null,8,["message"])):s.appointmentTypeResourceGroups.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.appointmentTypeResourceGroups,(t=>((0,o.wg)(),(0,o.iD)("div",{class:"resources-list",key:t.id},[(0,o._)("h3",QD,(0,r.zw)(t.title),1),"identifiable"==t.resource_type?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[0==s.getAssignedResources(t.id).length?((0,o.wg)(),(0,o.iD)("div",eT,[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.appointmentType.emptyResourceGroup)+" ",1),(0,o._)("a",{href:"#",onClick:e=>s.openResourceGroup(t.id)},(0,r.zw)(e.translations.settings.resources.appointmentType.addResourcesToGroup),9,tT)])):((0,o.wg)(),(0,o.iD)("fieldset",iT,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.resources.appointmentType.selectPreference),1),(0,o.Wm)(d,{modelValue:s.getResourceOption(t.id).resource_option,"onUpdate:modelValue":e=>s.getResourceOption(t.id).resource_option=e,id:"resource"+t.id+"-user-preference",name:"resource-preference",value:"user_preference",display:"flex"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.resources.appointmentType.userPreferenceLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.resources.appointmentType.userPreferenceDesc),1)])),_:2},1032,["modelValue","onUpdate:modelValue","id"]),(0,o.Wm)(d,{modelValue:s.getResourceOption(t.id).resource_option,"onUpdate:modelValue":e=>s.getResourceOption(t.id).resource_option=e,id:"resource"+t.id+"-any",name:"resource-preference",value:"any",display:"flex"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.resources.appointmentType.anyLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.resources.appointmentType.anyDesc),1)])),_:2},1032,["modelValue","onUpdate:modelValue","id"]),(0,o.Wm)(d,{modelValue:s.getResourceOption(t.id).resource_option,"onUpdate:modelValue":e=>s.getResourceOption(t.id).resource_option=e,id:"resource"+t.id+"-assigned",name:"resource-preference",value:"assigned",display:"flex"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.resources.appointmentType.assignedLabel),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.resources.appointmentType.assignedDesc),1)])),_:2},1032,["modelValue","onUpdate:modelValue","id"]),"assigned"===s.getResourceOption(t.id).resource_option?((0,o.wg)(),(0,o.iD)("div",aT,[(0,o._)("div",oT,(0,r.zw)(e.translations.settings.resources.appointmentType.selectResource),1),"assigned"===s.getResourceOption(t.id).resource_option&&0==s.getResourceOption(t.id).assigned_resource_id?((0,o.wg)(),(0,o.j4)(p,{key:0,icon:"warning",theme:"orange"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.resources.assignResource),1)])),_:1})):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.getAssignedResources(t.id),(e=>((0,o.wg)(),(0,o.j4)(d,{modelValue:s.getResourceOption(t.id).assigned_resource_id,"onUpdate:modelValue":e=>s.getResourceOption(t.id).assigned_resource_id=e,key:e.id,id:"assigned-resource-"+e.id,name:"assigned-resource",value:e.id,label:e.title},null,8,["modelValue","onUpdate:modelValue","id","value","label"])))),128))])):(0,o.kq)("",!0)]))],64)):"identical"==t.resource_type?((0,o.wg)(),(0,o.iD)("div",rT,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.resources.appointmentType.identical),1)])):(0,o.kq)("",!0)])))),128)),(0,o.Wm)(f,{class:"md-list-action md-primary",onClick:t[0]||(t[0]=e=>s.manageResources())},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.manageResources),1)])),_:1})],64)):((0,o.wg)(),(0,o.j4)(u,{key:2,label:e.translations.errors.noResourcesAppointmentType},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/resources/all"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.addNew),1)])),_:1})])),_:1},8,["label"]))])}var sT={name:"ResourcesList",components:{Loading:ge},data(){return{loading:!0,options:{}}},watch:{resourceOptions:{deep:!0,handler(e){Object.values(e).forEach((e=>{"any"!==e.resource_option&&"user_preference"!==e.resource_option||(e.assigned_resource_id=0)})),Object.values(e).length>0&&(this.setCurrentAppointmentTypeIsDirty(!0),this.validationCheck())}}},mounted(){this.resourceGroups&&this.resourceGroups.length||(this.loading=!0,this.fetchResourceGroups()),this.resources&&this.resources.length||(this.loading=!0,this.fetchResources().then((()=>{this.loading=!1})))},computed:{appointmentTypeResourceGroups(){const e=this.currentAppointmentType.resource_group_ids,t=this.resourceGroups.filter((t=>{const i=parseInt(t.id);return e?.includes(i)}));return t},resourceOptions(){return this.currentAppointmentType.resources_settings},loadingValue:{get(){return!this.resources||!this.resourceGroups},set(e){this.loading=e}},...(0,m.rn)("resources",["resourceGroups","resources"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["currentAppointmentType"])},methods:{manageResources(){this.$router.push({name:"resources-all"})},getAssignedResources(e){const t=this.resourceGroups.find((t=>t.id===e)).resource_ids;return this.resources.filter((e=>"publish"===e.status&&t.includes(parseInt(e.id))))},validationCheck(){const e=[];Object.entries(this.currentAppointmentType.resources_settings).forEach((([t,i])=>{"assigned"===i.resource_option&&0==i.assigned_resource_id&&e.push(t)})),this.$emit("validationCheck",!e.length>0)},openResourceGroup(e){let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t),this.$router.push({name:"identifiable-group",params:{id:t.id}})},getResourceOption(e){return this.currentAppointmentType.resources_settings.find((t=>t.resource_group_id==e))},...(0,m.OI)("appointment_types",["setCurrentAppointmentTypeIsDirty"]),...(0,m.OI)("resources",["setCurrentResourceGroup"]),...(0,m.nv)("resources",["fetchResourceGroups","fetchResources"])}};const nT=(0,he.Z)(sT,[["render",lT],["__scopeId","data-v-44e5c9fd"]]);var dT=nT,pT={name:"AppointmentTypeEdit",props:{id:{type:[Number,String],required:!0}},components:{basics:Sp,availability:df,scheduling:Hf,Staff:vu,Capacity:_h,googleCalendar:Fu,webMeetings:uc,Webhooks:Sc,mailchimp:yc,customerInformation:qc,notifications:ah,Payments:pu,BookingFlow:VD,FirstAvailable:XD,Resources:dT,Revisions:Mn},data(){return{saving:!1,moment:fe(),validAvailability:!0,validBasics:!0,validCapacity:!0,validMailchimp:!0,validFirstAvailable:!0,validPayments:!0,validNotifications:!0,validScheduling:!0,validResources:!0,validStaff:!0,validWebMeetings:!0,section:"0",sectionId:"basics",options:X,isShortcodeNoticeVisible:!1,routerNext:null}},beforeMount(){if(this.id){var e=this.appointmentTypes.find((e=>e.id===this.id));this.updateCurrentAppointmentType(e)}},mounted(){this.fetchAppointmentType(this.currentAppointmentType.id),this.getGuides({"ssasc-plugin-screen":this.currentGuides})},beforeRouteLeave(e,t,i){if(this.currentAppointmentTypeIsDirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{currentAppointmentType:{handler:function(e,t){this.dirty=t},deep:!0},currentGuides(){this.getGuides({"ssasc-plugin-screen":this.currentGuides})}},computed:{mailchimp:{get(){return this.currentAppointmentType.mailchimp},set(e){this.updateCurrentAppointmentType({key:"mailchimp",value:e})}},validFormFields(){return this.validBasics&&this.validAvailability&&this.validScheduling&&this.validPayments&&this.validMailchimp&&this.validNotifications&&this.validStaff&&this.validCapacity&&this.validWebMeetings&&this.validFirstAvailable&&this.validResources},currentGuides(){if("capacity"===this.sectionId)return K.appointment_types.capacity;if("staff"===this.sectionId)return K.appointment_types.staff;if(this.settings.advanced_scheduling.enabled&&["availability","scheduling"].includes(this.sectionId))return K.appointment_types.advanced_scheduling_enabled;if(this.settings.installed.google_calendar&&this.settings.google_calendar.enabled&&"google-calendar"===this.sectionId)return K.appointment_types.google_calendar_enabled;if("web-meetings"===this.sectionId){let e=[K.appointment_types.web_meetings_enabled];return this.settings.installed.google_calendar&&this.settings.google_calendar.enabled&&this.settings.google_calendar.web_meetings?e.push(K.appointment_types.web_meetings_google_calendar):this.settings.installed.zoom&&this.settings.zoom.enabled&&""!==this.settings.zoom.access_token&&e.push(K.appointment_types.web_meetings_zoom),e}return"mailchimp"===this.sectionId?K.appointment_types.mailchimp_enabled:"webhooks"===this.sectionId?K.appointment_types.webhooks_enabled:"customer-information"===this.sectionId?K.appointment_types.customer_information:K.appointment_types.edit},flow:{get(){return this.currentAppointmentType.booking_flow_settings.booking_flow?this.currentAppointmentType.booking_flow_settings.booking_flow:"expanded"},set(e){"first_available"==e?this.updateBookingFlowSettings({key:"suggest_first_available",value:!0}):(this.validFirstAvailable=!0,this.updateBookingFlowSettings({key:"suggest_first_available",value:!1})),this.updateBookingFlowSettings({key:"booking_flow",value:e})}},displayHistory(){return!!this.settings.developer?.display_appointment_revisions&&(void 0!=this.currentAppointmentType.id&&null!==this.currentAppointmentType)},bookingFlowEnabled(){return this.settings.installed.booking_flows},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.rn)("appointment_types",["appointmentTypes","currentAppointmentTypeIsDirty","currentAppointmentType"]),...(0,m.Se)("appointment_types",["labelInfo"]),...(0,m.Se)("staff",["currentUserCan"]),...(0,m.Se)(["webMeetingsProviders"])},methods:{copyShortcode(){let e=this.$refs["shortcode"].textContent,t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999em",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t),this.isShortcodeNoticeVisible=!0},validateBasics(e){this.validBasics=e},validateCapacity(e){this.validCapacity=e},validateTitle(e){this.validTitle=e},validateSlug(e){this.validSlug=e},validateAvailability(e){this.validAvailability=e},validateScheduling(e){this.validScheduling=e},validatePayments(e){this.validPayments=e},validateNotifications(e){this.validNotifications=e},validateMailchimp(e){this.validMailchimp=e},validateStaff(e){this.validStaff=e},validateWebMeetings(e){this.validWebMeetings=e},validateFirstAvailable(e){this.validFirstAvailable=e},validateResources(e){this.validResources=e},saveAppointmentType:function(){this.saving=!0,this.updateAppointmentType().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")})),this.settings.global.wizard_completed||(this.updateWizardCompleted({settings:this.settings,value:fe().utc().format(this.timestampFormat)}),this.updateGlobalSettings())},staffUpdateCapacity(e){if(e.oldStaff===e.newStaff)return;let t=this.currentAppointmentType?parseInt(this.currentAppointmentType.capacity,10):1,i=this.currentAppointmentType?this.currentAppointmentType.capacity_type:"individual",a=this.currentAppointmentType?parseInt(this.currentAppointmentType.staff_capacity,10):1;!e.oldStaff&&e.newStaff?(this.updateCurrentAppointmentType({key:"capacity",value:1e5}),"individual"===i?this.updateCurrentAppointmentType({key:"staff_capacity",value:1}):this.updateCurrentAppointmentType({key:"staff_capacity",value:t})):e.oldStaff&&!e.newStaff&&(this.updateCurrentAppointmentType({key:"staff_capacity",value:1e5}),0==this.currentAppointmentType.resources_settings.length&&this.updateCurrentAppointmentType({key:"capacity",value:a}))},cancelEdit:function(){this.$router.push("/ssa/appointment-types/all")},updateSection(e,t){e?(this.section=e,this.sectionId=t):(this.section=null,this.sectionId=null)},dialogLeaveWithoutSaving(){this.routerNext()},maybeShowUpgrade(){this.bookingFlowEnabled||this.$refs.bookingFlow.maybeShowUpgrade()},...(0,m.OI)("global_settings",["updateWizardCompleted"]),...(0,m.nv)("global_settings",["updateGlobalSettings"]),...(0,m.nv)("appointment_types",["fetchAppointmentType","updateAppointmentType","updateCurrentAppointmentType"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.OI)("appointment_types",["updateBookingFlowSettings"])}};const fT=(0,he.Z)(pT,[["render",Od]]);var uT=fT;const cT={class:"appt-type-bulk-edit"},hT={style:{flex:"1"}},mT={class:"md-title"};function gT(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-dialog-confirm"),f=(0,o.up)("foxy-switch"),u=(0,o.up)("foxy-toolbar"),c=(0,o.up)("bulk-single"),h=(0,o.up)("bulk-all"),m=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("div",cT,[l.saving?((0,o.wg)(),(0,o.j4)(n,{key:0,message:e.translations.general.saving},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(d,{onClick:s.cancelBulkEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[l.dirty?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.back),1)],64))])),_:1},8,["onClick"]),(0,o.Wm)(p,{ref:"confirmLeaveDirty",title:e.translations.appointmentTypes.confirmIgnoreChangesTitle,"content-html":e.translations.appointmentTypes.confirmIgnoreChangesContent,"ok-text":e.translations.appointmentTypes.confirmIgnoreChangesOkay,"cancel-text":e.translations.appointmentTypes.confirmIgnoreChangesCancel,onCancel:s.dialogKeepEdits,onConfirm:s.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onCancel","onConfirm"]),(0,o.Wm)(u,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("div",hT,[(0,o._)("h2",mT,(0,r.zw)(e.translations.wizard.appointmentType[i.section]),1)]),(0,o.Wm)(f,{id:"editSingle",modelValue:l.editSingle,"onUpdate:modelValue":[t[0]||(t[0]=e=>l.editSingle=e),s.switchEditMode],name:"editSingle"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.actions.editSingle),1)])),_:1},8,["modelValue","onUpdate:modelValue"])])),_:1}),l.editSingle?((0,o.wg)(),(0,o.j4)(c,{key:0,onChangeAccordion:s.changeAppointmentType,onCancel:s.changeAppointmentType,onSave:s.saveSingleEdit,saving:l.singleSaving,section:i.section,dirty:l.dirty},null,8,["onChangeAccordion","onCancel","onSave","saving","section","dirty"])):((0,o.wg)(),(0,o.j4)(h,{key:1,onCancel:s.cancelBulkEdit,onSave:s.saveBulkEdit,section:i.section},null,8,["onCancel","onSave","section"]))],64)),(0,o.Wm)(m,{position:"top center",modelValue:l.isSaveStatusVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>l.isSaveStatusVisible=e),message:l.snackbarTitle+" "+e.translations.appointmentTypes.saved},null,8,["modelValue","message"])])}const _T={class:"accordion-actions"},yT={class:"actions-button-flex"};function wT(e,t,i,l,s,n){const d=(0,o.up)("basics"),p=(0,o.up)("availability"),f=(0,o.up)("scheduling"),u=(0,o.up)("payments"),c=(0,o.up)("google-calendar"),h=(0,o.up)("mailchimp"),m=(0,o.up)("customer-information"),g=(0,o.up)("notifications"),_=(0,o.up)("foxy-progress-circular"),y=(0,o.up)("foxy-button"),w=(0,o.up)("foxy-accordion-item"),x=(0,o.up)("foxy-accordion"),C=(0,o.up)("foxy-theme");return(0,o.wg)(),(0,o.j4)(C,{theme:e.currentAppointmentType?e.currentAppointmentType.label:"default"},{default:(0,o.w5)((()=>[(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.bulkEditing,(l=>((0,o.wg)(),(0,o.j4)(w,{key:l,label:e.getAppointmentTypeById(l).title,section:i.section,index:l,onUpdateActive:n.changeAccordion,open:e.currentAppointmentType?e.currentAppointmentType.id:null},{default:(0,o.w5)((()=>[(0,o._)("div",{class:(0,r.C_)(["accordion-edit-section",{saving:i.saving}])},["basics"===i.section?((0,o.wg)(),(0,o.j4)(d,{key:0,onValidationCheck:n.validateBasics},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"availability"===i.section?((0,o.wg)(),(0,o.j4)(p,{key:1,onValidationCheck:n.validateAvailability},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"scheduling"===i.section?((0,o.wg)(),(0,o.j4)(f,{key:2,onValidationCheck:n.validateScheduling},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"payments"===i.section?((0,o.wg)(),(0,o.j4)(u,{key:3,onValidationCheck:n.validatePayments},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"googleCalendar"===i.section?((0,o.wg)(),(0,o.j4)(c,{key:4})):(0,o.kq)("",!0),"mailchimp"===i.section?((0,o.wg)(),(0,o.j4)(h,{key:5,onValidationCheck:n.validateMailchimp,modelValue:n.mailchimp,"onUpdate:modelValue":t[0]||(t[0]=e=>n.mailchimp=e)},null,8,["onValidationCheck","modelValue"])):(0,o.kq)("",!0),"customerInfo"===i.section?((0,o.wg)(),(0,o.j4)(m,{key:6})):(0,o.kq)("",!0),"notifications"===i.section?((0,o.wg)(),(0,o.j4)(g,{key:7})):(0,o.kq)("",!0)],2),(0,o._)("div",_T,[(0,o._)("div",yT,[(0,o.wy)((0,o.Wm)(_,{indeterminate:"",medium:"",class:"md-primary"},null,512),[[a.F8,i.saving]]),(0,o.Wm)(y,{onClick:n.cancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(y,{disabled:i.saving||!n.validFormFields,mode:"raised",class:"md-primary",onClick:n.save},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["disabled","onClick"])])])])),_:2},1032,["label","section","index","onUpdateActive","open"])))),128))])),_:1})])),_:1},8,["theme"])}var xT={name:"BulkEditSingle",props:["section","dirty","saving"],components:{Basics:Sp,Availability:df,Scheduling:Hf,Payments:pu,GoogleCalendar:Fu,Mailchimp:yc,CustomerInformation:qc,Notifications:ah},data(){return{validBasics:!0,validAvailability:!0,validScheduling:!0,validPayments:!0,validMailchimp:!0}},computed:{mailchimp:{get(){return this.currentAppointmentType&&this.currentAppointmentType.mailchimp?this.currentAppointmentType.mailchimp:{}},set(e){this.updateCurrentAppointmentType({key:"mailchimp",value:e})}},validFormFields(){let e=!0;switch(this.section){case"basics":e=this.validBasics;break;case"availability":e=this.validAvailability;break;case"scheduling":e=this.validScheduling;break;case"payments":e=this.validPayments;break;case"mailchimp":e=this.validMailchimp;break}return e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["bulkEditing","currentAppointmentType"]),...(0,m.Se)("appointment_types",["getAppointmentTypeById"])},methods:{save(){this.$emit("save")},cancel(){this.$emit("cancel")},validateBasics(e){this.validBasics=e},validateAvailability(e){this.validAvailability=e},validateScheduling(e){this.validScheduling=e},validatePayments(e){this.validPayments=e},validateMailchimp(e){this.validMailchimp=e},changeAccordion(e){this.$emit("changeAccordion",e)},...(0,m.nv)("appointment_types",["updateCurrentAppointmentType"])}};const CT=(0,he.Z)(xT,[["render",wT]]);var vT=CT;function bT(e,t,i,a,l,s){const n=(0,o.up)("basics"),d=(0,o.up)("availability"),p=(0,o.up)("scheduling"),f=(0,o.up)("payments"),u=(0,o.up)("google-calendar"),c=(0,o.up)("mailchimp"),h=(0,o.up)("customer-information"),m=(0,o.up)("foxy-card-content"),g=(0,o.up)("foxy-button"),_=(0,o.up)("foxy-card-actions"),y=(0,o.up)("foxy-card"),w=(0,o.up)("foxy-theme");return(0,o.wg)(),(0,o.j4)(w,{theme:e.currentAppointmentType.label},{default:(0,o.w5)((()=>[(0,o._)("p",null,[(0,o._)("strong",null,(0,r.zw)(e.translations.appointmentTypes.bulkEditExplanation),1),(0,o.Uk)(" "+(0,r.zw)(s.appointment_type_names),1)]),(0,o.Wm)(y,null,{default:(0,o.w5)((()=>[(0,o.Wm)(m,null,{default:(0,o.w5)((()=>["basics"===i.section?((0,o.wg)(),(0,o.j4)(n,{key:0,"bulk-mode":!0,onValidationCheck:s.validateBasics},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"availability"===i.section?((0,o.wg)(),(0,o.j4)(d,{key:1,onValidationCheck:s.validateAvailability},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"scheduling"===i.section?((0,o.wg)(),(0,o.j4)(p,{key:2,onValidationCheck:s.validateScheduling},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"payments"===i.section?((0,o.wg)(),(0,o.j4)(f,{key:3,onValidationCheck:s.validatePayments},null,8,["onValidationCheck"])):(0,o.kq)("",!0),"googleCalendar"===i.section?((0,o.wg)(),(0,o.j4)(u,{key:4})):(0,o.kq)("",!0),"mailchimp"===i.section?((0,o.wg)(),(0,o.j4)(c,{key:5,onValidationCheck:s.validateMailchimp,modelValue:s.mailchimp,"onUpdate:modelValue":t[0]||(t[0]=e=>s.mailchimp=e)},null,8,["onValidationCheck","modelValue"])):(0,o.kq)("",!0),"customerInfo"===i.section?((0,o.wg)(),(0,o.j4)(h,{key:6,"bulk-mode":!0})):(0,o.kq)("",!0)])),_:1}),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(g,{onClick:s.cancel},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(g,{mode:"raised",onClick:s.save,disabled:!s.validFormFields},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"])])),_:1})])),_:1})])),_:1},8,["theme"])}var BT={name:"BulkEditAll",props:{section:{type:String,default:""}},components:{Basics:Sp,Availability:df,Scheduling:Hf,Payments:pu,GoogleCalendar:Fu,Mailchimp:yc,CustomerInformation:qc},data(){return{validBasics:!0,validAvailability:!0,validScheduling:!0,validPayments:!0,validMailchimp:!0}},watch:{section(){"availability"===this.section&&(this.maybeSyncAvailabilityType(),this.maybeSyncAvailability())}},mounted(){"availability"===this.section&&(this.maybeSyncAvailabilityType(),this.maybeSyncAvailability())},computed:{mailchimp:{get(){return this.currentAppointmentType.mailchimp},set(e){this.updateCurrentAppointmentType({key:"mailchimp",value:e})}},validFormFields(){let e=!0;switch(this.section){case"basics":e=this.validBasics;break;case"availability":e=this.validAvailability;break;case"scheduling":e=this.validScheduling;break;case"payments":e=this.validPayments;break;case"mailchimp":e=this.validMailchimp;break}return e},appointment_types(){let e=this.bulkEditing.map((e=>{let t=this.appointmentTypes.find((t=>t.id===e));return t}));return e},appointment_type_names(){let e=this.appointment_types.map((e=>e.title));return e.join(", ")},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("appointment_types",["appointmentTypes","bulkEditing","currentAppointmentType"])},methods:{cancel(){this.$emit("cancel")},save(){this.$emit("save")},validateBasics(e){this.validBasics=e},validateAvailability(e){this.validAvailability=e},maybeSyncAvailability(){let e=this.appointment_types.map((e=>e.availability)),t=!0;for(let i=0;ie.availability_type)),t=!0;for(let i=0;i{})):i()},watch:{currentAppointmentType:{handler:function(e){e?.id&&(this.currentAppointmentTypePreviousValue?.id&&e?.id&&this.currentAppointmentTypePreviousValue?.id!==e?.id||!this.currentAppointmentTypePreviousValue?.id&&e&&e.id?this.currentAppointmentTypePreviousValue=JSON.parse(JSON.stringify(e)):this.currentAppointmentTypePreviousValue?.id&&(JSON.stringify(e)!==JSON.stringify(this.currentAppointmentTypePreviousValue)?this.dirty=!0:this.dirty=!1))},deep:!0,immediate:!0}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["router"]),...(0,m.rn)("appointment_types",["bulkEditing","currentAppointmentType","appointmentTypes"]),...(0,m.Se)("appointment_types",["editableAppointmentTypeIds"])},methods:{backToList(){this.router.push("/ssa/appointment-types/all")},changeAppointmentType(e){if(this.dirty){let t=()=>{if(e&&"object"!=typeof e){var t=this.appointmentTypes.find((t=>t.id==e));this.updateCurrentAppointmentType(t)}else this.emptyCurrentAppointmentType();this.$nextTick((()=>{this.dirty=!1}))};this.displayDialog(t,(()=>{}))}else{if(e){var t=this.appointmentTypes.find((t=>t.id==e));this.updateCurrentAppointmentType(t)}else this.emptyCurrentAppointmentType();this.$nextTick((()=>{this.dirty=!1}))}},cancelBulkEdit(){this.backToList()},saveBulkEdit(){this.saving=!0,this.updateAppointmentTypes(!0).then((()=>{this.$nextTick((()=>{this.saving=!1,this.dirty=!1,this.backToList()}))}))},saveSingleEdit(){this.singleSaving=!0,this.updateAppointmentType().then((()=>{this.snackbarTitle=this.currentAppointmentType.title,this.isSaveStatusVisible=!0,this.emptyCurrentAppointmentType(),this.currentAppointmentTypePreviousValue=null,this.singleSaving=!1,this.$nextTick((()=>{this.dirty=!1}))}))},switchEditMode(e){if(this.dirty){let t=()=>{e?this.emptyCurrentAppointmentType():this.defineNewEmptyAppointmentType(),this.$nextTick((()=>{this.dirty=!1}))},i=()=>{this.editSingle=!this.editSingle};this.displayDialog(t,i)}else e?this.emptyCurrentAppointmentType():this.defineNewEmptyAppointmentType(),this.$nextTick((()=>{this.dirty=!1}))},displayDialog(e,t){let i="confirmLeaveDirty";this.$refs[i].open(),this.confirmDialogCallbacks={okCb:e,cancelCb:t}},dialogLeaveWithoutSaving(){this.$nextTick((()=>{this.confirmDialogCallbacks.okCb()}))},dialogKeepEdits(){this.$nextTick((()=>{this.confirmDialogCallbacks.cancelCb()}))},...(0,m.nv)("appointment_types",["updateAppointmentType","updateAppointmentTypes","updateCurrentAppointmentType","emptyCurrentAppointmentType"]),...(0,m.OI)("appointment_types",["defineNewEmptyAppointmentType","updateBulkEditing"])}};const MT=(0,he.Z)(AT,[["render",gT]]);var DT=MT,TT=[{path:"appointment-types",component:rd,redirect:"/ssa/appointment-types/all",meta:{ssa_manage_appointment_types:!0},children:[{path:"all",name:"appointment-types-all",component:Cd},{path:"type/:id?",name:"appointment-type-single",component:uT,props:!0},{path:"edit/:section",name:"appointment-type-bulk-edit",component:DT,props:!0}]}];const OT={class:"settings-all"};function GT(e,t,i,a,r,l){const s=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",OT,[(0,o.Wm)(s,{onSaved:l.backToSettings},null,8,["onSaved"])])}var ET={name:"SettingsAll",data(){return{}},methods:{backToSettings(){this.$router.push("/ssa/settings/all")}}};const UT=(0,he.Z)(ET,[["render",GT]]);var FT=UT;const IT={class:"settings-list"},zT={class:"md-title",style:{flex:"1"}},PT={key:1,class:"align-right"};function VT(e,t,i,a,l,s){const n=(0,o.up)("no-permission"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-toolbar"),f=(0,o.up)("license-key"),u=(0,o.up)("settings-card"),c=(0,o.up)("foxy-notification"),h=(0,o.up)("foxy-layout"),m=(0,o.up)("foxy-theme");return(0,o.wg)(),(0,o.iD)("div",IT,[e.currentUserCan("ssa_manage_site_settings")||e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(p,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("h2",zT,(0,r.zw)(e.translations.settings.settingsTitle),1),e.settings.installed.license&&0!=e.settings.license?.license_show_settings&&e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(d,{key:0,class:"md-primary",onClick:s.toggleLicense},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.license.manage),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])),_:1}),l.license?((0,o.wg)(),(0,o.j4)(f,{key:0})):(0,o.kq)("",!0),(0,o.Wm)(h,{class:"settings-list-container","md-gutter":""},{default:(0,o.w5)((()=>[e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:0,onEdit:t[0]||(t[0]=e=>s.editSettings("general")),image:e.api.admin_static_url+"/images/settings-general.svg",title:e.translations.settings.general.title,"can-disable":!1},null,8,["image","title"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:1,onEdit:t[1]||(t[1]=e=>s.editSettings("styles")),image:e.api.admin_static_url+"/images/settings-styles.svg",title:e.translations.settings.styles.title,"can-disable":!1},null,8,["image","title"])):(0,o.kq)("",!0),e.settings.installed.translation&&e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:2,onEdit:t[2]||(t[2]=e=>s.editSettings("translations")),image:e.api.admin_static_url+"/images/settings-translation.svg",title:e.translations.settings.translations.title,"can-disable":!1},null,8,["image","title"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:3,onEdit:t[3]||(t[3]=e=>s.editSettings("advanced-scheduling")),image:e.api.admin_static_url+"/images/settings-advanced-scheduling.svg",title:e.translations.settings.advanced_scheduling.title,"can-disable":!1},null,8,["image","title"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:4,onEdit:t[4]||(t[4]=e=>s.editSettings("notifications")),image:s.notificationImage,title:e.translations.settings.notifications.title,modelValue:s.notifications_enabled,"onUpdate:modelValue":t[5]||(t[5]=e=>s.notifications_enabled=e)},null,8,["image","title","modelValue"])):(0,o.kq)("",!0),e.settings.installed.blackout_dates&&e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:5,onEdit:t[6]||(t[6]=e=>s.editSettings("blackout")),image:e.api.admin_static_url+"/images/settings-blackout.svg",title:e.translations.settings.blackout.title,modelValue:s.blackout_enabled,"onUpdate:modelValue":t[7]||(t[7]=e=>s.blackout_enabled=e)},null,8,["image","title","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:6,onEdit:t[8]||(t[8]=e=>s.editSettings("google-calendar")),image:e.api.admin_static_url+"/images/settings-google-calendar.svg",title:e.translations.settings.google_calendar.title,upgrade:e.googleCalendarModule.upgrade,"upgrade-level":"plus",modelValue:s.google_calendar_enabled,"onUpdate:modelValue":t[9]||(t[9]=e=>s.google_calendar_enabled=e)},{default:(0,o.w5)((()=>[e.googleCalendarModule.enabled&&!e.settings.google_calendar.access_token?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.google_calendar.noAccessToken),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:7,onEdit:t[10]||(t[10]=e=>s.editSettings("calendar-events")),modelValue:s.customizeCalendarEvents,"onUpdate:modelValue":t[11]||(t[11]=e=>s.customizeCalendarEvents=e),image:e.api.admin_static_url+"/images/settings-calendar-events.svg",title:e.translations.settings.calendar_events.card_title},null,8,["modelValue","image","title"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:8,onEdit:t[12]||(t[12]=e=>s.editSettings("mailchimp")),image:e.api.admin_static_url+"/images/settings-mailchimp.svg",title:e.translations.settings.mailchimp.title,upgrade:e.mailchimpModule.upgrade,"upgrade-level":"plus",modelValue:s.mailchimp_enabled,"onUpdate:modelValue":t[13]||(t[13]=e=>s.mailchimp_enabled=e)},{default:(0,o.w5)((()=>[e.mailchimpModule.enabled&&!e.settings.mailchimp.account_details?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.mailchimp.noConnection),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:9,onEdit:t[14]||(t[14]=e=>s.editSettings("zoom")),image:e.api.admin_static_url+"/images/settings-zoom.svg",title:e.translations.settings.zoom.title,upgrade:e.zoomModule.upgrade,"upgrade-level":"plus",modelValue:s.zoom_enabled,"onUpdate:modelValue":t[15]||(t[15]=e=>s.zoom_enabled=e)},{default:(0,o.w5)((()=>[e.zoomModule.enabled&&!e.settings.zoom.auth_code?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.zoom.noAuthCode),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:10,onEdit:t[16]||(t[16]=e=>s.editSettings("webex")),image:e.api.admin_static_url+"/images/settings-webex.svg",title:e.translations.settings.webex.title,upgrade:e.webexModule.upgrade,"upgrade-level":"plus",modelValue:s.webex_enabled,"onUpdate:modelValue":t[17]||(t[17]=e=>s.webex_enabled=e)},{default:(0,o.w5)((()=>[e.webexModule.enabled&&!e.settings.webex.access_token?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointmentTypes.webex.noAuthCode),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:11,onEdit:t[18]||(t[18]=e=>s.editSettings("webhooks")),image:e.api.admin_static_url+"/images/settings-webhooks.svg",title:e.translations.settings.webhooks.title,upgrade:e.webhooksModule.upgrade,"upgrade-level":"pro",modelValue:s.webhooks_enabled,"onUpdate:modelValue":t[19]||(t[19]=e=>s.webhooks_enabled=e)},null,8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:12,onEdit:t[20]||(t[20]=e=>s.editSettings("payments")),image:e.api.admin_static_url+"/images/settings-payments.svg",title:e.translations.settings.payments.title,upgrade:e.paymentsModule.upgrade,"upgrade-level":"pro",modelValue:s.payments_enabled,"onUpdate:modelValue":t[21]||(t[21]=e=>s.payments_enabled=e)},null,8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(u,{key:13,onEdit:t[22]||(t[22]=e=>s.editSettings("tracking")),image:e.api.admin_static_url+"/images/settings-tracking.svg",title:e.translations.settings.tracking.title,upgrade:e.trackingModule.upgrade,"upgrade-level":"pro",modelValue:s.tracking_enabled,"onUpdate:modelValue":t[23]||(t[23]=e=>s.tracking_enabled=e)},null,8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.j4)(u,{key:14,onEdit:t[24]||(t[24]=e=>s.editSettings("staff")),image:e.api.admin_static_url+"/images/settings-staff.svg",title:e.translations.settings.staff.title,upgrade:e.staffModule.upgrade,"upgrade-level":"business",modelValue:s.staff_enabled,"onUpdate:modelValue":t[25]||(t[25]=e=>s.staff_enabled=e)},null,8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_resources")?((0,o.wg)(),(0,o.j4)(u,{key:15,onEdit:t[26]||(t[26]=e=>s.editSettings("resources")),image:e.api.admin_static_url+"/images/settings-resources.svg",title:e.translations.settings.resources.title,upgrade:e.resourcesModule.upgrade,"upgrade-level":"business",modelValue:s.resources_enabled,"onUpdate:modelValue":t[27]||(t[27]=e=>s.resources_enabled=e)},null,8,["image","title","upgrade","modelValue"])):(0,o.kq)("",!0)])),_:1}),e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.iD)("div",PT,[(0,o.Wm)(m,{theme:"grey"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{theme:"grey",tag:"md-button",to:"/ssa/settings/import-export",class:"md-dense md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.title),1)])),_:1}),(0,o.Wm)(d,{theme:"grey",tag:"md-button",to:"/ssa/settings/developer",class:"md-dense md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developerScreen),1)])),_:1})])),_:1})])):(0,o.kq)("",!0)],64)):((0,o.wg)(),(0,o.j4)(n,{key:0}))])}const WT=e=>((0,o.dD)("data-v-5301ac76"),e=e(),(0,o.Cn)(),e),RT={class:"md-title"},LT={class:"license-key-form-layout"},jT={key:1,class:"license-key-valid"},qT={style:{display:"flex","align-items":"center"}},NT={class:"display-license-key"},$T={class:"inline-license-button"},HT=["innerHTML"],ZT=["innerHTML"],YT=WT((()=>(0,o._)("br",null,null,-1)));function KT(e,t,i,l,s,n){const d=(0,o.up)("foxy-progress-circular"),p=(0,o.up)("foxy-layout"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-list-item"),h=(0,o.up)("foxy-menu"),m=(0,o.up)("foxy-menu-anchor"),g=(0,o.up)("foxy-textfield");return e.settings.installed.license?((0,o.wg)(),(0,o.iD)("form",{key:0,novalidate:"",onSubmit:t[3]||(t[3]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"])),class:"license-key-form"},[(0,o._)("h2",RT,(0,r.zw)(e.translations.settings.license.key),1),(0,o._)("div",LT,[s.checking?((0,o.wg)(),(0,o.j4)(p,{key:0,"md-column":"",class:"license-validating"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{medium:"",indeterminate:""}),(0,o._)("div",null,(0,r.zw)(e.translations.settings.license.validating),1)])),_:1})):"valid"===e.settings.license.license_status?((0,o.wg)(),(0,o.iD)("div",jT,[(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",qT,[(0,o._)("span",null,(0,r.zw)(e.translations.settings.license.currentLicense)+": ",1),(0,o._)("span",null,[(0,o._)("strong",null,(0,r.zw)(this.api.edition_str)+" "+(0,r.zw)(e.translations.settings.license.edition),1)]),n.hasUpgradePaths?((0,o.wg)(),(0,o.j4)(m,{key:0,"md-direction":"bottom left","md-size":"3"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{class:"md-primary",disabled:!1,style:{"margin-left":"5px"},onClick:t[0]||(t[0]=e=>s.openUpgradeMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.license.upgrade),1)])),_:1}),(0,o.Wm)(h,{modelValue:s.openUpgradeMenu,"onUpdate:modelValue":t[1]||(t[1]=e=>s.openUpgradeMenu=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.upgradePaths,((e,t)=>((0,o.wg)(),(0,o.j4)(c,{key:t,onClick:i=>n.navigateTo(e,t)},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(t.charAt(0).toUpperCase()+t.slice(1))+" ",1),(0,o.Wm)(u,{icon:"launch",style:{margin:"0 5px"}})])),_:2},1032,["onClick"])))),128))])),_:1},8,["modelValue"])])),_:1})):(0,o.kq)("",!0)])])),_:1}),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",NT,(0,r.zw)(n.displayKey),1),(0,o._)("div",null,["valid"===e.settings.license.license_status?((0,o.wg)(),(0,o.j4)(f,{key:0,class:"md-primary",onClick:n.removeLicense},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.license.remove),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])])),_:1})])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:n.key,"onUpdate:modelValue":t[2]||(t[2]=e=>n.key=e),label:e.translations.settings.license.key,helptext:n.licenseError?this.settings.license.license_status_message:"","helptext-persistent":"","helptext-validation":"",id:"license",valid:!n.licenseError},null,8,["modelValue","label","helptext","valid"])])),_:1}),(0,o.Wm)(p,{class:"license-actions-layout"},{default:(0,o.w5)((()=>[(0,o._)("div",$T,[(0,o.Wm)(f,{mode:"raised",onClick:n.validateLicense},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.license.validate),1)])),_:1},8,["onClick"])])])),_:1})],64))]),n.displayHelpLinks?((0,o.wg)(),(0,o.j4)(p,{key:0,"md-column":"",class:"md-body-2"},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.settings.license.needHelp),1),(0,o._)("ul",null,[(0,o._)("li",null,[(0,o._)("span",{innerHTML:n.collectLicense},null,8,HT)]),(0,o._)("li",null,[(0,o._)("span",{innerHTML:n.contactSupport},null,8,ZT)])]),YT])),_:1})):(0,o.kq)("",!0)],32)):(0,o.kq)("",!0)}var JT=i(71067).sprintf,XT={name:"LicenseKey",data(){return{checking:!1,openUpgradeMenu:!1}},beforeMount(){this.checking=!0,this.fetchLicenseSettings().then((()=>{this.checking=!1,this.checkLicenseValidity()}))},computed:{collectLicense(){return JT(this.translations.settings.license.collectLicense,'',"")},contactSupport(){return JT(this.translations.settings.license.contactSupport,'',"")},licenseError(){return"invalid"===this.settings.license.license_status},displayKey(){return this.settings.license.license_filtered.replace(/.(?=.{4,}$)/g,"• ")},key:{get(){return this.settings.license.license_filtered},set(e){this.updateLicenseKey({settings:this.settings,value:e})}},displayHelpLinks(){return!this.checking&&("invalid"===this.settings.license.license_status||"empty"===this.settings.license.license_status)&&this.settings.installed.license},hasUpgradePaths(){return!wa().isEmpty(this.settings?.license?.license_upgrade_links)},upgradePaths(){return this.hasUpgradePaths?this.settings.license.license_upgrade_links:[]},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","api"]),...(0,m.Se)(["upgradeUrlParsed"])},methods:{validateLicense(){this.checking=!0,this.updateLicenseSettings().then((()=>{this.checking=!1,this.checkLicenseValidity()}))},removeLicense(){this.checking=!0,this.updateLicenseKey({settings:this.settings,value:""}),this.updateLicenseSettings().then((()=>{this.checking=!1}))},checkLicenseValidity(){"valid"===this.settings.license.license_status&&this.$emit("validatedLicense")},navigateTo(e,t){let i={utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade",utm_content:"upgrade-license-dropdown"};i.utm_campaign=i.utm_campaign+"-"+t;let a=this.upgradeUrlParsed(e,i);window.open(a,"_blank")},...(0,m.nv)("license",["fetchLicenseSettings","updateLicenseSettings"]),...(0,m.OI)("license",["updateLicenseKey"])}};const QT=(0,he.Z)(XT,[["render",KT],["__scopeId","data-v-5301ac76"]]);var eO=QT;const tO=["src"],iO={key:0,class:"media-caption plus"},aO={key:1,class:"media-caption pro"},oO={key:2,class:"media-caption business"},rO=(0,o._)("div",{class:"mdc-card__ripple"},null,-1),lO={class:"md-title"},sO={key:1,style:{flex:"1"}},nO={class:"screen-reader-text"},dO={key:2,class:"coming-soon-wrap"},pO={class:"coming-soon"},fO={key:3,class:"beta-wrap"},uO={class:"beta"};function cO(e,t,i,l,s,n){const d=(0,o.up)("foxy-card-media"),p=(0,o.up)("foxy-card-header"),f=(0,o.up)("foxy-card-content"),u=(0,o.up)("foxy-switch"),c=(0,o.up)("foxy-button"),h=(0,o.up)("foxy-card-actions"),m=(0,o.up)("foxy-card"),g=(0,o.up)("promo-pro"),_=(0,o.up)("foxy-dialog"),y=(0,o.up)("promo-plus"),w=(0,o.up)("promo-business"),x=(0,o.up)("foxy-dialog-title"),C=(0,o.up)("foxy-dialog-content"),v=(0,o.up)("foxy-dialog-button"),b=(0,o.up)("foxy-dialog-footer"),B=(0,o.up)("foxy-layout");return(0,o.wg)(),(0,o.j4)(B,{class:"settings-list-item"},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{"md-with-hover":i.modelValue,class:(0,r.C_)(["full-width settings overflow-visible",{disabled:!i.modelValue}]),onClick:n.maybeEdit},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:(0,r.C_)(["mdc-card__primary-action",{cardStyle:i.cardStyle}])},{default:(0,o.w5)((()=>[(0,o._)("img",{src:i.image,alt:""},null,8,tO),i.upgrade?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},["plus"===i.upgradeLevel?((0,o.wg)(),(0,o.iD)("div",iO,(0,r.zw)(e.translations.promo.availablePlus),1)):(0,o.kq)("",!0),"pro"===i.upgradeLevel?((0,o.wg)(),(0,o.iD)("div",aO,(0,r.zw)(e.translations.promo.availablePro),1)):(0,o.kq)("",!0),"business"===i.upgradeLevel?((0,o.wg)(),(0,o.iD)("div",oO,(0,r.zw)(e.translations.promo.availableBusiness),1)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0),rO])),_:1},8,["class"]),(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("h3",lO,(0,r.zw)(i.title),1)])),_:1}),e.$slots.default?((0,o.wg)(),(0,o.j4)(f,{key:0},{default:(0,o.w5)((()=>[(0,o.WI)(e.$slots,"default")])),_:3})):(0,o.kq)("",!0),i.upgrade?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(h,{key:1,class:"split-actions"},{default:(0,o.w5)((()=>[i.canDisable?((0,o.wg)(),(0,o.j4)(u,{key:0,id:n.slugifyTitle,modelValue:n.switchValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.switchValue=e),onClick:(0,a.iM)(n.doNothing,["stop"]),name:e.translations.settings.enable+i.title},null,8,["id","modelValue","onClick","name"])):((0,o.wg)(),(0,o.iD)("span",sO)),(0,o.Wm)(c,{disabled:!i.modelValue,theme:"black"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit)+" ",1),(0,o._)("span",nO,(0,r.zw)(i.title),1)])),_:1},8,["disabled"])])),_:1})),i.upgrade&&"coming-soon"==i.upgradeLevel?((0,o.wg)(),(0,o.iD)("div",dO,[(0,o._)("div",pO,(0,r.zw)(e.translations.settings.comingSoon),1)])):i.inBeta?((0,o.wg)(),(0,o.iD)("div",fO,[(0,o._)("div",uO,(0,r.zw)(e.translations.settings.beta),1)])):(0,o.kq)("",!0)])),_:3},8,["md-with-hover","class","onClick"]),(0,o.Wm)(_,{ref:"upgradePro"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{"upgrade-url-params":s.promoProUpgradeParams,dismissable:!1,"pro-text":e.translations.promo.proTextPopUp,onPromoClicked:n.closeDialogs},null,8,["upgrade-url-params","pro-text","onPromoClicked"])])),_:1},512),(0,o.Wm)(_,{ref:"upgradePlus"},{default:(0,o.w5)((()=>[(0,o.Wm)(y,{"upgrade-url-params":s.promoPlusUpgradeParams,dismissable:!1,onPromoClicked:n.closeDialogs},null,8,["upgrade-url-params","onPromoClicked"])])),_:1},512),(0,o.Wm)(_,{ref:"upgradeBusiness"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,{"upgrade-url-params":s.promoBusinessUpgradeParams,dismissable:!1,onPromoClicked:n.closeDialogs},null,8,["upgrade-url-params","onPromoClicked"])])),_:1},512),(0,o.Wm)(_,{ref:"enableSetting"},{default:(0,o.w5)((()=>[(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(i.title),1)])),_:1}),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.settings.disabledWarning),1)])),_:1}),(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(v,{action:"dismiss",theme:"black",onClick:n.closeDialogs},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(v,{action:"accept",class:"md-primary",onClick:n.enableThis},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.enable),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)])),_:3})}var hO={name:"SettingsCard",components:{PromoPlus:it,PromoPro:ft,PromoBusiness:dc},props:{canDisable:{type:Boolean,default:!0},cardStyle:{type:String,default:""},image:{type:String,default:""},inBeta:{type:Boolean,default:!1},title:{type:String,default:""},upgrade:Boolean,upgradeLevel:{type:String,default:""},modelValue:{type:Boolean,default:!0}},emits:["update:modelValue","edit"],data(){return{promoPlusUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-plus",utm_term:"plus-features",utm_content:"general-plus-settings-popup"},promoProUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"pro-features",utm_content:"general-pro-settings-popup"},promoBusinessUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-business",utm_term:"business-features",utm_content:"general-business-settings-popup"}}},computed:{switchValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},slugifyTitle(){return pa()(this.title,{lower:!0,strict:!0})},...(0,m.rn)("translations",["translations"])},methods:{closeDialogs(){this.$refs["enableSetting"].close(),this.$refs["upgradePlus"].close(),this.$refs["upgradePro"].close()},doNothing(){},edit(){this.$emit("edit")},enableThis(){this.switchValue=!0,this.edit()},maybeEdit(){this.modelValue?this.edit():this.upgrade&&"plus"===this.upgradeLevel?this.$refs["upgradePlus"].open():this.upgrade&&"pro"===this.upgradeLevel?this.$refs["upgradePro"].open():this.upgrade&&"business"===this.upgradeLevel?this.$refs["upgradeBusiness"].open():this.upgrade&&"coming-soon"===this.upgradeLevel||this.$refs["enableSetting"].open()}}};const mO=(0,he.Z)(hO,[["render",cO]]);var gO=mO,_O={name:"SettingsList",components:{NoPermission:ia,licenseKey:eO,SettingsCard:gO},data(){return{license:!1,enableFeatureName:"",enableFeatureTitle:""}},watch:{guidesList(){this.getGuides({"ssasc-plugin-screen":this.guidesList})},$route:"maybeFetchSettings"},mounted(){this.getGuides({"ssasc-plugin-screen":this.guidesList}),this.maybeFetchSettings()},computed:{blackout_enabled:{get(){return this.settings.blackout_dates.enabled},set(e){this.updateBlackoutEnabled({settings:this.settings,value:e}),this.updateBlackoutSettings()}},google_calendar_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"google_calendar")&&(!!this.settings.google_calendar.enabled&&!!this.settings.installed.google_calendar)},set(e){this.updateGoogleCalendarEnabled({settings:this.settings,value:e}),this.updateGoogleCalendarSettings()}},customizeCalendarEvents:{get(){return this.settings.calendar_events.enabled},set(e){this.setCalendarEventsEnabled({settings:this.settings,value:e}),this.updateCalendarEventsSettings()}},mailchimp_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"mailchimp")&&(!!this.settings.mailchimp.enabled&&!!this.settings.installed.mailchimp)},set(e){this.updateMailchimpEnabled({settings:this.settings,value:e}),this.updateMailchimpSettings()}},webex_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"webex")&&(!!this.settings.installed.webex&&!!this.settings.webex.enabled)},set(e){this.updateWebexEnabled(e),this.updateWebexSettings()}},zoom_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"zoom")&&(!!this.settings.zoom.enabled&&!!this.settings.installed.zoom)},set(e){this.updateZoomEnabled({settings:this.settings,value:e}),this.updateZoomSettings()}},notifications_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"notifications")&&(!!this.settings.notifications.enabled&&!!this.settings.installed.notifications)},set(e){this.setNotificationsEnabled({settings:this.settings,value:e}),this.updateNotificationsSettings()}},webhooks_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"webhooks")&&(!!this.settings.webhooks.enabled&&!!this.settings.installed.webhooks)},set(e){this.updateWebhooksEnabled({value:e,settings:this.settings}),this.updateWebhooksSettings()}},payments_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"payments")&&(!!this.settings.payments.enabled&&!!this.settings.installed.payments)},set(e){this.updatePaymentsEnabled(e)}},staff_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"staff")&&(!!this.settings.staff.enabled&&!!this.settings.installed.staff)},set(e){this.updateStaffEnabled(e)}},resources_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"resources")&&(!!this.settings.resources.enabled&&!!this.settings.installed.resources)},set(e){this.updateResourcesEnabled(e)}},tracking_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"tracking")&&(!!this.settings.tracking.enabled&&!!this.settings.installed.tracking)},set(e){this.updateTrackingEnabled(e)}},notificationImage(){return this.smsModule.installed?this.api.admin_static_url+"/images/settings-notifications-sms.svg":this.api.admin_static_url+"/images/settings-notifications.svg"},guidesList(){let e=[K.settings.list];return this.license&&e.push(K.settings.license_enabled),e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings","refreshMomentSettings"]),...(0,m.Se)("advanced_scheduling",["advancedSchedulingModule"]),...(0,m.Se)("zoom",["zoomModule"]),...(0,m.Se)("mailchimp",["mailchimpModule"]),...(0,m.Se)("google_calendar",["googleCalendarModule"]),...(0,m.Se)("notifications",["smsModule"]),...(0,m.Se)("payments",["paymentsModule"]),...(0,m.Se)("staff",["currentUserCan","staffModule"]),...(0,m.Se)("tracking",["trackingModule"]),...(0,m.Se)("webex",["webexModule"]),...(0,m.Se)("webhooks",["webhooksModule"]),...(0,m.Se)("resources",["resourcesModule"])},methods:{toggleLicense(){this.license=!this.license},editSettings(e){this.$router.push(`/ssa/settings/${e}`)},maybeFetchSettings(){if(wa().isEmpty(this.refreshMomentSettings))return void this.resetRefreshMomentSettings();let e=fe()().subtract(2,"minutes");e>this.refreshMomentSettings&&(this.fetchSettings(),this.resetRefreshMomentSettings())},...(0,m.nv)("notifications",["updateNotificationsSettings"]),...(0,m.nv)("advanced_scheduling",["updateAdvancedSchedulingSettings"]),...(0,m.nv)("developer_settings",["updateDeveloperSettings"]),...(0,m.nv)("zoom",["updateZoomSettings"]),...(0,m.nv)("mailchimp",["updateMailchimpSettings"]),...(0,m.nv)("google_calendar",["updateGoogleCalendarSettings","updateCalendarEventsSettings"]),...(0,m.nv)("webhooks",["updateWebhooksSettings"]),...(0,m.nv)("payments",["updatePaymentsEnabled"]),...(0,m.nv)("staff",["updateStaffEnabled"]),...(0,m.nv)("resources",["updateResourcesEnabled"]),...(0,m.nv)("tracking",["updateTrackingEnabled"]),...(0,m.OI)("notifications",["setNotificationsEnabled"]),...(0,m.OI)("advanced_scheduling",["updateAdvancedSchedulingEnabled"]),...(0,m.OI)("zoom",["updateZoomEnabled"]),...(0,m.OI)("mailchimp",["updateMailchimpEnabled"]),...(0,m.OI)("google_calendar",["updateGoogleCalendarEnabled","setCalendarEventsEnabled"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.OI)("webex",["updateWebexEnabled"]),...(0,m.nv)("webex",["updateWebexSettings"]),...(0,m.OI)("webhooks",["updateWebhooksEnabled"]),...(0,m.nv)("blackout",["updateBlackoutSettings"]),...(0,m.OI)("blackout",["updateBlackoutEnabled"]),...(0,m.nv)(["fetchSettings"]),...(0,m.OI)(["resetRefreshMomentSettings"])}};const yO=(0,he.Z)(_O,[["render",VT]]);var wO=yO;function xO(e,t,i,a,r,l){const s=(0,o.up)("license-key");return(0,o.wg)(),(0,o.j4)(s)}var CO={name:"SettingsLicense",store:$J,components:{licenseKey:eO},data(){return{}}};const vO=(0,he.Z)(CO,[["render",xO]]);var bO=vO;const BO={class:"global-settings"},SO={href:"https://simplyscheduleappointments.com/document/timezones-and-offsets/",target:"_blank"},kO={class:"md-input-container foxy-input-container"},AO=["value"],MO={value:"0"},DO=["value"],TO={class:"button-bar align-right"};function OO(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-select2"),u=(0,o.up)("foxy-list-item"),c=(0,o.up)("foxy-select"),h=(0,o.up)("foxy-textfield"),m=(0,o.up)("foxy-phone-field"),g=(0,o.up)("foxy-button"),_=(0,o.up)("foxy-progress-circular"),y=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",BO,[(0,o._)("form",{novalidate:"",onSubmit:t[11]||(t[11]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[(0,o.Wm)(d,{"wizard-mode":i.wizardMode},null,8,["wizard-mode"]),s.timezoneWarning?((0,o.wg)(),(0,o.j4)(p,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.general.genericTimezoneWarning)+" ",1),(0,o._)("a",SO,(0,r.zw)(e.translations.general.learnMore),1)])),_:1})):(0,o.kq)("",!0),(0,o._)("div",kO,[(0,o.Wm)(f,{style:{width:"100%"},name:"timezone",id:"timezone",modelValue:n.timezone_string,"onUpdate:modelValue":t[0]||(t[0]=e=>n.timezone_string=e),label:e.translations.settings.general.timezone,disabled:s.saving},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.allSupportedTimezones,(t=>((0,o.wg)(),(0,o.iD)("option",{value:t,key:t},(0,r.zw)(e.formatTimezone(t)),9,AO)))),128))])),_:1},8,["modelValue","label","disabled"])]),(0,o.Wm)(c,{"menu-fullwidth":!1,label:e.translations.settings.general.dateFormat,name:"dateFormat",id:"dateFormat",modelValue:n.date_format,"onUpdate:modelValue":t[1]||(t[1]=e=>n.date_format=e),disabled:s.saving,"md-menu-class":"md-align-trigger"},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.localizedDateFormats,((e,t)=>((0,o.wg)(),(0,o.j4)(u,{"data-value":e.php,key:e.php,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.moment().format(e.js))+" ",1),t>0?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)(" — "),(0,o._)("code",null,(0,r.zw)(e.php),1)],64)):(0,o.kq)("",!0)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"]),(0,o.Wm)(c,{"menu-fullwidth":!1,label:e.translations.settings.general.timeFormat,name:"timeFormat",id:"timeFormat",modelValue:n.time_format,"onUpdate:modelValue":t[2]||(t[2]=e=>n.time_format=e),disabled:s.saving},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.localizedTimeFormats,((e,t)=>((0,o.wg)(),(0,o.j4)(u,{"data-value":e.php,key:e.php,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.moment().format(e.js))+" ",1),t>0?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)(" — "),(0,o._)("code",null,(0,r.zw)(e.php),1)],64)):(0,o.kq)("",!0)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"]),(0,o.Wm)(c,{"menu-fullwidth":!1,label:e.translations.settings.general.weekStartsOn,name:"weekStartsOn",id:"weekStartsOn",modelValue:n.start_of_week,"onUpdate:modelValue":t[3]||(t[3]=e=>n.start_of_week=e),disabled:s.saving},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.moment.weekdays(!1),((e,t)=>((0,o.wg)(),(0,o.j4)(u,{"data-value":t.toString(),key:e,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"]),(0,o.Wm)(c,{"menu-fullwidth":!1,label:e.translations.settings.general.countryCode.label,name:"defaultCountryCode",id:"defaultCountryCode",modelValue:n.country_code,"onUpdate:modelValue":t[4]||(t[4]=e=>n.country_code=e),disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{"data-value":"",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.general.countryCode.defaultValue),1)])),_:1}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.countries,(e=>((0,o.wg)(),(0,o.j4)(u,{"data-value":e.iso2,key:e.iso2,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.name),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","disabled"]),(0,o.Wm)(h,{required:"",modelValue:n.staff_name,"onUpdate:modelValue":t[5]||(t[5]=e=>n.staff_name=e),disabled:s.saving,label:e.translations.settings.general.contact,helptext:n.staff_name.length?e.translations.settings.general.contact_helper:e.translations.settings.general.contact_error,"helptext-persistent":"","helptext-validation":"",valid:n.staff_name.length>0},null,8,["modelValue","disabled","label","helptext","valid"]),(0,o.Wm)(h,{required:"",modelValue:n.company_name,"onUpdate:modelValue":t[6]||(t[6]=e=>n.company_name=e),disabled:s.saving,label:e.translations.settings.general.business,helptext:n.company_name.length?"":e.translations.settings.general.business_error,"helptext-persistent":"","helptext-validation":"",valid:n.company_name.length>0},null,8,["modelValue","disabled","label","helptext","valid"]),(0,o.Wm)(h,{required:"",modelValue:n.admin_email,"onUpdate:modelValue":t[7]||(t[7]=e=>n.admin_email=e),disabled:s.saving,label:e.translations.settings.general.email,helptext:n.admin_email.length?e.translations.settings.general.email_helper:e.translations.settings.general.email_error,"helptext-persistent":"","helptext-validation":"",valid:n.admin_email.length>0},null,8,["modelValue","disabled","label","helptext","valid"]),e.smsModule.active?((0,o.wg)(),(0,o.j4)(m,{key:1,modelValue:n.admin_phone,"onUpdate:modelValue":t[8]||(t[8]=e=>n.admin_phone=e),label:e.translations.settings.general.phone,"input-options":{id:"admin_phone"},onValidate:t[9]||(t[9]=e=>n.checkPhone(e)),required:e.smsModule.active,"helptext-validation":!s.validAdminPhone,helptext:s.validAdminPhone?e.translations.settings.general.phone_help:e.translations.settings.general.phone_error,"helptext-persistent":!s.validAdminPhone},null,8,["modelValue","label","required","helptext-validation","helptext","helptext-persistent"])):(0,o.kq)("",!0),s.loading||i.wizardMode?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(f,{key:2,label:e.translations.settings.general.editAppointmentPage,name:"editAppointmentPage",id:"editAppointmentPage",modelValue:n.edit_appointment_page_id,"onUpdate:modelValue":t[10]||(t[10]=e=>n.edit_appointment_page_id=e),disabled:s.saving},{default:(0,o.w5)((()=>[(0,o._)("option",MO,(0,r.zw)(e.translations.settings.general.fullScreenPage),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.wpPages,(e=>((0,o.wg)(),(0,o.iD)("option",{value:e.id,key:e.id},(0,r.zw)(e.title.rendered)+" ("+(0,r.zw)(e.id)+") ",9,DO)))),128))])),_:1},8,["label","modelValue","disabled"])),(0,o._)("div",TO,[(0,o.Wm)(g,{"data-test":"test-save-changes",mode:"raised",class:"md-primary",onClick:n.saveSettings,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(n._button),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(_,{key:0,indeterminate:""})):(0,o.kq)("",!0)])],32),(0,o.Wm)(y,{ref:"confirmLeaveDirty",title:e.translations.settings.general.confirmTitle,"content-html":e.translations.settings.general.confirmContent,"ok-text":e.translations.general.ok,"cancel-text":e.translations.general.cancel,onConfirm:n.onConfirm},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}const GO={class:"settings-header"},EO={key:0,class:"md-title"};function UO(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",GO,[(0,o.Wm)(n,{"data-test":"test-return-to-settings",tag:"md-button",onClick:s.handleLinkClick,style:{"padding-left":"0"},icon:"keyboard_arrow_left",theme:"black"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.returnToSettings),1)])),_:1},8,["onClick"]),s.headline?((0,o.wg)(),(0,o.iD)("h2",EO,[(0,o.Uk)((0,r.zw)(s.headline)+" ",1),i.loading?((0,o.wg)(),(0,o.j4)(d,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])):(0,o.kq)("",!0)])}var FO={name:"SettingsHeader",store:$J,props:{loading:{type:Boolean,default:!1},wizardMode:{default:!1,type:Boolean}},data(){return{viewName:this.$route.name}},computed:{headline(){let e;switch(this.viewName){case"settings-general":e=this.translations.settings.general.title;break;case"settings-import-export":e=this.translations.settings.import_export.title;break;case"settings-styles":e=this.translations.settings.styles.title;break;case"settings-translations":e=this.translations.settings.translations.title;break;case"settings-google-calendar":e=this.translations.settings.google_calendar.title;break;case"settings-mailchimp":e=this.translations.settings.mailchimp.title;break;case"settings-advanced-scheduling":e=this.translations.settings.advanced_scheduling.title;break;case"payments-all":e=this.translations.settings.payments.title;break;case"settings-tracking":e=this.translations.settings.tracking.title;break;case"settings-zoom":e=this.translations.settings.zoom.title;break}return e},...(0,m.rn)("translations",["translations"])},methods:{cancelEdit(){this.$emit("cancelEdit")},handleLinkClick(){this.wizardMode?this.$router.back():this.$router.push("/ssa/settings/all")}}};const IO=(0,he.Z)(FO,[["render",UO]]);var zO=IO,PO={name:"SettingsGlobal",components:{SettingsHeader:zO},props:{button:{default:"Save",type:String},wizardMode:{default:!1,type:Boolean}},data(){return{moment:fe(),countries:Z,dirty:!1,options:X,saving:!1,timezoneWarning:!1,validAdminPhone:!0,loading:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";return this.$refs[e].open(),void(this.routerNext=i)}i()},watch:{admin_email:function(e,t){e!==t&&(this.dirty=!0)},admin_phone:function(e,t){e!==t&&(this.dirty=!0)},company_name:function(e,t){e!==t&&(this.dirty=!0)},date_format:function(e,t){e!==t&&(this.dirty=!0)},staff_name:function(e,t){e!==t&&(this.dirty=!0)},start_of_week:function(e,t){e!==t&&(this.dirty=!0)},time_format:function(e,t){e!==t&&(this.dirty=!0)},timezone_string:function(e,t){e!==t&&(this.dirty=!0),this.timezoneWarning=e.includes("UTC")||e.includes("GMT")},edit_appointment_page_id:function(e,t){e!==t&&(this.dirty=!0)}},mounted(){this.wpPages||(this.loading=!0,this.fetchWPPages().then((()=>{this.loading=!1})).catch((e=>{console.log(e)}))),(this.timezone_string.includes("UTC")||this.timezone_string.includes("GMT"))&&(this.timezoneWarning=!0),this.getGuides({"ssasc-plugin-screen":K.general})},computed:{_button(){return"Save"===this.button?this.translations.general.save:this.button},admin_email:{get(){return this.settings.global.admin_email},set(e){this.updateAdminEmail({settings:this.settings,value:e})}},admin_phone:{get(){return this.settings.global.admin_phone?this.settings.global.admin_phone:""},set(e){this.setAdminPhone({settings:this.settings,value:e})}},company_name:{get(){return this.settings.global.company_name},set(e){this.updateCompanyName({settings:this.settings,value:e})}},country_code:{get(){return this.settings.global.country_code},set(e){this.setCountryCode({settings:this.settings,code:e})}},date_format:{get(){return this.settings.global.date_format},set(e){this.updateDateFormat({settings:this.settings,value:e})}},localizedDateFormats(){let e=wa().cloneDeep(this.options.dateFormats);return e[0].js=this.api.locale_fjy,e},localizedTimeFormats(){let e=wa().cloneDeep(this.options.timeFormats);return e[0].js=this.api.locale_gia,e},staff_name:{get(){return this.settings.global.staff_name},set(e){this.updateStaffName({settings:this.settings,value:e})}},start_of_week:{get(){return this.settings.global.start_of_week},set(e){this.updateStartOfWeek({settings:this.settings,value:e})}},time_format:{get(){return this.settings.global.time_format},set(e){this.updateTimeFormat({settings:this.settings,value:e})}},timezone_string:{get(){return this.settings.global.timezone_string},set(e){this.updateTimezoneString({settings:this.settings,value:e})}},edit_appointment_page_id:{get(){return this.settings.global.edit_appointment_page_id.toString()},set(e){this.updateAppointmentPage({settings:this.settings,value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","timestampFormat","settings"]),...(0,m.rn)("global_settings",["wpPages"]),...(0,m.Se)(["formatTimezone","allSupportedTimezones"]),...(0,m.Se)("notifications",["smsModule"])},methods:{checkPhone(e){!this.smsModule.active||e?this.validAdminPhone=!0:this.validAdminPhone=!1},saveSettings(){this.admin_email.length&&this.company_name.length&&this.staff_name.length&&(this.saving=!0,this.updateGlobalSettings().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")})))},onConfirm(){this.routerNext(),this.fetchSettings()},...(0,m.nv)(["fetchSettings"]),...(0,m.nv)("global_settings",["updateGlobalSettings","fetchWPPages"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.OI)("global_settings",["setAdminPhone","setCountryCode","updateStartOfWeek","updateTimezoneString","updateDateFormat","updateTimeFormat","updateAdminEmail","updateCompanyName","updateStaffName","updateAppointmentPage"])}};const VO=(0,he.Z)(PO,[["render",OO]]);var WO=VO;function RO(e,t,i,r,l,s){const n=(0,o.up)("foxy-snackbar"),d=(0,o.up)("settings-header"),p=(0,o.up)("settings-developer-settings"),f=(0,o.up)("foxy-tab-item"),u=(0,o.up)("settings-developer-jobs"),c=(0,o.up)("foxy-tabs"),h=(0,o.up)("purge-appointments");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{novalidate:"",onSubmit:t[1]||(t[1]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[(0,o.Wm)(n,{position:"top center",modelValue:l.isSaveSettingsVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>l.isSaveSettingsVisible=e),message:e.translations.settings.advanced_scheduling.saved},null,8,["modelValue","message"]),(0,o.Wm)(d),(0,o.Wm)(c,{"onUpdate:modelValue":s.setCurrentTab},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{label:e.translations.settings.developer.title},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{onSaved:s.onSettingsSaved},null,8,["onSaved"])])),_:1},8,["label"]),(0,o.Wm)(f,{label:e.translations.settings.jobs.title},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{onSaved:s.onSettingsSaved,onConfirmPurge:s.handleConfirmPurge},null,8,["onSaved","onConfirmPurge"])])),_:1},8,["label"])])),_:1},8,["onUpdate:modelValue"])],32),(0,o.Wm)(h,{modelValue:l.jobs,"onUpdate:modelValue":t[2]||(t[2]=e=>l.jobs=e)},null,8,["modelValue"])])}const LO={class:"md-title"},jO={class:"foxy-switch-with-helper"},qO={class:"foxy-helper-text"},NO={class:"foxy-switch-with-helper"},$O={class:"foxy-helper-text"},HO=(0,o._)("hr",null,null,-1),ZO={key:0,class:"md-title"},YO={key:1,class:"foxy-switch-with-helper"},KO={class:"foxy-helper-text"},JO={class:"foxy-switch-with-helper"},XO={class:"foxy-helper-text"},QO={key:2},eG={class:"md-title"},tG={class:"foxy-switch-with-helper"},iG={class:"foxy-helper-text"},aG={class:"button-bar align-right"};function oG(e,t,i,l,s,n){const d=(0,o.up)("foxy-switch"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-progress-circular"),c=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{novalidate:"",onSubmit:t[5]||(t[5]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[(0,o._)("h2",LO,(0,r.zw)(e.translations.settings.developer.title),1),(0,o._)("div",jO,[(0,o.Wm)(d,{modelValue:n.enqueue_everywhere,"onUpdate:modelValue":t[0]||(t[0]=e=>n.enqueue_everywhere=e),id:"enqueue_everywhere",name:"enqueue_everywhere"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.enqueue_everywhere.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",qO,(0,r.zw)(e.translations.settings.developer.enqueue_everywhere.help),1)]),(0,o._)("div",NO,[(0,o.Wm)(d,{modelValue:n.disable_availability_caching,"onUpdate:modelValue":t[1]||(t[1]=e=>n.disable_availability_caching=e),id:"disable_availability_caching",name:"disable_availability_caching"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.disable_availability_caching.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",$O,(0,r.zw)(e.translations.settings.developer.disable_availability_caching.help),1)]),HO,n.isBetaEmpty?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("h2",ZO,(0,r.zw)(e.translations.settings.developer.beta_updates.title),1)),n.showBetaUpdates?((0,o.wg)(),(0,o.iD)("div",YO,[(0,o.Wm)(d,{modelValue:n.beta_updates,"onUpdate:modelValue":t[2]||(t[2]=e=>n.beta_updates=e),id:"beta_updates",name:"beta_updates"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.beta_updates.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",KO,(0,r.zw)(e.translations.settings.developer.beta_updates.help),1)])):(0,o.kq)("",!0),(0,o._)("div",JO,[(0,o.Wm)(d,{modelValue:n.display_appointment_revisions,"onUpdate:modelValue":t[3]||(t[3]=e=>n.display_appointment_revisions=e),id:"display_appointment_revisions",name:"display_appointment_revisions"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.display_appointment_revisions.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",XO,(0,r.zw)(e.translations.settings.developer.display_appointment_revisions.help),1)]),n.isBetaEmpty?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("hr",QO)),(0,o._)("h2",eG,(0,r.zw)(e.translations.settings.developer.pluginSettings.title),1),(0,o._)("div",tG,[n.remove_data_on_uninstall?((0,o.wg)(),(0,o.j4)(p,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.pluginSettings.warning),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(d,{modelValue:n.remove_data_on_uninstall,"onUpdate:modelValue":t[4]||(t[4]=e=>n.remove_data_on_uninstall=e),id:"remove_data_on_uninstall",name:"remove_data_on_uninstall"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.pluginSettings.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",iG,(0,r.zw)(e.translations.settings.developer.pluginSettings.help),1)]),(0,o._)("div",aG,[(0,o.Wm)(f,{mode:"raised",class:"md-primary",onClick:n.saveSettings,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(n._button),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(u,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])],32),(0,o.Wm)(c,{ref:"confirmLeaveDirty",title:e.translations.settings.general.confirmTitle,"content-html":e.translations.settings.general.confirmContent,"ok-text":e.translations.general.ok,"cancel-text":e.translations.general.cancel,onConfirm:n.onConfirm},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}var rG={name:"SettingsDeveloperSettings",props:{button:{default:"Save",type:String}},emits:["saved"],data(){return{dirty:!1,saving:!1,betaFeatures:[],routerNext:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";return this.$refs[e].open(),void(this.routerNext=i)}i()},watch:{booking_api_embed:function(e,t){e!==t&&(this.dirty=!0)},capacity_availability:function(e,t){e!==t&&(this.dirty=!0)},disable_availability_caching:function(e,t){e!==t&&(this.dirty=!0)},enqueue_everywhere:function(e,t){e!==t&&(this.dirty=!0)},beta_updates:function(e,t){e!==t&&(this.dirty=!0)},display_appointment_revisions:function(e,t){e!==t&&(this.dirty=!0)}},computed:{showBetaUpdates(){return this.settings.installed.license},isBetaEmpty(){return this.checkBetaFeaturesArray(),0==this.betaFeatures.length},_button(){return"Save"===this.button?this.translations.general.save:this.button},booking_api_embed:{get(){return this.settings.developer.booking_api_embed},set(e){this.setBookingApiEmbed({settings:this.settings,value:e})}},capacity_availability:{get(){return this.settings.developer.capacity_availability},set(e){this.setCapacityAvailability({settings:this.settings,value:e})}},disable_availability_caching:{get(){return this.settings.developer.disable_availability_caching},set(e){this.setDisableAvailabilityCaching({settings:this.settings,value:e})}},enqueue_everywhere:{get(){return this.settings.developer.enqueue_everywhere},set(e){this.setEnqueueEverywhere({settings:this.settings,value:e})}},beta_updates:{get(){return this.settings.developer.beta_updates},set(e){this.setBetaUpdates({settings:this.settings,value:e})}},display_appointment_revisions:{get(){return this.settings.developer.display_appointment_revisions},set(e){this.setDisplayAppointmentRevisions({settings:this.settings,value:e})}},remove_data_on_uninstall:{get(){return this.settings.developer.remove_data_on_uninstall},set(e){this.setRemoveDataOnUninstall({settings:this.settings,value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{saveSettings(){this.saving=!0,this.updateDeveloperSettings().then((()=>this.fetchSettings())).then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")}))},checkBetaFeaturesArray(){this.showBetaUpdates&&this.betaFeatures.push("BetaUpdates"),this.betaFeatures.push("NewBookingApp"),this.betaFeatures.push("revisionsHistory")},onConfirm(){this.routerNext(),this.fetchSettings()},...(0,m.nv)(["fetchSettings"]),...(0,m.nv)("developer_settings",["updateDeveloperSettings"]),...(0,m.OI)("developer_settings",["setDisableAvailabilityCaching","setEnqueueEverywhere","setBetaUpdates","setBookingApiEmbed","setCapacityAvailability","setRemoveDataOnUninstall","setDisplayAppointmentRevisions"])}};const lG=(0,he.Z)(rG,[["render",oG]]);var sG=lG;const nG={class:"ssa-settings-developer-job"},dG={class:"md-title"},pG={class:"ssa-developer-job"},fG={class:"config"},uG={class:"purge_options"};function cG(e,t,i,a,l,s){const n=(0,o.up)("foxy-switch"),d=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.iD)("div",nG,[(0,o._)("h2",dG,(0,r.zw)(e.translations.settings.jobs.title),1),(0,o._)("h3",null,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.title),1),(0,o._)("div",pG,[(0,o._)("div",fG,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.description),1),(0,o._)("div",uG,[(0,o.Wm)(n,{id:"purge_past_appointments",modelValue:l.jobs.purge_appointments.settings.purge_past_appointments,"onUpdate:modelValue":t[0]||(t[0]=e=>l.jobs.purge_appointments.settings.purge_past_appointments=e),name:"purge_past_appointments"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.settings.past_appointments),1)])),_:1},8,["modelValue"]),(0,o.Wm)(n,{id:"purge_abandoned_appointments",modelValue:l.jobs.purge_appointments.settings.purge_abandoned_appointments,"onUpdate:modelValue":t[1]||(t[1]=e=>l.jobs.purge_appointments.settings.purge_abandoned_appointments=e),name:"purge_abandoned_appointments"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.settings.abandoned_appointments),1)])),_:1},8,["modelValue"]),(0,o.Wm)(n,{id:"purge_past_canceled_appointments",modelValue:l.jobs.purge_appointments.settings.purge_past_canceled_appointments,"onUpdate:modelValue":t[2]||(t[2]=e=>l.jobs.purge_appointments.settings.purge_past_canceled_appointments=e),name:"purge_past_canceled_appointments"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.settings.past_canceled_appointments),1)])),_:1},8,["modelValue"]),(0,o.Wm)(n,{id:"purge_future_canceled_appointments",modelValue:l.jobs.purge_appointments.settings.purge_future_canceled_appointments,"onUpdate:modelValue":t[3]||(t[3]=e=>l.jobs.purge_appointments.settings.purge_future_canceled_appointments=e),name:"purge_future_canceled_appointments"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.settings.future_canceled_appointments),1)])),_:1},8,["modelValue"])])]),(0,o.Wm)(d,{mode:"raised",disabled:!l.jobs.purge_appointments.settings.purge_past_appointments&&!l.jobs.purge_appointments.settings.purge_abandoned_appointments&&!l.jobs.purge_appointments.settings.purge_past_canceled_appointments&&!l.jobs.purge_appointments.settings.purge_future_canceled_appointments,onClick:s.confirmPurge},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.action),1)])),_:1},8,["disabled","onClick"])])])}var hG={name:"SettingsDeveloperJobs",data(){return{jobs:{purge_appointments:{settings:{purge_past_appointments:!1,purge_abandoned_appointments:!1,purge_past_canceled_appointments:!1,purge_future_canceled_appointments:!1},modalOpen:!1}}}},computed:{...(0,m.rn)("translations",["translations"])},methods:{confirmPurge(){this.jobs.purge_appointments.modalOpen=!0,this.$emit("confirmPurge",{jobs:this.jobs})}}};const mG=(0,he.Z)(hG,[["render",cG]]);var gG=mG;const _G={key:0},yG={key:1,class:"dialog-icon"},wG={key:0,class:"icon"},xG={key:2,class:"dialog-content"},CG={class:"md-headline"},vG={key:3,class:"dialog-content"},bG=["href"],BG={key:4,class:"dialog-content"};function SG(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-title"),d=(0,o.up)("foxy-progress-circular"),p=(0,o.up)("foxy-icon"),f=(0,o.up)("foxy-notification"),u=(0,o.up)("foxy-dialog-content"),c=(0,o.up)("foxy-dialog-button"),h=(0,o.up)("foxy-dialog-footer"),m=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.j4)(m,{ref:"purgeAppointmentsDialog",class:"ssa-developer-job-modal","onMdcdialog:closed":s.close},{default:(0,o.w5)((()=>[l.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(n,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.title),1)])),_:1})),(0,o.Wm)(u,{class:(0,r.C_)(["purge-appointments",l.status])},{default:(0,o.w5)((()=>[l.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",_G,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.text),1)),l.status?((0,o.wg)(),(0,o.iD)("div",yG,["loading"===l.status?((0,o.wg)(),(0,o.iD)("div",wG,[(0,o.Wm)(d,{indeterminate:""})])):(0,o.kq)("",!0),"success"===l.status?((0,o.wg)(),(0,o.j4)(p,{key:1,class:"icon md-size-4x",icon:"check_circle"})):(0,o.kq)("",!0),"error"===l.status?((0,o.wg)(),(0,o.j4)(p,{key:2,class:"icon md-size-4x",icon:"error",theme:"deep-orange"})):(0,o.kq)("",!0)])):(0,o.kq)("",!0),"loading"===l.status?((0,o.wg)(),(0,o.iD)("div",xG,[(0,o._)("h3",CG,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.loading),1)])):(0,o.kq)("",!0),"success"===l.status?((0,o.wg)(),(0,o.iD)("div",vG,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.success),1),l.csv?((0,o.wg)(),(0,o.iD)("a",{key:0,href:l.csv,download:"",class:"link"},(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.download),9,bG)):(0,o.kq)("",!0)])):(0,o.kq)("",!0),"error"===l.status?((0,o.wg)(),(0,o.iD)("div",BG,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.error),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.errors,((e,t)=>((0,o.wg)(),(0,o.j4)(f,{key:t,theme:"red"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e),1)])),_:2},1024)))),128))])):(0,o.kq)("",!0)])),_:1},8,["class"]),"loading"!==l.status?((0,o.wg)(),(0,o.j4)(h,{key:1},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{action:"dismiss",class:"md-primary",onClick:s.close},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.close),1)])),_:1},8,["onClick"]),l.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:0,mode:"raised",onClick:s.deleteAppointments},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.jobs.jobs.purge_appointments.modal.confirm),1)])),_:1},8,["onClick"]))])),_:1})):(0,o.kq)("",!0)])),_:1},8,["onMdcdialog:closed"])}var kG={name:"JobsPurgeAppointments",props:{modelValue:{default:()=>{},type:Object}},watch:{open(){this.open?(this.status=null,this.csv=null,this.errors=null,this.$refs.purgeAppointmentsDialog.open()):this.$refs.purgeAppointmentsDialog.close()},modelValue(){this.modelValue?.jobs?.purge_appointments&&(this.modelValue.jobs.purge_appointments.modalOpen&&(this.open=!0),this.settings=this.modelValue.jobs.purge_appointments.settings)}},data(){return{csv:null,status:null,errors:null,open:!1,settings:{}}},computed:{...(0,m.rn)("translations",["translations"])},methods:{close(){this.open=!1},deleteAppointments(){this.status="loading",this.purgeAppointments(this.settings).then((e=>{this.status="success",this.csv=e.file_url})).catch((e=>{this.status="error",this.errors=Array.isArray(e)?e:[e]}))},...(0,m.nv)("appointments",["purgeAppointments"])}};const AG=(0,he.Z)(kG,[["render",SG]]);var MG=AG,DG={name:"SettingsDeveloper",components:{SettingsHeader:zO,settingsDeveloperSettings:sG,settingsDeveloperJobs:gG,purgeAppointments:MG},props:{button:{default:"Save",type:String}},data(){return{currentTab:0,jobs:{},isSaveSettingsVisible:!1}},watch:{currentGuidesId(){this.getGuides({"ssasc-plugin-screen":this.currentGuidesId})}},mounted(){this.getGuides({"ssasc-plugin-screen":this.currentGuidesId})},computed:{currentGuidesId(){return 0===this.currentTab?K.developer_settings:K.developer_jobs},...(0,m.rn)("translations",["translations"])},methods:{onSettingsSaved(){this.isSaveSettingsVisible=!0},setCurrentTab(e){this.currentTab=e},handleConfirmPurge(e){this.jobs=e},...(0,m.nv)("guides",["getGuides"])}};const TG=(0,he.Z)(DG,[["render",RO]]);var OG=TG;const GG={class:"ssa-import-export"},EG={class:"export-settings"},UG={class:"md-checkbox-with-note"},FG={class:"md-checkbox-note"},IG={class:"md-checkbox-with-note"},zG={class:"md-checkbox-note"},PG={class:"md-checkbox-with-note"},VG={class:"md-checkbox-note"},WG={key:0,class:"md-checkbox-with-note",style:{"margin-left":"30px"}},RG={class:"md-checkbox-note"},LG={key:1,class:"md-checkbox-with-note",style:{"margin-left":"30px"}},jG={class:"md-checkbox-note"},qG={class:"button-bar align-right"},NG=["value"],$G={class:"import-settings"},HG={class:"import-alert"},ZG={key:0},YG={class:"button-bar align-right"};function KG(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-checkbox"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-progress-circular"),c=(0,o.up)("foxy-snackbar"),h=(0,o.up)("foxy-tab-item"),m=(0,o.up)("foxy-tabs"),g=(0,o.up)("settings-import-export-modal");return(0,o.wg)(),(0,o.iD)("div",GG,[(0,o.Wm)(d),(0,o.Wm)(m,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{id:"export",label:e.translations.settings.import_export.tabs.export},{default:(0,o.w5)((()=>[(0,o._)("div",EG,[(0,o._)("div",UG,[(0,o.Wm)(p,{modelValue:s.exportFlagSettings,"onUpdate:modelValue":t[0]||(t[0]=e=>s.exportFlagSettings=e),label:e.translations.settings.import_export.options.settings.label},null,8,["modelValue","label"]),(0,o._)("p",FG,(0,r.zw)(e.translations.settings.import_export.options.settings.description),1)]),(0,o._)("div",IG,[(0,o.Wm)(p,{modelValue:s.exportFlagAppointmentTypes,"onUpdate:modelValue":t[1]||(t[1]=e=>s.exportFlagAppointmentTypes=e),label:e.translations.settings.import_export.options.appointment_types.label},null,8,["modelValue","label"]),(0,o._)("p",zG,(0,r.zw)(e.translations.settings.import_export.options.appointment_types.description),1)]),(0,o._)("div",PG,[(0,o.Wm)(p,{modelValue:s.exportFlagAppointments,"onUpdate:modelValue":t[2]||(t[2]=e=>s.exportFlagAppointments=e),label:e.translations.settings.import_export.options.appointments.label},null,8,["modelValue","label"]),(0,o._)("p",VG,(0,r.zw)(e.translations.settings.import_export.options.appointments.description),1),s.exportFlagAppointments?((0,o.wg)(),(0,o.iD)("div",WG,[(0,o.Wm)(p,{modelValue:s.anonymizeExport,"onUpdate:modelValue":t[3]||(t[3]=e=>s.anonymizeExport=e),label:e.translations.settings.import_export.options.anonymize.label},null,8,["modelValue","label"]),(0,o._)("p",RG,(0,r.zw)(e.translations.settings.import_export.options.anonymize.description),1)])):(0,o.kq)("",!0),s.exportFlagAppointments?((0,o.wg)(),(0,o.iD)("div",LG,[(0,o.Wm)(p,{modelValue:s.futureAppointmentsOnly,"onUpdate:modelValue":t[4]||(t[4]=e=>s.futureAppointmentsOnly=e),label:e.translations.settings.import_export.options.future_appointments_only.label},null,8,["modelValue","label"]),(0,o._)("p",jG,(0,r.zw)(e.translations.settings.import_export.options.future_appointments_only.description),1)])):(0,o.kq)("",!0)])]),(0,o._)("div",qG,[(0,o.Wm)(f,{mode:"raised",onClick:n.generateExportCode},{default:(0,o.w5)((()=>[s.generatingCode?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.generate_button_loading),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.generate_button),1)],64))])),_:1},8,["onClick"]),s.generatingCode?((0,o.wg)(),(0,o.j4)(u,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)]),(0,o.wy)((0,o._)("div",null,[(0,o._)("textarea",{class:"export-code",readonly:"",value:JSON.stringify(n.exportCode,null,2),ref:"exportCodeArea",onClick:t[5]||(t[5]=(...e)=>n.selectCode&&n.selectCode(...e)),onFocus:t[6]||(t[6]=(...e)=>n.selectCode&&n.selectCode(...e))},null,40,NG),(0,o._)("p",null,[(0,o.Wm)(f,{class:"copy-code-trigger",onClick:n.copyExportCode,"trailing-icon":"file_copy"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.copy),1)])),_:1},8,["onClick"]),(0,o.Wm)(f,{class:"send-code-trigger",onClick:n.sendExportCode,"trailing-icon":"send","progress-circular":s.sendingToSupport},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.send_to_support),1)])),_:1},8,["onClick","progress-circular"])])],512),[[a.F8,s.showCode]]),(0,o.Wm)(c,{position:"top center",modelValue:s.isExportCodeNoticeVisible,"onUpdate:modelValue":t[7]||(t[7]=e=>s.isExportCodeNoticeVisible=e),message:e.translations.settings.import_export.copied},null,8,["modelValue","message"]),(0,o.Wm)(c,{position:"top center",modelValue:s.isExportCodeSentToSupportVisible,"onUpdate:modelValue":t[8]||(t[8]=e=>s.isExportCodeSentToSupportVisible=e),message:e.translations.settings.import_export.send_to_support_success},null,8,["modelValue","message"])])),_:1},8,["label"]),(0,o.Wm)(h,{id:"import",label:e.translations.settings.import_export.tabs.import},{default:(0,o.w5)((()=>[(0,o._)("div",$G,[(0,o._)("h3",null,(0,r.zw)(e.translations.settings.import_export.import_headline),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.import_export.import_copy),1),(0,o.wy)((0,o._)("div",HG,[s.importCodeIsValid?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",ZG,(0,r.zw)(e.translations.settings.import_export.import_invalid_json_notice),1))],512),[[a.F8,!s.importCodeIsValid]]),(0,o.wy)((0,o._)("textarea",{class:"export-code","onUpdate:modelValue":t[9]||(t[9]=e=>s.importCode=e)},null,512),[[a.nr,s.importCode]]),(0,o._)("div",YG,[(0,o.Wm)(f,{mode:"raised",class:"md-primary",id:"import-btn",disabled:!s.importCodeIsValid||!s.importCode,onClick:n.processImportCode},{default:(0,o.w5)((()=>[s.importingCode?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.import_button_loading),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.import_button),1)],64))])),_:1},8,["disabled","onClick"]),s.importingCode?((0,o.wg)(),(0,o.j4)(u,{key:0,indeterminate:""})):(0,o.kq)("",!0)])])])),_:1},8,["label"])])),_:1}),(0,o.Wm)(g,{loading:s.importingCode,status:s.importStatus,response:s.importStatusResponse},null,8,["loading","status","response"])])}const JG={class:"import-dialog-icon"},XG={key:0,class:"icon"},QG={key:0,class:"import-dialog-content"},eE={class:"md-headline"},tE={key:1,class:"import-dialog-content"},iE=["innerHTML"],aE={key:2,class:"import-dialog-content"},oE={class:"md-headline"},rE={class:"import-dialog-errors"},lE=["innerHTML"];function sE(e,t,i,a,l,s){const n=(0,o.up)("foxy-progress-circular"),d=(0,o.up)("foxy-icon"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-dialog-content"),u=(0,o.up)("foxy-dialog-button"),c=(0,o.up)("foxy-dialog-footer"),h=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.j4)(h,{ref:"modal","foxy-click-outside-to-close":!1,"foxy-esc-to-close":!1,class:"ssa-import-export-modal"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{class:(0,r.C_)(i.status),style:{"text-align":"center"}},{default:(0,o.w5)((()=>[(0,o._)("div",JG,[i.loading?((0,o.wg)(),(0,o.iD)("div",XG,[(0,o.Wm)(n,{indeterminate:""})])):(0,o.kq)("",!0),i.loading||"error"===i.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:1,class:"icon md-size-3x",icon:"check_circle"})),i.loading||"error"!==i.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:2,class:"icon md-size-3x",icon:"error"}))]),i.loading?((0,o.wg)(),(0,o.iD)("div",QG,[(0,o._)("h3",eE,(0,r.zw)(e.translations.settings.import_export.import_button_loading),1)])):(0,o.kq)("",!0),i.loading||"error"===i.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",tE,[(0,o._)("h3",{class:"md-headline",innerHTML:i.response},null,8,iE),(0,o.Wm)(p,{onClick:s.refresh},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.import_export.import_success_redirect),1)])),_:1},8,["onClick"])])),i.loading||"error"!==i.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("div",aE,[(0,o._)("h3",oE,(0,r.zw)(e.translations.settings.import_export.import_error_status_notice),1),(0,o._)("div",rE,[(0,o._)("ul",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.response,((e,t)=>((0,o.wg)(),(0,o.iD)("li",{key:t,innerHTML:e},null,8,lE)))),128))])])]))])),_:1},8,["class"]),i.loading||"error"!==i.status?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(c,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{action:"dismiss",class:"md-primary",onClick:s.close},{default:(0,o.w5)((()=>[(0,o.Uk)(" Close ")])),_:1},8,["onClick"])])),_:1}))])),_:1},512)}var nE={name:"SettingsImportExportModal",props:["status","response","loading"],computed:{...(0,m.rn)("translations",["translations"])},methods:{refresh(){window.location.reload()},close(){this.$refs.modal.close()}},watch:{loading(){this.$refs.modal.open()}}};const dE=(0,he.Z)(nE,[["render",sE]]);var pE=dE,fE={name:"SettingsImportExport",components:{SettingsHeader:zO,settingsImportExportModal:pE},data(){return{anonymizeExport:!1,futureAppointmentsOnly:!1,generatingCode:!1,showCode:!1,importCode:null,importCodeIsValid:!0,importingCode:!1,importStatus:null,importStatusResponse:null,exportFlagSettings:!1,exportFlagAppointmentTypes:!1,exportFlagAppointments:!1,sendingToSupport:!1,exportMessagePayload:{},isExportCodeNoticeVisible:!1,isExportCodeSentToSupportVisible:!1}},mounted(){Object.prototype.hasOwnProperty.call(this.exportMessagePayload,"reply_to")&&this.exportMessagePayload.reply_to||(this.exportMessagePayload.reply_to=this.settings.global.admin_email,this.getGuides({"ssasc-plugin-screen":K.import_export}))},watch:{exportFlagSettings(){this.exportFlagSettings||(this.exportFlagAppointmentTypes=!1,this.exportFlagAppointments=!1)},exportFlagAppointmentTypes(){this.exportFlagAppointmentTypes?this.exportFlagSettings=!0:this.exportFlagAppointments=!1},exportFlagAppointments(){this.exportFlagAppointments&&(this.exportFlagSettings=!0,this.exportFlagAppointmentTypes=!0)},importCode(){this.validateImportCode()}},computed:{exportCode(){return JSON.stringify(this.exportCode)},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","api"]),...(0,m.rn)("import_export",["exportCode"])},methods:{generateExportCode(){const e={settings:this.exportFlagSettings,appointment_types:this.exportFlagAppointmentTypes,appointments:this.exportFlagAppointments,anonymize_customer_information:this.anonymizeExport,future_appointments_only:this.futureAppointmentsOnly};this.generatingCode=!0,this.fetchExportCode(e).then((()=>{this.generatingCode=!1,this.showCode=!0}))},sendExportCode(){Object.prototype.hasOwnProperty.call(this.settings,"license")&&(this.exportMessagePayload.license=this.settings.license.license_filtered),Object.prototype.hasOwnProperty.call(this.api,"site_url")&&(this.exportMessagePayload.site_url=this.api.site_url),this.exportMessagePayload.reply_to=this.settings.global.admin_email,this.exportMessagePayload.export_code=JSON.stringify(this.exportCode),this.exportMessagePayload.message=this.translations.settings.import_export.send_to_support_message,this.sendingToSupport=!0,this.sendSupportMessage(this.exportMessagePayload).then((()=>{this.sendingToSupport=!1,this.isExportCodeSentToSupportVisible=!0}))},selectCode(){this.$refs.exportCodeArea.select()},copyExportCode(){this.$refs.exportCodeArea.select(),document.execCommand("copy"),this.isExportCodeNoticeVisible=!0},validateImportCode(){if(!this.importCode||""===this.importCode)return this.importCodeIsValid=!0,void(this.importStatus=null);this.importCodeIsValid=this.isValidJSON(this.importCode),this.importCodeIsValid?this.importStatus=null:this.importStatus="error"},isValidJSON(e){try{const t=JSON.parse(e);return"object"===typeof t}catch(t){return!1}},async processImportCode(){this.importingCode=!0,this.importStatus=null,this.importStatusResponse=null;const e={settings:!0,appointment_types:!0,appointments:!0,anonymize_customer_information:!1};await this.fetchExportCode(e);try{const e=await this.importJSONCode(this.importCode);this.importingCode=!1,this.importStatus="success",this.importStatusResponse=e,setTimeout((()=>{window.location.reload()}),3e3)}catch(t){this.importingCode=!1,this.importStatus="error",this.importStatusResponse=t}},...(0,m.nv)("guides",["getGuides"]),...(0,m.nv)("import_export",["fetchExportCode","importJSONCode","sendSupportMessage"])}};const uE=(0,he.Z)(fE,[["render",KG]]);var cE=uE;const hE={class:"contrast-calc"},mE={key:2,class:"contrast-warn-text"},gE={label:"System Fonts"},_E=["value"],yE={label:"Google Fonts"},wE=["value"],xE={class:"md-helper-text"},CE={class:"link",style:{"text-decoration":"auto"},href:"https://fonts.google.com/",target:"_blank"},vE={key:0},bE={class:"flex-gap-7 button-bar align-right"};function BE(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("color-picker"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-select2"),c=(0,o.up)("foxy-input-container"),h=(0,o.up)("foxy-textfield"),m=(0,o.up)("foxy-switch"),g=(0,o.up)("foxy-button"),_=(0,o.up)("CodeEditor"),y=(0,o.up)("foxy-progress-circular"),w=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{novalidate:"",onSubmit:t[6]||(t[6]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[(0,o.Wm)(d),(0,o.Wm)(p,{label:e.translations.settings.styles.accentColor,modelValue:n.accent_color,"onUpdate:modelValue":t[0]||(t[0]=e=>n.accent_color=e),disabled:s.saving},null,8,["label","modelValue","disabled"]),(0,o.Wm)(p,{label:e.translations.settings.styles.backgroundColor,modelValue:n.background_color,"onUpdate:modelValue":t[1]||(t[1]=e=>n.background_color=e),disabled:s.saving},null,8,["label","modelValue","disabled"]),(0,o._)("p",hE,[(0,o._)("span",null,(0,r.zw)(e.translations.settings.styles.contractRatio)+": ",1),(0,o._)("span",{class:"contrast",style:(0,r.j5)({color:n.accent_color,background:n.background_color,padding:"3px"})}," Aa ",4),(0,o.Uk)(" "+(0,r.zw)(n.AccentBackContrast)+" ",1),n.lowContratRatio?((0,o.wg)(),(0,o.j4)(f,{key:0,theme:"deep-orange",icon:"error_outline"})):((0,o.wg)(),(0,o.j4)(f,{key:1,theme:"green",icon:"check_circle"})),n.AccentBackContrastWarn?((0,o.wg)(),(0,o.iD)("span",mE,(0,r.zw)(n.AccentBackContrastWarn),1)):(0,o.kq)("",!0)]),(0,o.Wm)(c,{class:"no-after"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{label:e.translations.settings.styles.font,style:{width:"100%"},name:"font",id:"font",modelValue:n.font,"onUpdate:modelValue":t[2]||(t[2]=e=>n.font=e),disabled:s.saving,required:""},{default:(0,o.w5)((()=>[(0,o._)("optgroup",gE,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.systemFonts,((e,t)=>((0,o.wg)(),(0,o.iD)("option",{value:e,key:t},(0,r.zw)(t),9,_E)))),128))]),(0,o._)("optgroup",yE,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.googleFontList,(e=>((0,o.wg)(),(0,o.iD)("option",{value:e,key:e},(0,r.zw)(e),9,wE)))),128))])])),_:1},8,["label","modelValue","disabled"]),(0,o._)("span",xE,[(0,o._)("a",CE,(0,r.zw)(e.translations.settings.styles.googleFonts),1)])])),_:1}),(0,o.Wm)(h,{modelValue:n.padding,"onUpdate:modelValue":t[3]||(t[3]=e=>n.padding=e),disabled:s.saving,required:"",label:e.translations.settings.styles.padding,helptext:n.padding.length<1?e.translations.settings.styles.requiredPadding:e.translations.settings.styles.cssUnits,"helptext-persistent":"","helptext-validation":"",valid:n.padding.length>=1},null,8,["modelValue","disabled","label","helptext","valid"]),n.low_opacity_bg?((0,o.wg)(),(0,o.iD)("div",vE,[(0,o.Wm)(m,{id:"contrast",modelValue:n.contrast,"onUpdate:modelValue":t[4]||(t[4]=e=>n.contrast=e),disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.styles.contrast)+" ("+(0,r.zw)(e.translations.settings.styles.contrastHelper)+") ",1)])),_:1},8,["modelValue","disabled"])])):(0,o.kq)("",!0),(0,o._)("div",null,[(0,o.Wm)(g,{"data-test":"test-toggle-custom-css",theme:"black",class:"md-primary md-dense",onClick:n.toggleCustomCSS},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.styles.customCSS),1)])),_:1},8,["onClick"]),s.viewCSS?((0,o.wg)(),(0,o.j4)(_,{key:0,"data-test":"test-ssa-styles-custom-css",style:{"margin-top":"8px"},modelValue:n.css,"onUpdate:modelValue":t[5]||(t[5]=e=>n.css=e),theme:"panda-syntax-light","font-size":"14px",width:"100%","line-nums":!0,languages:[["css","CSS"]]},null,8,["modelValue"])):(0,o.kq)("",!0)]),(0,o._)("div",bE,[(0,o.Wm)(g,{"data-test":"test-reset-to-default",mode:"secondary",onClick:n.confirmReset},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.styles.reset),1)])),_:1},8,["onClick"]),(0,o.Wm)(g,{"data-test":"test-save-styles",mode:"raised",class:"md-primary",onClick:n.saveStyles,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(y,{key:0,indeterminate:"",medium:""})):(0,o.kq)("",!0)])],32),(0,o.Wm)(w,{ref:"confirmLeaveDirty",title:e.translations.settings.general.confirmTitle,"content-html":e.translations.settings.general.confirmContent,"ok-text":e.translations.general.ok,"cancel-text":e.translations.general.cancel,onConfirm:n.onDirtyConfirm},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),(0,o.Wm)(w,{"data-test":"test-confirm-reset-settings-modal",ref:"confirmReset",title:e.translations.settings.styles.confirmTitle,"content-html":e.translations.settings.styles.confirmContent,"ok-text":e.translations.general.ok,"cancel-text":e.translations.general.cancel,onConfirm:n.onResetConfirm},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}function SE(e,t,i,l,s,n){const d=(0,o.up)("foxy-textfield"),p=(0,o.up)("chrome"),f=(0,o.up)("foxy-dialog-content"),u=(0,o.up)("foxy-dialog-button"),c=(0,o.up)("foxy-dialog-footer"),h=(0,o.up)("foxy-dialog");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("div",{class:"color-picker-container",onClick:t[1]||(t[1]=(...e)=>n.pickColor&&n.pickColor(...e))},[(0,o._)("span",{class:"color-sample","data-test":"test-color-sample",style:(0,r.j5)("background-color:"+n.rgba)},null,4),(0,o.Wm)(d,{label:i.label,readonly:"",modelValue:n.displayValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.displayValue=e),required:"",onKeydown:[(0,a.D2)((0,a.iM)(n.pickColor,["prevent"]),["enter"]),(0,a.D2)((0,a.iM)(n.pickColor,["prevent"]),["space"])],onClick:n.pickColor,disabled:i.disabled,style:{padding:"0",margin:"0"}},null,8,["label","modelValue","onKeydown","onClick","disabled"])]),(0,o.Wm)(h,{ref:"colorPicker",class:"color-picker"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{modelValue:s.colors,"onUpdate:modelValue":t[2]||(t[2]=e=>s.colors=e)},null,8,["modelValue"])])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(u,{action:"accept",onClick:n.closePicker},{default:(0,o.w5)((()=>[(0,o.Uk)(" OK ")])),_:1},8,["onClick"])])),_:1})])),_:1},512)])}var kE=i(65093),AE={name:"ColorPicker",props:{modelValue:{type:String,default:""},label:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],components:{Chrome:kE.Z},data(){return{colors:""}},beforeMount(){this.colors=this.modelValue},watch:{colors:function(){this.updateValue()},modelValue:function(e){e&&(this.colors=this.modelValue)}},computed:{rgba(){if("string"===typeof this.colors)return this.colors;{let e=[this.colors.rgba.r,this.colors.rgba.g,this.colors.rgba.b,this.colors.rgba.a],t="rgba(";return t+=e.join(","),t+=")",t}},displayValue:{get(){if("string"===typeof this.colors){let e=this.colors.substring(this.colors.indexOf("(")).split(","),t=parseInt(e[0].substring(1).trim(),10),i=parseInt(e[1].trim(),10),a=parseInt(e[2].trim(),10),o=parseFloat(e[3].substring(0,e[3].length-1).trim()).toFixed(2);return"#"+t.toString(16)+i.toString(16)+a.toString(16)+" ("+(100*o).toString(10)+"%)"}return this.colors.hex+" ("+parseInt(100*this.colors.rgba.a)+"%)"},set(){}}},methods:{pickColor(){this.disabled||this.$refs.colorPicker.open()},closePicker(){this.$refs.colorPicker.close()},updateValue(){this.$emit("update:modelValue",this.rgba)}}};const ME=(0,he.Z)(AE,[["render",SE]]);var DE=ME,TE=(i(37592),i(28162));function OE(e){return e/=255,e<.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}function GE(e){const t=OE(e[0]),i=OE(e[1]),a=OE(e[2]);return.2126*t+.7152*i+.0722*a}function EE(e,t){return e>t?(e+.05)/(t+.05):(t+.05)/(e+.05)}function UE(e,t){const i=e[3];return[(1-i)*t[0]+i*e[0],(1-i)*t[1]+i*e[1],(1-i)*t[2]+i*e[2],1]}function FE(e){if("string"===typeof e&&e.includes("rgba"))return e.split("(")[1].split(")")[0].split(",").map(Number)}const IE=(e,t)=>{if(e=FE(e),t=FE(t),!e||!t)return void console.error("checkContrast invalid params");const i=[255,255,255,1],a=UE(t,i),o=UE(e,a),r=GE(o),l=GE(a),s=EE(r,l);return parseFloat(s.toFixed(2))};var zE={name:"SettingsStyle",store:$J,components:{SettingsHeader:zO,ColorPicker:DE,CodeEditor:TE.Z},data(){return{saving:!1,dirty:!1,viewCSS:!1,systemFonts:z,routerNext:null}},beforeMount(){this.mergeDefaultStyles(this.settings)},mounted(){this.getGuides({"ssasc-plugin-screen":K.styles})},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{accent_color:function(e,t){e!==t&&(this.dirty=!0)},background_color:function(e,t){e!==t&&(this.dirty=!0)},contrast:function(e,t){e!==t&&(this.dirty=!0)},font:function(e,t){e!==t&&(this.dirty=!0)},padding:function(e,t){e!==t&&(this.dirty=!0)}},computed:{accent_color:{get(){return this.settings.styles.accent_color},set(e){this.updateAccentColor({value:e,settings:this.settings})}},background_color:{get(){return this.settings.styles.background},set(e){e.split("(")[1].split(")")[0].split(",")[3]>.2&&this.updateContrast({value:!1,settings:this.settings}),this.updateBackgroundColor({value:e,settings:this.settings})}},low_opacity_bg:{get(){return this.settings.styles.background.split("(")[1].split(")")[0].split(",")[3]<=.2}},contrast:{get(){return this.settings.styles.contrast},set(e){this.updateContrast({value:e,settings:this.settings})}},font:{get(){return this.settings.styles.font},set(e){this.updateFont({value:e,settings:this.settings})}},padding:{get(){return this.settings.styles.padding},set(e){this.updatePadding({value:e,settings:this.settings})}},css:{get(){return this.settings.styles.css?this.settings.styles.css:"/* "+this.translations.settings.styles.cssComment+" */"},set(e){this.setCss({value:e,settings:this.settings})}},AccentBackContrast(){return IE(this.accent_color,this.background_color)},AccentBackContrastWarn(){return this.lowContratRatio?this.translations.settings.styles.lowContractRatioWarn:this.translations.settings.styles.highContractRatioTxt},lowContratRatio(){return this.AccentBackContrast<3},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("styles",["googleFontList"])},methods:{confirmReset(){this.$refs["confirmReset"].open()},saveStyles(){this.padding&&(this.saving=!0,this.updateStyles().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")})))},toggleCustomCSS(){this.viewCSS=!this.viewCSS},onDirtyConfirm(){this.routerNext(),this.fetchSettings()},onResetConfirm(){this.resetStyles(this.settings)},...(0,m.nv)(["fetchSettings"]),...(0,m.OI)("styles",["mergeDefaultStyles","updateAccentColor","updateBackgroundColor","updateContrast","updateFont","updatePadding","setCss","resetStyles"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.nv)("styles",["updateStyles"])}};const PE=(0,he.Z)(zE,[["render",BE]]);var VE=PE;const WE=["value"],RE={style:{"padding-left":"1rem",display:"flex","align-items":"end"}},LE={class:"md-title"},jE={class:"foxy-table translations-table"},qE=["href"],NE={class:"screen-reader-text"},$E={class:"screen-reader-text"};function HE(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-select2"),f=(0,o.up)("foxy-layout"),u=(0,o.up)("foxy-button"),c=(0,o.up)("foxy-progress-circular"),h=(0,o.up)("foxy-icon"),m=(0,o.up)("foxy-icon-button");return(0,o.wg)(),(0,o.iD)("form",{novalidate:"",onSubmit:t[1]||(t[1]=(0,a.iM)(((...e)=>n.handleSubmit&&n.handleSubmit(...e)),["stop","prevent"]))},[(0,o.Wm)(d),(0,o._)("p",null,(0,r.zw)(e.translations.settings.translations.description),1),n.uninstalledLanguagePacks.length>0?((0,o.wg)(),(0,o.j4)(f,{key:0,"md-vertical-align":"center"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{style:{flex:"1"}},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{style:{"min-width":"100%"},label:e.translations.settings.translations.selectPack,name:"translationPack",disabled:s.saving,id:"translationPack",modelValue:s.pack,"onUpdate:modelValue":t[0]||(t[0]=e=>s.pack=e)},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.uninstalledLanguagePacks,(e=>((0,o.wg)(),(0,o.iD)("option",{value:e.locale,key:e.locale},(0,r.zw)(n.displayLanguage(e.locale)),9,WE)))),128))])),_:1},8,["label","disabled","modelValue"])])),_:1}),(0,o.Wm)(f,{style:{"padding-left":"1rem"}},{default:(0,o.w5)((()=>[(0,o._)("div",RE,[(0,o.Wm)(u,{type:"submit",disabled:s.saving,mode:"raised",class:"md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.translations.fetchInstall),1)])),_:1},8,["disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(c,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])])),_:1})])),_:1})):(0,o.kq)("",!0),n.showTable?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("h3",LE,(0,r.zw)(e.translations.settings.translations.installedTranslations),1),(0,o._)("div",jE,[(0,o._)("table",{class:(0,r.C_)({"saving-fade":s.saving})},[(0,o._)("thead",null,[(0,o._)("tr",null,[(0,o._)("th",null,(0,r.zw)(e.translations.settings.translations.languagePack),1),(0,o._)("th",null,(0,r.zw)(e.translations.settings.translations.lastUpdated),1)])]),(0,o._)("tbody",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.settings.translation.locales,((t,i)=>((0,o.wg)(),(0,o.iD)("tr",{key:i},[(0,o._)("td",null,[(0,o._)("div",null,(0,r.zw)(n.displayLanguage(i)),1),(0,o._)("div",null,[(0,o._)("a",{class:"link",href:n.improveLink(t,i),target:"_blank"},(0,r.zw)(e.translations.settings.translations.improveTranslation),9,qE)])]),(0,o._)("td",null,[(0,o.Uk)((0,r.zw)(s.moment.utc(t.last_fetched_date,e.timestampFormat).tz(e.settings.global.timezone_string).format(e.settings.global.date_format_moment+" "+e.settings.global.time_format_moment))+" ",1),(0,o._)("div",null,[(0,o.Wm)(m,{onClick:e=>n.deleteLanguage(i),disabled:s.saving,theme:"deep-orange"},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"delete"}),(0,o._)("span",NE,(0,r.zw)(e.translations.settings.translations.remove)+" "+(0,r.zw)(n.displayLanguage(i)),1)])),_:2},1032,["onClick","disabled"]),(0,o.Wm)(m,{onClick:e=>n.refreshLanguagePack(i),disabled:s.saving,class:"md-primary"},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"refresh"}),(0,o._)("span",$E,(0,r.zw)(e.translations.settings.translations.refresh)+" "+(0,r.zw)(n.displayLanguage(i)),1)])),_:2},1032,["onClick","disabled"])])])])))),128))])],2)])],64)):(0,o.kq)("",!0)],32)}var ZE={name:"SettingsTranslations",components:{SettingsHeader:zO},data(){return{moment:fe(),pack:null,saving:!1,translationPacks:R}},mounted(){this.getGuides({"ssasc-plugin-screen":K.translations})},computed:{showTable(){return!wa().isEmpty(this.settings.translation.locales)},uninstalledLanguagePacks(){return this.translationPacks.filter((e=>!Object.prototype.hasOwnProperty.call(this.settings.translation.locales,e.locale)))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["timestampFormat","settings"])},methods:{displayLanguage(e){let t=this.translationPacks.find((t=>t.locale===e));return t.title===t.title_localized?t.title:t.title+" / "+t.title_localized},handleSubmit(){this.pack&&(this.saving=!0,this.fetchLanguagePack(this.pack).then((()=>{this.refreshLanguageTable()})).catch((e=>{console.log(e),this.saving=!1})))},improveLink(e,t){if(e.translation_url)return e.translation_url;let i=t.split("_");i=i.map((e=>e.toLowerCase()));let a=i[0]===i[1]?i[0]:i.join("-");return"https://translate.wordpress.org/projects/wp-plugins/simply-schedule-appointments/dev/"+a+"/default/"},refreshLanguagePack(e){this.saving=!0,this.fetchLanguagePack(e).then((()=>{this.refreshLanguageTable()})).catch((e=>{console.log(e),this.saving=!1}))},refreshLanguageTable(){this.fetchTranslationSettings().then((()=>{this.saving=!1,this.pack=null,location.reload()})).catch((e=>{console.log(e)}))},deleteLanguage(e){this.deleteLanguagePack(e).then((()=>{this.refreshLanguageTable(),this.saving=!1})).catch((e=>{console.log(e)}))},...(0,m.nv)("translations",["fetchLanguagePack","fetchTranslationSettings","deleteLanguagePack"]),...(0,m.nv)("guides",["getGuides"])}};const YE=(0,he.Z)(ZE,[["render",HE]]);var KE=YE;const JE={class:"google-calendar-settings"};function XE(e,t,i,a,r,l){const s=(0,o.up)("settings-header"),n=(0,o.up)("google-calendar-auth"),d=(0,o.up)("google-calendar-list"),p=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",JE,[i.header?((0,o.wg)(),(0,o.j4)(s,{key:0})):(0,o.kq)("",!0),e.settings.google_calendar.enabled||i.showDisabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.account_authorized?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(n,{key:0})),l.account_authorized?((0,o.wg)(),(0,o.j4)(d,{key:1})):(0,o.kq)("",!0)],64)):((0,o.wg)(),(0,o.j4)(p,{key:2}))])}const QE=e=>((0,o.dD)("data-v-3d810d0c"),e=e(),(0,o.Cn)(),e),eU={key:0},tU={class:"button-bar justify-center"},iU=["src"],aU=QE((()=>(0,o._)("hr",null,null,-1))),oU={class:"button-bar align-right"};function rU(e,t,i,l,s,n){const d=(0,o.up)("loading"),p=(0,o.up)("router-link"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-textfield"),c=(0,o.up)("foxy-progress-circular");return s.saving?((0,o.wg)(),(0,o.j4)(d,{key:0,message:e.translations.general.saving},null,8,["message"])):n.preset_gcal_mode?((0,o.wg)(),(0,o.iD)("form",{key:1,onSubmit:t[1]||(t[1]=(0,a.iM)((()=>{}),["prevent"]))},[e.settings.google_calendar?.quick_connect_gcal_mode&&"valid"!=e.settings.license?.license_status?((0,o.wg)(),(0,o.iD)("p",eU,[(0,o._)("span",null,(0,r.zw)(e.translations.settings.google_calendar.quickConnectRequiresLicense),1),e.settings.license.license_show_settings?((0,o.wg)(),(0,o.j4)(p,{key:0,class:"link",to:"/ssa/settings/license"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.complete.settings),1)])),_:1})):(0,o.kq)("",!0)])):(0,o.kq)("",!0),(0,o._)("div",tU,[(0,o.Wm)(f,{tabindex:"0",mode:"raised",class:(0,r.C_)(["google-button",{disabled:s.saving||e.settings.google_calendar?.quick_connect_gcal_mode&&"valid"!=e.settings.license?.license_status}]),onClick:n.googleQuickConnectAuth,disabled:s.saving||e.settings.google_calendar?.quick_connect_gcal_mode&&"valid"!=e.settings.license?.license_status},{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.$store.state.api.admin_static_url+"/images/google-calendar-branding/btn_google_dark_normal_ios.svg",alt:""},null,8,iU),(0,o.Uk)(" "+(0,r.zw)(n.authorize_button_text),1)])),_:1},8,["onClick","disabled","class"])]),e.settings.google_calendar?.quick_connect_gcal_mode?((0,o.wg)(),(0,o.iD)("p",{key:1,class:"align-center link",onClick:t[0]||(t[0]=(...e)=>n.switchToManualGcalSetup&&n.switchToManualGcalSetup(...e))},(0,r.zw)(e.translations.settings.google_calendar.manualSetup),1)):(0,o.kq)("",!0)],32)):((0,o.wg)(),(0,o.iD)("form",{key:2,novalidate:"",onSubmit:t[5]||(t[5]=(0,a.iM)(((...e)=>n.saveSettings&&n.saveSettings(...e)),["stop","prevent"]))},[(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.enterApi)+" ",1),(0,o._)("span",{class:"link",onClick:t[2]||(t[2]=(...e)=>n.switchToQuickConnectGcalSetup&&n.switchToQuickConnectGcalSetup(...e))},(0,r.zw)(e.translations.settings.google_calendar.quickConnectSetup),1)]),(0,o.Wm)(f,{class:"button-link",href:"https://simplyscheduleappointments.com/document/getting-your-client-id-and-client-secret-from-google/",target:"_blank",mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.wizard.googleCalendar.showMeHow),1)])),_:1}),aU,(0,o.Wm)(u,{modelValue:s.v$.client_id.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>s.v$.client_id.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.google_calendar.clientId,helptext:s.v$.client_id.$invalid&&s.v$.client_id.$dirty?e.translations.wizard.googleCalendar.clientIdError:"","helptext-persistent":"","helptext-validation":"",required:"",id:"client_id",onChange:n.clientIdCheck,disabled:s.saving,valid:!s.v$.client_id.$invalid||!s.v$.client_id.$dirty},null,8,["modelValue","label","helptext","onChange","disabled","valid"]),(0,o.Wm)(u,{modelValue:s.v$.client_secret.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>s.v$.client_secret.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.google_calendar.clientSecret,helptext:s.v$.client_secret.$invalid&&s.v$.client_secret.$dirty?e.translations.wizard.googleCalendar.clientSecretError:"","helptext-persistent":"","helptext-validation":"",required:"",id:"client_secret",onChange:n.clientSecretCheck,disabled:s.saving,valid:!s.v$.client_secret.$invalid||!s.v$.client_secret.$dirty},null,8,["modelValue","label","helptext","onChange","disabled","valid"]),(0,o._)("div",oU,[(0,o.Wm)(f,{class:"md-primary",mode:"raised",onClick:n.saveSettings,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.saveAuthorize),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(c,{key:0,indeterminate:""})):(0,o.kq)("",!0)])],32))}var lU={name:"SettingsGoogleCalendarAuth",data(){return{v$:(0,Rd.Xw)(),needHelp:!1,saving:!1,filtered_gcal_values:!1}},validations:{client_id:{required:Ld.C1},client_secret:{required:Ld.C1}},mounted(){this.set_filtered_gcal_values()},computed:{client_id:{get(){return this.settings.google_calendar.client_id},set(e){this.updateGoogleCalendarClientId({settings:this.settings,value:e})}},client_secret:{get(){return this.settings.google_calendar.client_secret},set(e){this.updateGoogleCalendarClientSecret({settings:this.settings,value:e})}},authorize_button_text(){return this.preset_gcal_mode?this.translations.settings.google_calendar.googleAuthorize:this.translations.settings.google_calendar.saveAuthorize},preset_gcal_mode(){return this.settings.google_calendar?.quick_connect_gcal_mode||this.filtered_gcal_values},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings","router"]),...(0,m.rn)("google_calendar",["googleAuthUrl"])},methods:{switchToManualGcalSetup(){this.saving=!0,this.switchToManualSetup().then((()=>{this.saving=!1}))},switchToQuickConnectGcalSetup(){this.saving=!0,this.switchToQuickConnectSetup().then((()=>{this.saving=!1}))},clientIdCheck(){this.$emit("clientidcheck",this.client_id.length>0)},clientSecretCheck(){this.$emit("clientsecretcheck",this.client_secret.length>0)},googleQuickConnectAuth(){this.saving=!0;const e=window.ssa_is_embed?window.top.location.href:window.location.hostname+window.location.pathname;this.googleCalendarAuth({ssa_redirect:this.$route.path,ssa_base_url:e}).then((()=>{this.saving=!1,window.ssa_is_embed?window.top.location.href=this.googleAuthUrl:window.location.href=this.googleAuthUrl}))},saveSettings(){if(this.v$.$touch(),this.v$.$invalid)return;this.saving=!0;const e=window.ssa_is_embed?window.top.location.href:window.location.hostname+window.location.pathname;this.updateGoogleCalendarEnabled({settings:this.settings,value:!0}),this.updateGoogleCalendarSettings().then((()=>{this.googleCalendarAuth({ssa_redirect:this.$route.path,ssa_base_url:e}).then((()=>{this.saving=!1,window.ssa_is_embed?window.top.location.href=this.googleAuthUrl:window.location.href=this.googleAuthUrl}))}))},set_filtered_gcal_values(){this.settings.google_calendar?.client_id_filtered&&this.settings.google_calendar?.client_id_filtered!=this.settings.google_calendar.client_id&&this.settings.google_calendar?.client_secret_filtered&&this.settings.google_calendar?.client_secret_filtered!==this.settings.google_calendar.client_secret?this.filtered_gcal_values=!0:this.filtered_gcal_values=!1},...(0,m.OI)("google_calendar",["updateGoogleCalendarClientId","updateGoogleCalendarClientSecret","updateGoogleCalendarEnabled"]),...(0,m.nv)("google_calendar",["updateGoogleCalendarSettings","googleCalendarAuth","switchToManualSetup","switchToQuickConnectSetup"])}};const sU=(0,he.Z)(lU,[["render",rU],["__scopeId","data-v-3d810d0c"]]);var nU=sU;const dU={key:2,class:"md-whiteframe"},pU={class:"md-title",style:{flex:"1","line-height":"20px"}},fU={class:"sub"};function uU(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-empty"),f=(0,o.up)("foxy-toolbar"),u=(0,o.up)("google-calendar-sync"),c=(0,o.up)("foxy-layout"),h=(0,o.up)("google-calendar-settings");return(0,o.wg)(),(0,o.iD)("div",null,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,message:e.translations.settings.google_calendar.loadingCalendars},null,8,["message"])):l.error?((0,o.wg)(),(0,o.j4)(p,{key:1,label:l.errorMessage,description:e.translations.wizard.googleCalendar.failedToFetchDescription},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:"md-primary",mode:"raised",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.disconnect),1)])),_:1},8,["onClick"])])),_:1},8,["label","description"])):((0,o.wg)(),(0,o.iD)("div",dU,[(0,o.Wm)(f,{class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("h2",pU,[(0,o._)("span",fU,(0,r.zw)(e.translations.settings.google_calendar.account),1),(0,o.Uk)(" "+(0,r.zw)(e.googleCalendarAccountName),1)]),(0,o.Wm)(d,{mode:"unelevated",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.disconnect),1)])),_:1},8,["onClick"])])),_:1}),(0,o.Wm)(c,{"md-gutter":""},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{"md-flex":"50"},{default:(0,o.w5)((()=>[(0,o.Wm)(u)])),_:1}),(0,o.Wm)(c,{"md-flex":"50"},{default:(0,o.w5)((()=>[(0,o.Wm)(h)])),_:1})])),_:1})]))])}const cU={class:"ssa-google-calendar-sync-appointment-types"};function hU(e,t,i,a,l,s){const n=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.iD)("div",cU,[(0,o._)("h3",null,(0,r.zw)(e.translations.settings.google_calendar.calendarSync),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.google_calendar.authSuccess)+" "+(0,r.zw)(e.translations.settings.google_calendar.authNext),1),(0,o.Wm)(n,{tag:"md-button",mode:"raised",class:"md-raised md-primary",to:"/ssa/appointment-types"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.appointmentTypesEdit),1)])),_:1})])}var mU={name:"SettingsGoogleCalendarSync",computed:{...(0,m.rn)("translations",["translations"])}};const gU=(0,he.Z)(mU,[["render",hU]]);var _U=gU;const yU={class:"ssa-google-calendar-sync-settings"},wU={class:"foxy-switch-label"},xU={class:"foxy-switch-label"},CU={style:{"font-size":"1.17em","font-weight":"bold","margin-bottom":"1rem"}};function vU(e,t,i,a,l,s){const n=(0,o.up)("foxy-switch"),d=(0,o.up)("duration"),p=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",yU,[(0,o._)("div",null,[(0,o._)("h3",null,(0,r.zw)(e.translations.settings.google_calendar.webMeetingsHeadline),1),(0,o.Wm)(n,{id:"googleMeetLink",disabled:l.saving,modelValue:s.web_meetings,"onUpdate:modelValue":t[0]||(t[0]=e=>s.web_meetings=e)},{default:(0,o.w5)((()=>[(0,o._)("span",wU,(0,r.zw)(e.translations.settings.google_calendar.webMeetingsToggleLabel),1)])),_:1},8,["disabled","modelValue"])]),(0,o._)("div",null,[(0,o._)("h3",null,(0,r.zw)(e.translations.settings.google_calendar.deleteEventsHeadline),1),(0,o.Wm)(n,{id:"deleteEvent",disabled:l.saving,modelValue:s.delete_events,"onUpdate:modelValue":t[1]||(t[1]=e=>s.delete_events=e)},{default:(0,o.w5)((()=>[(0,o._)("span",xU,(0,r.zw)(e.translations.settings.google_calendar.deleteEventsToggleLabel),1)])),_:1},8,["disabled","modelValue"])]),(0,o._)("fieldset",null,[(0,o._)("legend",CU,(0,r.zw)(e.translations.settings.google_calendar.refreshIntervalHeadline),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.google_calendar.refreshIntervalDesc),1),(0,o.Wm)(d,{modelValue:s.refresh_interval,"onUpdate:modelValue":t[2]||(t[2]=e=>s.refresh_interval=e)},null,8,["modelValue"])]),l.saving?((0,o.wg)(),(0,o.j4)(p,{key:0,indeterminate:""})):(0,o.kq)("",!0)])}var bU={name:"SettingsGoogleCalendarSettings",components:{Duration:Wd},data(){return{saving:!1}},computed:{refresh_interval:{get(){return parseInt(this.settings.google_calendar.refresh_interval,10)},set(e){this.setGoogleCalendarRefreshInterval({settings:this.settings,value:e}),this.saveSettings()}},web_meetings:{get(){return this.settings.google_calendar.web_meetings},set(e){this.setGoogleCalendarWebMeetings({settings:this.settings,value:e}),this.saveSettings()}},delete_events:{get(){return this.settings.google_calendar.delete_canceled_events},set(e){this.setGoogleCalendarDeleteEvents({settings:this.settings,value:e}),this.saveSettings()}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{saveSettings(){this.saving=!0,this.updateGoogleCalendarSettings().then((()=>{this.saving=!1}))},...(0,m.OI)("google_calendar",["setGoogleCalendarWebMeetings","setGoogleCalendarDeleteEvents","setGoogleCalendarRefreshInterval"]),...(0,m.nv)("google_calendar",["updateGoogleCalendarSettings"])}};const BU=(0,he.Z)(bU,[["render",vU]]);var SU=BU,kU={name:"SettingsGoogleCalendarList",store:$J,components:{Loading:ge,GoogleCalendarSync:_U,GoogleCalendarSettings:SU},data(){return{loading:!0,error:!1,errorMessage:""}},mounted(){this.googleCalendars.length?this.loading=!1:this.fetchGoogleCalendars().then((()=>{this.loading=!1})).catch((e=>{console.log(e),this.loading=!1,this.error=!0,this.errorMessage=this.translations.wizard.googleCalendar.failedToFetch}))},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("google_calendar",["googleCalendars"]),...(0,m.Se)("google_calendar",["googleCalendarAccountName","googleCalendarAccountEmail"]),...(0,m.Se)("appointment_types",["editableAppointmentTypeIds"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{disconnectAccount(){this.googleCalendarDeauth()},editAppointmentType(){let e=this.editableAppointmentTypeIds[0];mY.push(`/ssa/appointment-types/type/${e}`)},openBulkEdit(){this.updateBulkEditing(this.editableAppointmentTypeIds),mY.push({name:"appointment-type-bulk-edit",params:{section:"googleCalendar"}})},...(0,m.nv)("google_calendar",["fetchGoogleCalendars","googleCalendarDeauth"]),...(0,m.OI)("appointment_types",["updateBulkEditing"])}};const AU=(0,he.Z)(kU,[["render",uU]]);var MU=AU;function DU(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.j4)(d,{label:e.translations.settings.featureNotEnabled,description:e.translations.settings.featureNotEnabledDescription},{default:(0,o.w5)((()=>[(0,o.Wm)(n,{tag:"md-button",to:"/ssa/settings/all",mode:"raised",class:"md-raised md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.returnToSettings),1)])),_:1})])),_:1},8,["label","description"])}var TU={name:"SettingNotEnabled",data(){return{}},computed:{...(0,m.rn)("translations",["translations"])}};const OU=(0,he.Z)(TU,[["render",DU]]);var GU=OU,EU={name:"SettingsGoogleCalendar",props:{header:{type:Boolean,default:!0},showDisabled:{type:Boolean,default:!1}},components:{SettingsHeader:zO,GoogleCalendarAuth:nU,GoogleCalendarList:MU,SettingNotEnabled:GU},data(){return{}},mounted(){const e=this.account_authorized?{"ssasc-plugin-screen":K.google_calendar.account_activated}:{"ssasc-plugin-screen":K.google_calendar.enabled};this.getGuides(e)},computed:{account_authorized(){return this.settings.google_calendar.access_token},...(0,m.rn)(["settings"])},methods:{cancelEdit(){this.$emit("cancel")},...(0,m.nv)("guides",["getGuides"])}};const UU=(0,he.Z)(EU,[["render",XE]]);var FU=UU;const IU={class:"event-settings"},zU={class:"button-bar"};function PU(e,t,i,a,l,s){const n=(0,o.up)("foxy-dialog-confirm"),d=(0,o.up)("settings-header"),p=(0,o.up)("settings-calendar-events-edit"),f=(0,o.up)("foxy-accordion-item"),u=(0,o.up)("foxy-accordion"),c=(0,o.up)("foxy-theme"),h=(0,o.up)("foxy-button"),m=(0,o.up)("foxy-progress-circular"),g=(0,o.up)("foxy-snackbar"),_=(0,o.up)("notification-details");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(n,{ref:"confirmLeaveDirty",title:e.translations.settings.notifications.confirmIgnoreChangesTitle,"content-html":e.translations.appointmentTypes.confirmIgnoreChangesContent,"ok-text":e.translations.settings.notifications.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.notifications.confirmIgnoreChangesCancel,onConfirm:s.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),i.header?((0,o.wg)(),(0,o.j4)(d,{key:0})):(0,o.kq)("",!0),(0,o._)("h2",null,(0,r.zw)(e.translations.settings.calendar_events.title),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.calendar_events.description),1),(0,o._)("div",IU,[(0,o.Wm)(c,{theme:"grey"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.typesKeys,(t=>((0,o.wg)(),(0,o.j4)(f,{key:t,label:e.translations.settings.calendar_events.types[t].title,message:s.calendarEventsHelper[t],index:t,section:"event-types",open:l.section,error:!l.typesValid[t],onUpdateActive:s.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{type:t,on_change:s.validate},null,8,["type","on_change"])])),_:2},1032,["label","message","index","open","error","onUpdateActive"])))),128))])),_:1})])),_:1}),(0,o._)("div",zU,[(0,o.Wm)(h,{onClick:s.saveEvents,mode:"raised",disabled:s.invalidEvents||l.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.calendar_events.save),1)])),_:1},8,["onClick","disabled"]),l.saving?((0,o.wg)(),(0,o.j4)(m,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)]),(0,o.Wm)(g,{position:"top center",modelValue:l.isSaveCalendarEventsVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>l.isSaveCalendarEventsVisible=e),message:e.translations.settings.calendar_events.success},null,8,["modelValue","message"])]),(0,o.Wm)(_,{title:e.translations.settings.calendar_events.tokenDetailsTitle,description:e.translations.settings.calendar_events.tokenDetails},null,8,["title","description"])])}const VU=e=>((0,o.dD)("data-v-cf7eb29e"),e=e(),(0,o.Cn)(),e),WU={class:"notification-details"},RU=VU((()=>(0,o._)("hr",{class:"foxy-divider"},null,-1))),LU={class:"md-title"},jU=VU((()=>(0,o._)("a",{href:"https://twig.symfony.com/",class:"link",target:"_blank"},"Twig documentation",-1))),qU=VU((()=>(0,o._)("p",null,[(0,o.Uk)(" the syntax uses double curly braces around variables like: "),(0,o._)("span",null,"{{ admin_email }}")],-1))),NU={class:"foxy-table table-twig-token mdc-theme-name--default"},$U=VU((()=>(0,o._)("thead",null,[(0,o._)("tr",null,[(0,o._)("th",null,"Token"),(0,o._)("th",null,"Description")])],-1)));function HU(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",WU,[RU,(0,o._)("h3",LU,(0,r.zw)(i.title),1),(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(i.description)+" ",1),jU]),qU,(0,o._)("div",NU,[(0,o._)("table",null,[$U,(0,o._)("tbody",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.notificationTokens,((t,i)=>((0,o.wg)(),(0,o.iD)("tr",{key:i},[(0,o._)("td",null,[(0,o._)("code",null,(0,r.zw)(t),1)]),(0,o._)("td",null,(0,r.zw)(e.translations.settings.notifications.tokens[t]),1)])))),128))])])])])}var ZU={name:"NotificationDetails",props:["index","title","description"],data(){return{notificationTokens:k}},computed:{...(0,m.rn)("translations",["translations"])}};const YU=(0,he.Z)(ZU,[["render",HU],["__scopeId","data-v-cf7eb29e"]]);var KU=YU;const JU={class:"md-fieldset has-top-menu required"},XU=(0,o._)("legend",null," Event Title ",-1),QU={class:"md-fieldset has-top-menu required"},eF=(0,o._)("legend",null," Event Location ",-1),tF={class:"md-fieldset has-top-menu required"},iF=(0,o._)("legend",null,"Event Details",-1);function aF(e,t,i,a,l,s){const n=(0,o.up)("foxy-notification"),d=(0,o.up)("token-text");return(0,o.wg)(),(0,o.iD)("div",null,["customer"===i.type?((0,o.wg)(),(0,o.j4)(n,{key:0,icon:"info",theme:"blue"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.eventTypeDescription),1)])),_:1})):((0,o.wg)(),(0,o.j4)(n,{key:1,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.eventTypeDescription)+" "+(0,r.zw)(e.translations.settings.calendar_events.sample_appointment_types)+" "+(0,r.zw)(s.sampleAppointmentTypes)+". ",1)])),_:1})),(0,o._)("fieldset",JU,[XU,(0,o.Wm)(d,{options:l.notificationTokens,error:l.errors.title,required:!0,"plain-text":!0,onValidate:s.validateTitle,modelValue:s.eventTitle,"onUpdate:modelValue":t[0]||(t[0]=e=>s.eventTitle=e)},null,8,["options","error","onValidate","modelValue"])]),(0,o._)("fieldset",QU,[eF,(0,o.Wm)(d,{options:l.notificationTokens,error:l.errors.location,required:!0,"plain-text":!0,onValidate:s.validateLocation,modelValue:s.eventLocation,"onUpdate:modelValue":t[1]||(t[1]=e=>s.eventLocation=e)},null,8,["options","error","onValidate","modelValue"])]),(0,o._)("fieldset",tF,[iF,(0,o.Wm)(d,{options:l.notificationTokens,error:l.errors.details,required:!0,onValidate:s.validateDetails,modelValue:s.eventDetails,"onUpdate:modelValue":t[2]||(t[2]=e=>s.eventDetails=e)},null,8,["options","error","onValidate","modelValue"])])])}const oF={class:"token-text"},rF={class:"token-toolbar"},lF={key:0,class:"md-error"};function sF(e,t,i,a,l,s){const n=(0,o.up)("foxy-icon-button"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-menu"),u=(0,o.up)("foxy-menu-anchor"),c=(0,o.up)("at");return(0,o.wg)(),(0,o.iD)("div",oF,[(0,o._)("div",rF,[i.showPreview?((0,o.wg)(),(0,o.j4)(n,{key:0,theme:"light-green",onClick:s.displayPreview},{default:(0,o.w5)((()=>[(0,o.Uk)(" remove_red_eye ")])),_:1},8,["onClick"])):(0,o.kq)("",!0),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"text_fields",onClick:t[0]||(t[0]=e=>l.showOptions=!0),theme:"light-green"}),(0,o.Wm)(f,{modelValue:l.showOptions,"onUpdate:modelValue":t[1]||(t[1]=e=>l.showOptions=e),onSelect:s.insertMessageToken},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.options,(e=>((0,o.wg)(),(0,o.j4)(p,{key:e},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e),1)])),_:2},1024)))),128))])),_:1},8,["modelValue","onSelect"])])),_:1})]),(0,o.Wm)(c,{ats:["{{"],members:i.options,suffix:"}}",value:s.message,onInput:s.handleInput},{default:(0,o.w5)((()=>[(0,o._)("div",{contenteditable:"","data-lt-active":"false","data-gramm":"false",ref:"messageContent",class:(0,r.C_)(s.errorMessage?"error":""),onPaste:t[2]||(t[2]=(...e)=>s.sanitize&&s.sanitize(...e))},null,34)])),_:1},8,["members","value","onInput"]),s.errorMessage?((0,o.wg)(),(0,o.iD)("span",lF,(0,r.zw)(s.errorMessage),1)):(0,o.kq)("",!0)])}var nF=i(90349),dF=i.n(nF),pF=i(73738),fF=i.n(pF),uF={name:"TokenText",props:{options:{type:Array,default(){return[]}},modelValue:{type:String,default:""},plainText:Boolean,showPreview:{default:!1,type:Boolean},required:{default:!1,type:Boolean}},emits:["update:modelValue","preview","validate"],components:{At:dF()},data(){return{error:null,debouncedValidation:null,debouncedUpdateMessage:fF()(this.updateMessage,500),caretPos:null,showOptions:!1,userInteracted:!1}},watch:{message(){this.debouncedValidation(),this.$emit("preview"),this.plainText&&this.$nextTick((()=>{zs(this.$refs.messageContent,this.caretPos)}))}},mounted(){this.debouncedValidation=fF()(this.validate,500)},computed:{message:{get(){return this.plainText?Us(this.modelValue):this.modelValue},set(e){this.plainText?(this.caretPos=Is(this.$refs.messageContent,this.caretPos),this.$emit("update:modelValue",Es(e))):this.$emit("update:modelValue",e)}},errorMessage(){return this.userInteracted?this.required&&!this.trimmedMessage?this.translations.tokenText.errors.required:this.error?this.error:null:null},trimmedMessage(){return this.message.replace(/<[^>]+>/g,"").trim()},...(0,m.rn)("translations",["translations"])},methods:{handleInput(e){const t=e.target.innerHTML;this.debouncedUpdateMessage(t)},updateMessage(e){this.markUserInteracted(),this.message=e},displayPreview(){this.$emit("preview")},insertMessageToken({index:e}){let t=this.options[e],i=this.$refs.messageContent,a=document.createTextNode("{{"+t+"}}"),o=window.getSelection();if(o.anchorNode&&(o.anchorNode.isContentEditable||o.anchorNode.parentNode.isContentEditable)){let e=o.getRangeAt(0);e.deleteContents(),e.insertNode(a),e.setStartAfter(a),o.removeAllRanges(),o.addRange(e)}else{let e=document.createRange();e.selectNodeContents(i),e.collapse(!1),e.insertNode(a),e.setStartAfter(a),o=window.getSelection(),o.removeAllRanges(),o.addRange(e)}this.message=i.innerHTML},validate(){this.error=null,this.trimmedMessage?this.validateTwigString(this.message).then((()=>{this.error=null,this.$emit("validate",!0)})).catch((()=>{this.error=this.translations.tokenText.errors.validationError,this.$emit("validate",!1)})):this.required?this.$emit("validate",!1):this.$emit("validate",!0)},sanitizeImgSize(){setTimeout((()=>{const e=this.$refs.messageContent,t=e.querySelectorAll("img")??[];t.length&&(t.forEach((e=>{const t=e.clientWidth,i=e.clientHeight;e.style.width=t+"px",e.style.height=i+"px"})),this.$nextTick((()=>{this.$emit("update:modelValue",this.$refs.messageContent.innerHTML)})))}),1500)},sanitize(e){this.plainText||this.sanitizeImgSize(),this.plainText&&Fs(e)},markUserInteracted(){this.userInteracted||(this.userInteracted=!0)},...(0,m.nv)("notifications",["validateTwigString"])}};const cF=(0,he.Z)(uF,[["render",sF]]);var hF=cF,mF={name:"SettingsCalendarEventsEdit",props:["type"],components:{TokenText:hF},data(){return{notificationTokens:k,errors:{title:null,location:null,details:null}}},mounted(){this.validate()},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.Se)("appointment_types",["allCalendarEventTypes","appointmentTypesGroupedByEventType"]),eventSettings(){return this.allCalendarEventTypes[this.type]},eventTitle:{get(){return this.eventSettings.title},set(e){const t=Object.assign({},this.eventSettings);t.title=e,this.setCalendarEventType({settings:this.settings,key:this.type,value:t})}},eventLocation:{get(){return this.eventSettings.location},set(e){const t=Object.assign({},this.eventSettings);t.location=e,this.setCalendarEventType({settings:this.settings,key:this.type,value:t})}},eventDetails:{get(){return this.eventSettings.details},set(e){const t=Object.assign({},this.eventSettings);t.details=e,this.setCalendarEventType({settings:this.settings,key:this.type,value:t})}},eventTypeDescription(){return["individual_shared","individual_admin","group_admin"].includes(this.type)&&this.settings.installed.staff&&this.settings.staff.enabled?this.translations.settings.calendar_events.types[this.type].description_staff:this.translations.settings.calendar_events.types[this.type].description},sampleAppointmentTypes(){const e=this.appointmentTypes.filter((e=>-1!==this.appointmentTypesGroupedByEventType[this.type].indexOf(e.id))).map((e=>`"${e.title}"`));if(e.length){if(1===e.length)return e[0];{const t=e.slice(0,3);if(e.length>1&&e.length<4){const e=t.pop();return`${t.join(", ")} ${this.translations.settings.calendar_events.and} ${e}`}if(e.length>=4)return`${t.join(", ")} ${this.translations.settings.calendar_events.and_more}`}}return null},helperText(){let e=`${this.eventTypeDescription} ${this.translations.settings.calendar_events.sample_appointment_types} ${this.sampleAppointmentTypes}`;return e}},methods:{validate(){Object.keys(this.errors).forEach((e=>{const t=""===this.eventSettings[e].replace(/<[^>]+>/g,"").trim();t||this.errors[e]?this.errors[e]=!0:this.errors[e]=!1})),this.$emit("_change",this.type,this.errors)},validateTitle(e){this.errors.title=!e,this.validate()},validateLocation(e){this.errors.location=!e,this.validate()},validateDetails(e){this.errors.details=!e,this.validate()},...(0,m.OI)("google_calendar",["setCalendarEventType"])}};const gF=(0,he.Z)(mF,[["render",aF]]);var _F=gF,yF={name:"SettingsCalendarEvents",components:{SettingsCalendarEventsEdit:_F,NotificationDetails:KU,SettingsHeader:zO},props:{header:{type:Boolean,default:!0}},data(){return{section:null,saving:!1,dirty:!1,leaveWithoutSaving:!1,typesValid:{},isSaveCalendarEventsVisible:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},created(){this.typesKeys.forEach((e=>{this.typesValid[e]=!0}))},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("appointment_types",["allCalendarEventTypes","allowedEventTypes"]),typesKeys(){return Object.keys(this.allCalendarEventTypes).filter((e=>this.allowedEventTypes.includes(e)))},invalidEvents(){return Object.values(this.typesValid).filter((e=>!e)).length>0},calendarEventsHelper(){let e={};return this.typesKeys.forEach((t=>{["individual_admin","group_admin"].includes(t)&&this.settings.installed.staff&&this.settings.staff.enabled?e[t]=this.translations.settings.calendar_events.types[t].helper_staff:e[t]=this.translations.settings.calendar_events.types[t].helper})),e}},methods:{...(0,m.OI)("google_calendar",["setCalendarEventsEnabled"]),...(0,m.nv)("google_calendar",["updateCalendarEventsSettings"]),updateSection(e){this.section=e||null},validate(e,t){this.dirty=!0;const i=0===Object.values(t).filter((e=>e)).length;this.typesValid[e]=i},async saveEvents(){this.saving=!0;try{await this.updateCalendarEventsSettings(),this.saving=!1,this.dirty&&(this.isSaveCalendarEventsVisible=!0,this.dirty=!1),this.$emit("saved")}catch(e){console.log(e),this.saving=!1}},dialogLeaveWithoutSaving(){this.routerNext()}}};const wF=(0,he.Z)(yF,[["render",PU]]);var xF=wF;const CF={class:"mailchimp-settings"};function vF(e,t,i,a,r,l){const s=(0,o.up)("settings-header"),n=(0,o.up)("mailchimp-list"),d=(0,o.up)("mailchimp-auth"),p=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",CF,[(0,o.Wm)(s),e.settings.mailchimp.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[l.account_authorized?((0,o.wg)(),(0,o.j4)(n,{key:0})):((0,o.wg)(),(0,o.j4)(d,{key:1}))],64)):((0,o.wg)(),(0,o.j4)(p,{key:1}))])}const bF={class:"button-bar align-right"};function BF(e,t,i,l,s,n){const d=(0,o.up)("foxy-textfield"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-progress-circular"),u=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("form",{novalidate:"",onSubmit:t[2]||(t[2]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[(0,o.Wm)(d,{modelValue:n.api_key,"onUpdate:modelValue":t[0]||(t[0]=e=>n.api_key=e),label:e.translations.settings.mailchimp.api_key,helptext:s.validKey?""+e.translations.settings.mailchimp.api_key_helper_label+"":e.translations.settings.mailchimp.apiKeyError,"helptext-persistent":"","helptext-validation":"",required:"",id:"api_key",valid:s.validKey},null,8,["modelValue","label","helptext","valid"]),(0,o._)("div",bF,[(0,o.Wm)(p,{"data-test":"test-save-and-authorise-mailchimp",mode:"raised",class:"md-primary",onClick:n.saveSettings,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.mailchimp.saveAuthorize),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(f,{key:0,indeterminate:""})):(0,o.kq)("",!0)]),(0,o.Wm)(u,{position:"top center",modelValue:s.isMcErrorVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.isMcErrorVisible=e),message:s.errorMessage},null,8,["modelValue","message"])],32)}var SF={name:"SettingsMailchimpAuth",data(){return{errorMessage:"",saving:!1,validKey:!0,isMcErrorVisible:!1}},computed:{api_key:{get(){return this.settings.mailchimp.api_key||""},set(e){this.updateMailchimpApiKey({settings:this.settings,value:e.trim()})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{saveSettings(){this.validateKey(),this.validKey&&(this.saving=!0,this.updateMailchimpSettings().then((()=>{this.authorizeMailchimp().then((()=>{this.saving=!1,this.updateMailchimpAuthorized({settings:this.settings,value:!0})})).catch((e=>{this.saving=!1,this.validKey=!1;let t=e.response_code,i=e.error.errors;this.errorMessage=i[t][0],this.isMcErrorVisible=!0}))})))},validateKey(){this.api_key?this.validKey=!0:this.validKey=!1},...(0,m.OI)("mailchimp",["updateMailchimpApiKey","updateMailchimpAuthorized"]),...(0,m.nv)("mailchimp",["updateMailchimpSettings","authorizeMailchimp"])}};const kF=(0,he.Z)(SF,[["render",BF]]);var AF=kF;const MF={key:1,class:"md-whiteframe"},DF={class:"md-title",style:{flex:"1"}},TF={class:"sub"},OF={class:"foxy-list-default"};function GF(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-toolbar");return(0,o.wg)(),(0,o.iD)("div",null,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,message:l.loadingMessage},null,8,["message"])):((0,o.wg)(),(0,o.iD)("div",MF,[(0,o.Wm)(p,{class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("h2",DF,[(0,o._)("span",TF,(0,r.zw)(e.translations.settings.mailchimp.lists),1),(0,o.Uk)((0,r.zw)(e.settings.mailchimp.account_details.account_name),1)]),(0,o.Wm)(d,{"data-test":"test-mailchimp-disconnect",onClick:s.disconnect,mode:"unelevated"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webex.disconnect),1)])),_:1},8,["onClick"])])),_:1}),(0,o._)("ul",OF,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.settings.mailchimp.lists,(e=>((0,o.wg)(),(0,o.iD)("li",{key:e.id,class:"mailchimp-list-item"},[(0,o._)("span",null,(0,r.zw)(e.name),1)])))),128))])]))])}var EF={name:"SettingsMailchimpList",store:$J,components:{Loading:ge},data(){return{loading:!0,loadingMessage:""}},mounted(){this.settings.mailchimp.lists.length?this.loading=!1:(this.loadingMessage=this.translations.settings.mailchimp.loadingLists,this.fetchMailchimpLists().then((()=>{this.loading=!1})))},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{disconnect(){this.loadingMessage=this.translations.settings.mailchimp.deauthorize,this.loading=!0,this.deauthorizeMailchimp().then((()=>{this.loading=!1}))},...(0,m.nv)("mailchimp",["fetchMailchimpLists","deauthorizeMailchimp"])}};const UF=(0,he.Z)(EF,[["render",GF],["__scopeId","data-v-556e6f1f"]]);var FF=UF,IF={name:"SettingsMailchimp",store:$J,components:{SettingsHeader:zO,MailchimpAuth:AF,MailchimpList:FF,SettingNotEnabled:GU},data(){return{}},mounted(){this.getGuides({"ssasc-plugin-screen":K.mailchimp})},computed:{account_authorized(){return this.settings.mailchimp.account_details},...(0,m.rn)(["settings"])},methods:{cancelEdit(){this.$emit("cancel")},...(0,m.nv)("guides",["getGuides"])}};const zF=(0,he.Z)(IF,[["render",vF]]);var PF=zF;const VF={class:"webex-settings"};function WF(e,t,i,a,r,l){const s=(0,o.up)("settings-header"),n=(0,o.up)("webex-auth"),d=(0,o.up)("webex-user"),p=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",VF,[i.header?((0,o.wg)(),(0,o.j4)(s,{key:0})):(0,o.kq)("",!0),e.settings.webex.enabled||i.showDisabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.account_authorized?((0,o.wg)(),(0,o.j4)(d,{key:1})):((0,o.wg)(),(0,o.j4)(n,{key:0}))],64)):((0,o.wg)(),(0,o.j4)(p,{key:2}))])}const RF={class:"webex-settings"};function LF(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",RF,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.webex.notConnected),1),(0,o.Wm)(n,{mode:"raised",class:"md-primary",onClick:s.saveSettings,disabled:l.saving},{default:(0,o.w5)((()=>[l.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.webex.saveAuthorize),1)],64))])),_:1},8,["onClick","disabled"]),l.saving?((0,o.wg)(),(0,o.j4)(d,{key:0,indeterminate:"",medium:""})):(0,o.kq)("",!0)])}var jF={name:"SettingsWebexAuth",data(){return{saving:!1}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("webex",["webexAuthUrl"])},methods:{saveSettings(){this.saving=!0;const e=window.ssa_is_embed?window.top.location.href:null;this.updateWebexEnabled(!0),this.webexAuth({ssa_redirect:this.$route.path,ssa_base_url:e}).then((()=>{this.saving=!1,window.ssa_is_embed?window.top.location.href=this.webexAuthUrl:window.location.href=this.webexAuthUrl}))},...(0,m.OI)("webex",["updateWebexEnabled"]),...(0,m.nv)("webex",["webexAuth"])}};const qF=(0,he.Z)(jF,[["render",LF]]);var NF=qF;const $F={key:2,class:"md-whiteframe"},HF={class:"md-title",style:{flex:"1"}},ZF={class:"sub"},YF={class:"ssa-webex-user"},KF={class:"avatar"},JF=["src","alt"],XF={class:"user"},QF={class:"profile"},eI={class:"md-display-1"},tI={class:"md-subhead"},iI=(0,o._)("br",null,null,-1);function aI(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-empty"),f=(0,o.up)("foxy-toolbar"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-avatar"),h=(0,o.up)("foxy-layout");return(0,o.wg)(),(0,o.iD)("div",null,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,message:e.translations.settings.webex.verifying},null,8,["message"])):(0,o.kq)("",!0),!l.loading&&l.error?((0,o.wg)(),(0,o.j4)(p,{key:1,label:l.errorMessage,description:e.translations.settings.webex.failedToFetchDescription},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{mode:"raised",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webex.disconnect),1)])),_:1},8,["onClick"])])),_:1},8,["label","description"])):(0,o.kq)("",!0),!l.loading&&e.webexUser?((0,o.wg)(),(0,o.iD)("div",$F,[(0,o.Wm)(f,{class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("h2",HF,[(0,o._)("span",ZF,(0,r.zw)(e.translations.settings.webex.account),1)]),(0,o.Wm)(d,{mode:"unelevated",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webex.disconnect),1)])),_:1},8,["onClick"])])),_:1}),(0,o.Wm)(h,{"md-gutter":""},{default:(0,o.w5)((()=>[(0,o._)("div",YF,[(0,o._)("div",KF,[e.webexUser.avatar?((0,o.wg)(),(0,o.j4)(c,{key:1,"md-large":"",class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.webexUser.avatar,alt:e.webexUser.first_name},null,8,JF)])),_:1})):((0,o.wg)(),(0,o.j4)(c,{key:0,"md-large":"",class:"md-avatar-icon md-primary"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"person"})])),_:1}))]),(0,o._)("div",XF,[(0,o._)("div",QF,[(0,o._)("h3",eI,(0,r.zw)(e.webexUser.first_name)+" "+(0,r.zw)(e.webexUser.last_name),1),(0,o._)("p",tI,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.zoom.userEmail)+":",1),iI,(0,o.Uk)((0,r.zw)(e.webexUser.email),1)])])])])])),_:1})])):(0,o.kq)("",!0)])}var oI={name:"SettingsWebexUser",store:$J,components:{Loading:ge},data(){return{loading:!0,error:!1,errorMessage:""}},mounted(){this.webexUser?this.loading=!1:this.fetchWebexUser().then((()=>{this.loading=!1})).catch((e=>{console.log(e),this.loading=!1,this.error=!0,this.errorMessage=this.translations.settings.webex.failedToFetch}))},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("webex",["webexUser"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{disconnectAccount(){this.webexDeauth().then((()=>{window.location.reload()}))},...(0,m.nv)("webex",["fetchWebexUser","webexDeauth"])}};const rI=(0,he.Z)(oI,[["render",aI]]);var lI=rI,sI={name:"SettingsZoom",props:{header:{type:Boolean,default:!0},showDisabled:{type:Boolean,default:!1}},components:{SettingsHeader:zO,WebexAuth:NF,WebexUser:lI,SettingNotEnabled:GU},computed:{account_authorized(){return this.settings.webex.auth_code},...(0,m.rn)(["settings"])},methods:{cancelEdit(){this.$emit("cancel")},...(0,m.nv)("guides",["getGuides"])}};const nI=(0,he.Z)(sI,[["render",WF]]);var dI=nI;const pI={class:"zoom-settings"};function fI(e,t,i,a,r,l){const s=(0,o.up)("settings-header"),n=(0,o.up)("zoom-auth"),d=(0,o.up)("zoom-user"),p=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",pI,[i.header?((0,o.wg)(),(0,o.j4)(s,{key:0})):(0,o.kq)("",!0),e.settings.zoom.enabled||i.showDisabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.account_authorized?((0,o.wg)(),(0,o.j4)(d,{key:1})):((0,o.wg)(),(0,o.j4)(n,{key:0}))],64)):((0,o.wg)(),(0,o.j4)(p,{key:2}))])}const uI={class:"zoom-settings"};function cI(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",uI,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.zoom.notConnected),1),(0,o.Wm)(n,{mode:"raised",class:"md-primary",onClick:s.saveSettings,disabled:l.saving},{default:(0,o.w5)((()=>[l.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.zoom.saveAuthorize),1)],64))])),_:1},8,["onClick","disabled"]),l.saving?((0,o.wg)(),(0,o.j4)(d,{key:0,indeterminate:"",medium:""})):(0,o.kq)("",!0)])}var hI={name:"SettingsZoomAuth",data(){return{saving:!1}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("zoom",["zoomAuthUrl"]),...(0,m.rn)(["settings"])},methods:{saveSettings(){this.saving=!0;const e=window.ssa_is_embed?window.top.location.href:window.location.hostname+window.location.pathname;this.updateZoomEnabled({settings:this.settings,value:!0}),this.zoomAuth({ssa_redirect:window.ssa_is_embed?this.$route.path:null,ssa_base_url:window.ssa_is_embed?e:null}).then((()=>{this.saving=!1,window.ssa_is_embed?window.top.location.href=this.zoomAuthUrl:window.location.href=this.zoomAuthUrl}))},...(0,m.OI)("zoom",["updateZoomEnabled"]),...(0,m.nv)("zoom",["zoomAuth"])}};const mI=(0,he.Z)(hI,[["render",cI]]);var gI=mI;const _I={key:2,class:"md-whiteframe"},yI={class:"md-title",style:{flex:"1"}},wI={class:"sub"},xI={class:"ssa-zoom-user"},CI={class:"avatar"},vI=["src","alt"],bI={class:"user"},BI={class:"profile"},SI={class:"md-display-1"},kI={class:"md-subhead"},AI=(0,o._)("br",null,null,-1),MI={class:"md-subhead meeting-url"},DI=(0,o._)("br",null,null,-1);function TI(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-empty"),f=(0,o.up)("foxy-toolbar"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-avatar"),h=(0,o.up)("foxy-layout");return(0,o.wg)(),(0,o.iD)("div",null,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,message:"Verifying your Zoom user"})):(0,o.kq)("",!0),!l.loading&&l.error?((0,o.wg)(),(0,o.j4)(p,{key:1,label:l.errorMessage,description:e.translations.wizard.zoom.failedToFetchDescription},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{mode:"raised",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.zoom.disconnect),1)])),_:1},8,["onClick"])])),_:1},8,["label","description"])):(0,o.kq)("",!0),!l.loading&&e.zoomUser?((0,o.wg)(),(0,o.iD)("div",_I,[(0,o.Wm)(f,{class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("h2",yI,[(0,o._)("span",wI,(0,r.zw)(e.translations.settings.zoom.account),1)]),(0,o.Wm)(d,{mode:"unelevated",onClick:s.disconnectAccount},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.zoom.disconnect),1)])),_:1},8,["onClick"])])),_:1}),(0,o.Wm)(h,{"md-gutter":""},{default:(0,o.w5)((()=>[(0,o._)("div",xI,[(0,o._)("div",CI,[e.zoomUser.pic_url?((0,o.wg)(),(0,o.j4)(c,{key:1,"md-large":"",class:"md-primary"},{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.zoomUser.pic_url,alt:e.zoomUser.first_name},null,8,vI)])),_:1})):((0,o.wg)(),(0,o.j4)(c,{key:0,"md-large":"",class:"md-avatar-icon md-primary"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"person"})])),_:1}))]),(0,o._)("div",bI,[(0,o._)("div",BI,[(0,o._)("h3",SI,(0,r.zw)(e.zoomUser.first_name)+" "+(0,r.zw)(e.zoomUser.last_name),1),(0,o._)("p",kI,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.zoom.userEmail)+":",1),AI,(0,o.Uk)((0,r.zw)(e.zoomUser.email),1)])]),(0,o._)("div",MI,[(0,o._)("p",null,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.zoom.userMeetingUrl)+":",1),DI,(0,o.Uk)(" "+(0,r.zw)(e.zoomUser.meeting_url),1)])])])])])),_:1})])):(0,o.kq)("",!0)])}var OI={name:"SettingsZoomUser",store:$J,components:{Loading:ge},data(){return{loading:!0,error:!1,errorMessage:""}},mounted(){this.zoomUser?this.loading=!1:this.fetchZoomUser().then((()=>{this.loading=!1})).catch((e=>{console.log(e),this.loading=!1,this.error=!0,this.errorMessage=this.translations.wizard.zoom.failedToFetch}))},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("zoom",["zoomUser"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{disconnectAccount(){this.zoomDeauth().then((()=>{window.location.reload()}))},...(0,m.nv)("zoom",["fetchZoomUser","zoomDeauth"])}};const GI=(0,he.Z)(OI,[["render",TI]]);var EI=GI,UI={name:"SettingsZoom",props:{header:{type:Boolean,default:!0},showDisabled:{type:Boolean,default:!1}},components:{SettingsHeader:zO,ZoomAuth:gI,ZoomUser:EI,SettingNotEnabled:GU},data(){return{}},mounted(){this.getGuides({"ssasc-plugin-screen":K.zoom})},computed:{account_authorized(){return this.settings.zoom.auth_code},...(0,m.rn)(["settings"])},methods:{cancelEdit(){this.$emit("cancel")},...(0,m.nv)("guides",["getGuides"])}};const FI=(0,he.Z)(UI,[["render",fI]]);var II=FI;const zI={class:"advanced-scheduling-settings"},PI={class:"foxy-switch-with-helper"},VI={class:"foxy-helper-text"},WI={class:"link",href:"https://simplyscheduleappointments.com/guides/advanced-scheduling-options/",target:"_blank"},RI={class:"foxy-switch-with-helper"},LI={class:"foxy-helper-text"},jI={class:"link",href:"https://simplyscheduleappointments.com/guides/let-multiple-appointment-types-book-the-same-time-slot/",target:"_blank"};function qI(e,t,i,a,l,s){const n=(0,o.up)("settings-header"),d=(0,o.up)("foxy-switch"),p=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("div",zI,[(0,o.Wm)(n,{loading:l.saving},null,8,["loading"]),(0,o._)("div",PI,[(0,o.Wm)(d,{modelValue:s.advanced_scheduling_enabled,"onUpdate:modelValue":t[0]||(t[0]=e=>s.advanced_scheduling_enabled=e),id:"advanced_scheduling_enabled",name:"advanced_scheduling_enabled"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.advanced_scheduling.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",VI,[(0,o.Uk)((0,r.zw)(e.translations.settings.advanced_scheduling.help)+" ",1),(0,o._)("a",WI,(0,r.zw)(e.translations.settings.advanced_scheduling.help_link),1)])]),(0,o._)("div",RI,[(0,o.Wm)(d,{modelValue:s.separate_appointment_type_availability,"onUpdate:modelValue":t[1]||(t[1]=e=>s.separate_appointment_type_availability=e),id:"separate_appointment_type_availability",name:"separate_appointment_type_availability"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.separate_appointment_type_availability.label),1)])),_:1},8,["modelValue"]),(0,o._)("p",LI,[(0,o.Uk)((0,r.zw)(e.translations.settings.developer.separate_appointment_type_availability.help)+" ",1),(0,o._)("a",jI,(0,r.zw)(e.translations.settings.developer.separate_appointment_type_availability.help_link),1)])]),(0,o.Wm)(p,{position:"top center",modelValue:l.isSaveSettingsVisible,"onUpdate:modelValue":t[2]||(t[2]=e=>l.isSaveSettingsVisible=e),message:e.translations.settings.advanced_scheduling.saved},null,8,["modelValue","message"])])}var NI={name:"SettingsAdvancedScheduling",components:{SettingsHeader:zO},data(){return{saving:!1,isSaveSettingsVisible:!1}},mounted(){this.getGuides({"ssasc-plugin-screen":K.advanced_scheduling_options})},computed:{advanced_scheduling_enabled:{get(){return!!this.settings.advanced_scheduling.enabled},set(e){this.updateAdvancedSchedulingEnabled({settings:this.settings,value:e}),this.saving=!0,this.updateAdvancedSchedulingSettings().then((()=>{this.saving=!1,this.isSaveSettingsVisible=!0}))}},separate_appointment_type_availability:{get(){return this.settings.developer.separate_appointment_type_availability},set(e){this.setSeparateAppointmentTypeAvailability({settings:this.settings,value:e}),this.saving=!0,this.updateDeveloperSettings().then((()=>{this.saving=!1,this.isSaveSettingsVisible=!0}))}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("appointment_types",["editableAppointmentTypeIds"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{editAppointmentType(){let e=this.editableAppointmentTypeIds[0];mY.push(`/ssa/appointment-types/type/${e}`)},openBulkEdit(){this.updateBulkEditing(this.editableAppointmentTypeIds),mY.push({name:"appointment-type-bulk-edit",params:{section:"scheduling"}})},...(0,m.nv)(["fetchSettings"]),...(0,m.nv)("advanced_scheduling",["updateAdvancedSchedulingSettings"]),...(0,m.OI)("advanced_scheduling",["updateAdvancedSchedulingEnabled","setSeparateAppointmentTypeAvailability"]),...(0,m.OI)("appointment_types",["updateBulkEditing"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.nv)("developer_settings",["updateDeveloperSettings"])}};const $I=(0,he.Z)(NI,[["render",qI],["__scopeId","data-v-137b3d5b"]]);var HI=$I;const ZI={class:"link",href:"https://simplyscheduleappointments.com/document/conversion-tracking/",target:"_blank"},YI={class:"button-bar align-right"};function KI(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-checkbox"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-progress-circular"),c=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{class:"tracking-settings",novalidate:"",onSubmit:t[2]||(t[2]=(0,a.iM)(((...e)=>n.saveSettings&&n.saveSettings(...e)),["stop","prevent"]))},[(0,o.Wm)(d),(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(e.translations.settings.tracking.instructions)+" ",1),(0,o._)("a",ZI,(0,r.zw)(e.translations.settings.tracking.docLinkText),1)]),(0,o._)("p",null,[(0,o.Wm)(p,{id:"event-tracking",name:"event-tracking",modelValue:n.event_tracking,"onUpdate:modelValue":t[0]||(t[0]=e=>n.event_tracking=e),disabled:s.saving,label:e.translations.settings.tracking.eventTracking},null,8,["modelValue","disabled","label"])]),(0,o._)("p",null,[(0,o.Wm)(p,{id:"page-tracking",name:"page-tracking",modelValue:n.page_tracking,"onUpdate:modelValue":t[1]||(t[1]=e=>n.page_tracking=e),disabled:s.saving,label:e.translations.settings.tracking.pageTracking},null,8,["modelValue","disabled","label"])]),(0,o._)("div",YI,[(0,o.Wm)(f,{mode:"raised",class:"md-primary",onClick:n.saveSettings,disabled:s.saving},{default:(0,o.w5)((()=>[s.saving?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.general.saving),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)],64))])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(u,{key:0,indeterminate:"",medium:""})):(0,o.kq)("",!0)])],32),(0,o.Wm)(c,{ref:"confirmLeaveDirty",title:e.translations.settings.general.confirmTitle,"content-html":e.translations.settings.general.confirmContent,"ok-text":e.translations.general.ok,"cancel-text":e.translations.general.cancel,onConfirm:n.dirtyConfirm},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}var JI={name:"SettingsTracking",components:{SettingsHeader:zO},data(){return{saving:!1,dirty:!1,routerNext:null,to:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{event_tracking:function(e,t){e!==t&&(this.dirty=!0)},page_tracking:function(e,t){e!==t&&(this.dirty=!0)}},mounted(){this.getGuides({"ssasc-plugin-screen":K.tracking})},computed:{event_tracking:{get(){return this.settings.tracking.event_tracking},set(e){this.setEventTracking({settings:this.settings,value:e})}},page_tracking:{get(){return this.settings.tracking.page_tracking},set(e){this.setPageTracking({settings:this.settings,value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{saveSettings(){this.saving=!0,this.saveTrackingSettings().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")}))},dirtyConfirm(){this.routerNext(),this.fetchSettings()},...(0,m.nv)(["fetchSettings"]),...(0,m.nv)("tracking",["saveTrackingSettings"]),...(0,m.OI)("tracking",["setEventTracking","setPageTracking"]),...(0,m.nv)("guides",["getGuides"])}};const XI=(0,he.Z)(JI,[["render",KI],["__scopeId","data-v-b1b7c6c8"]]);var QI=XI;const ez={key:1,style:{padding:"0"}};function tz(e,t,i,r,l,s){const n=(0,o.up)("no-permission"),d=(0,o.up)("settings-header"),p=(0,o.up)("loading"),f=(0,o.up)("view-selector"),u=(0,o.up)("date-select-and-list"),c=(0,o.up)("setting-not-enabled"),h=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("form",{novalidate:"",onSubmit:t[2]||(t[2]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(d),e.settings.blackout_dates.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[l.saving?((0,o.wg)(),(0,o.j4)(p,{key:0,message:e.translations.settings.blackout.saving},null,8,["message"])):((0,o.wg)(),(0,o.iD)("fieldset",ez,[(0,o.Wm)(f),(0,o.Wm)(u,{modelValue:s.blackout_dates,"onUpdate:modelValue":t[0]||(t[0]=e=>s.blackout_dates=e),saving:l.quickSaving},null,8,["modelValue","saving"])]))],64)):((0,o.wg)(),(0,o.j4)(c,{key:1}))],64)):((0,o.wg)(),(0,o.j4)(n,{key:0})),(0,o.Wm)(h,{position:"top center",modelValue:l.isSavedMessageVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>l.isSavedMessageVisible=e),message:e.translations.settings.blackout.saved},null,8,["modelValue","message"])],32)}const iz={key:1,class:"md-title"},az=(0,o._)("div",{style:{flex:"1"}},null,-1);function oz(e,t,i,a,l,s){const n=(0,o.up)("foxy-list-item"),d=(0,o.up)("foxy-select"),p=(0,o.up)("foxy-progress-circular"),f=(0,o.up)("foxy-toolbar");return(0,o.wg)(),(0,o.j4)(f,{class:"md-transparent view-selector"},{default:(0,o.w5)((()=>[s.canSelectBlackoutType&&!l.loading?((0,o.wg)(),(0,o.j4)(d,{key:0,fullwidth:!1,class:"title",label:e.translations.settings.blackout.selectTarget,name:"blackout-view",id:"blackout-view",modelValue:s.blackoutView,"onUpdate:modelValue":t[0]||(t[0]=e=>s.blackoutView=e),"aria-label":"translations.settings.blackout.selectTarget"},{default:(0,o.w5)((()=>[e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(n,{key:0,role:"option","data-value":"global"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.title)+": "+(0,r.zw)(e.translations.settings.blackout.view.global),1)])),_:1})):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_staff_blackout_dates")&&this.user.staff_id?((0,o.wg)(),(0,o.j4)(n,{key:1,role:"option","data-value":this.user.staff_id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.title)+": "+(0,r.zw)(e.translations.settings.blackout.view.self),1)])),_:1},8,["data-value"])):(0,o.kq)("",!0),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.staffExcludingSelfOptions,(t=>((0,o.wg)(),(0,o.j4)(n,{key:t.id,role:"option","data-value":t.id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.title)+": "+(0,r.zw)(t.display_name),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])):((0,o.wg)(),(0,o.iD)("h2",iz,[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.title)+" ",1),l.loading?((0,o.wg)(),(0,o.j4)(p,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])),az])),_:1})}var rz={name:"BlackoutViewSelector",data(){return{loading:!0}},mounted(){(this.currentUserCan("ssa_manage_staff")||this.currentUserCan("ssa_manage_staff_blackout_dates"))&&"undefined"===typeof this.staff&&this.staffModule.enabled?this.fetchStaff().then((()=>{this.loading=!1})).catch(((e,t)=>{console.log(t)})):this.loading=!1},computed:{blackoutView:{get(){return this.$route.params.staffId?this.$route.params.staffId:"global"},set(e){"global"===e?this.$router.push({name:"settings-blackout"}):this.$router.push({name:"settings-blackout-staff",params:{staffId:e}})}},canSelectBlackoutType(){return!!this.staffModule.enabled&&(this.currentUserCan("ssa_manage_site_settings")&&this.currentUserCan("ssa_manage_staff")||this.currentUserCan("ssa_manage_site_settings")&&this.currentUserCan("ssa_manage_staff_blackout_dates")||this.currentUserCan("ssa_manageStaff")&&this.currentUserCan("ssa_manage_staff_blackout_dates"))},staffExcludingSelfOptions(){return this.currentUserCan("ssa_manage_staff")?this.staffExcludingSelf:[]},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["user"]),...(0,m.rn)("staff",["staff"]),...(0,m.Se)("staff",["currentUserCan","staffExcludingSelf","staffModule"])},methods:{...(0,m.nv)("staff",["fetchStaff"])}};const lz=(0,he.Z)(rz,[["render",oz]]);var sz=lz;const nz=e=>((0,o.dD)("data-v-61506d1a"),e=e(),(0,o.Cn)(),e),dz={class:"full-width"},pz={class:"md-title",style:{flex:"1"}},fz=nz((()=>(0,o._)("div",{style:{flex:"1"}},null,-1))),uz={class:"md-list-item-container"},cz={class:"screen-reader-text"};function hz(e,t,i,l,s,n){const d=(0,o.up)("multi-date-picker"),p=(0,o.up)("foxy-layout"),f=(0,o.up)("foxy-progress-circular"),u=(0,o.up)("foxy-toolbar"),c=(0,o.up)("foxy-icon"),h=(0,o.up)("foxy-tooltip"),m=(0,o.up)("foxy-icon-button"),g=(0,o.up)("foxy-list-item"),_=(0,o.up)("foxy-list"),y=(0,o.up)("foxy-empty");return(0,o.wg)(),(0,o.j4)(p,{"md-gutter":24,class:"data-select-and-list"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,null,{default:(0,o.w5)((()=>[(0,o._)("div",dz,[(0,o.Wm)(d,{modelValue:s.selectedDates,"onUpdate:modelValue":t[0]||(t[0]=e=>s.selectedDates=e),readonly:i.readonly,limit:n.limit},null,8,["modelValue","readonly","limit"])])])),_:1}),(0,o.Wm)(p,{"md-column":""},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{theme:"white"},{default:(0,o.w5)((()=>[(0,o._)("h2",pz,(0,r.zw)(e.translations.settings.blackout.selected),1),fz,(0,o.wy)((0,o._)("div",null,[(0,o.Wm)(f,{medium:"",indeterminate:""}),(0,o.Uk)(" "+(0,r.zw)(e.translations.general.saving),1)],512),[[a.F8,i.saving]])])),_:1}),n.allDateData.length?((0,o.wg)(),(0,o.j4)(_,{key:0,class:"md-dense blackout-dates-selected"},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.allDateData,((t,i)=>((0,o.wg)(),(0,o.j4)(g,{key:i,class:(0,r.C_)({past:s.moment(t.date).isBefore(s.moment(),"day")})},{default:(0,o.w5)((()=>[(0,o._)("div",uz,[(0,o._)("span",null,(0,r.zw)(s.moment(t.date).format(e.settings.global.date_format_moment)),1),t.readonly?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(c,{"data-tooltip-id":"date"+i,style:{padding:"12px"},icon:"public"},null,8,["data-tooltip-id"]),(0,o.Wm)(h,{id:"date"+i,position:"end,below"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.view.global),1)])),_:2},1032,["id"])],64)):((0,o.wg)(),(0,o.j4)(m,{key:1,class:"md-list-action md-accent",onClick:e=>n.deleteDate(t.date)},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{icon:"close",class:"foxy-warn"}),(0,o._)("span",cz,(0,r.zw)(e.translations.actions.delete)+" "+(0,r.zw)(s.moment(t.date).format(e.settings.global.date_format_moment)),1)])),_:2},1032,["onClick"]))])])),_:2},1032,["class"])))),128))])),_:1})):((0,o.wg)(),(0,o.j4)(y,{key:1,label:e.translations.settings.blackout.emptyLabel,description:e.translations.settings.blackout.emptyDesc},null,8,["label","description"]))])),_:1})])),_:1})}const mz={class:"cov-date-body md-theme-light-green"},gz={class:"cov-date-monthly"},_z={class:"screen-reader-text"},yz={class:"cov-date-caption"},wz={class:"screen-reader-text"},xz={key:0,class:"cov-date-box",tabindex:"-1",ref:"dayList"},Cz={class:"cov-picker-box"},vz={class:"week"},bz={class:"days"},Bz=["data-tooltip-id","data-test-date-str","onClick"],Sz={key:1,class:"cov-date-box list-box"},kz={class:"cov-picker-box date-list",id:"yearList",ref:"yearList",tabindex:"-1"},Az={class:"screen-reader-text"},Mz=["onChange","value"],Dz={key:2,class:"cov-date-box list-box"},Tz={class:"cov-picker-box date-list"},Oz=["onClick"];function Gz(e,t,i,l,s,n){const d=(0,o.up)("foxy-icon"),p=(0,o.up)("foxy-tooltip");return(0,o.wg)(),(0,o.iD)("div",mz,[(0,o._)("div",gz,[(0,o._)("button",{class:"cov-date-previous",onClick:t[0]||(t[0]=(0,a.iM)(((...e)=>n.prevMonth&&n.prevMonth(...e)),["prevent"]))},[(0,o.Wm)(d,{class:"md-size-2x",icon:"keyboard_arrow_left",theme:"on-primary"}),(0,o._)("span",_z,(0,r.zw)(e.translations.settings.blackout.previousMonth),1)]),(0,o._)("div",yz,[(0,o._)("button",{class:"caption-year",onClick:t[1]||(t[1]=(0,a.iM)(((...e)=>n.showYear&&n.showYear(...e)),["prevent"]))},(0,r.zw)(n.currentYear),1),(0,o._)("span",{onClick:t[2]||(t[2]=e=>s.displayType="month")},(0,r.zw)(n.displayMonth),1)]),(0,o._)("button",{class:"cov-date-next",onClick:t[3]||(t[3]=(0,a.iM)(((...e)=>n.nextMonth&&n.nextMonth(...e)),["prevent"]))},[(0,o.Wm)(d,{class:"md-size-2x",icon:"keyboard_arrow_right",theme:"on-primary"}),(0,o._)("span",wz,(0,r.zw)(e.translations.settings.blackout.nextMonth),1)])]),"day"===s.displayType?((0,o.wg)(),(0,o.iD)("div",xz,[(0,o._)("div",Cz,[(0,o._)("div",vz,[(0,o._)("ul",null,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.week,(e=>((0,o.wg)(),(0,o.iD)("li",{key:e},(0,r.zw)(e),1)))),128))])]),(0,o._)("div",bz,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.days,((t,i)=>((0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(["day",{selected:t.selected,readonly:t.readonly,unavailable:t.unavailable,"passive-day":!t.inMonth}]),key:i,"data-tooltip-id":"day"+i,"data-test":"test-date-picker-day","data-test-date-str":t.moment.format(e.settings.global.date_format_moment),onClick:e=>n.checkDay(t)},[(0,o.Uk)((0,r.zw)(t.value)+" ",1),t.readonly?((0,o.wg)(),(0,o.j4)(p,{key:0,id:"day"+i,position:"above"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.blackout.view.global),1)])),_:2},1032,["id"])):(0,o.kq)("",!0)],10,Bz)))),128))])])],512)):"year"===s.displayType?((0,o.wg)(),(0,o.iD)("div",Sz,[(0,o._)("fieldset",kz,[(0,o._)("legend",Az,(0,r.zw)(e.translations.settings.blackout.selectYear),1),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.year,((e,t)=>((0,o.wg)(),(0,o.iD)("label",{class:"date-item",key:t},[(0,o._)("input",{onChange:t=>n.setYear(e),type:"checkbox",class:"screen-reader-text",value:e},null,40,Mz),(0,o.Uk)(" "+(0,r.zw)(e),1)])))),128))],512)])):"month"===s.displayType?((0,o.wg)(),(0,o.iD)("div",Dz,[(0,o._)("div",Tz,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.month,((e,t)=>((0,o.wg)(),(0,o.iD)("div",{class:"date-item",key:t,onClick:t=>n.setMonth(e)},(0,r.zw)(e),9,Oz)))),128))])])):(0,o.kq)("",!0)])}var Ez=i(36797),Uz=i.n(Ez),Fz={name:"DatePicker",props:{required:{type:Boolean,default:!1},modelValue:{type:Array,required:!0},readonly:{type:Array,default(){return[]}},limit:{type:Array,default(){return[]}}},emits:["update:modelValue","change"],data(){return{currentMoment:null,displayType:"day",month:Uz().months(),year:[]}},mounted(){this.showDay()},computed:{week(){var e=Uz().weekdaysMin(!1);if(this.settings.global.start_of_week>0){var t=e.slice(0,this.settings.global.start_of_week),i=e.slice(this.settings.global.start_of_week);e=[...i,...t]}return e},displayMonth(){return this.currentMoment?this.currentMoment.format("MMMM"):""},currentYear(){return this.currentMoment?this.currentMoment.format("YYYY"):""},currentMonth(){return this.currentMoment?this.currentMoment.format("MM"):""},currentDay(){return this.currentMoment?this.currentMoment.format("DD"):""},days(){if(!this.currentMoment)return;let e=[],t=this.currentMoment.daysInMonth();for(let r=1;r<=t;++r)e.push({value:r,inMonth:!0,unavailable:!1,selected:!1,readonly:!1,moment:Uz()(this.currentMoment).date(r)}),this.checkBySelectDays(r,e);let i=Uz()(this.currentMoment).date(1).day(),a=this.currentMoment.clone().subtract(1,"month");i=0===i?7:i,i=this.settings.global.start_of_week>i?i+7:i;for(let r=0;r0)for(let r of this.limit)switch(r.type){case"fromto":e=this.limitFromTo(r,e);break;case"weekday":e=this.limitWeekDay(r,e);break}return e=this.checkReadOnlyDays(e),e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{prevMonth(){var e=this.currentMoment.clone().subtract(1,"month");e.isBefore(Uz()(),"month")||(this.currentMoment=e,this.showDay())},nextMonth(){this.currentMoment=this.currentMoment.clone().add(1,"month"),this.showDay()},showDay(){this.currentMoment=this.currentMoment?this.currentMoment:Uz()(),this.displayType="day",this.$nextTick((()=>{this.$refs.dayList.focus()}))},checkBySelectDays(e,t){this.modelValue.forEach((i=>{this.currentYear===Uz()(i).format("YYYY")&&this.currentMonth===Uz()(i).format("MM")&&e===Math.ceil(Uz()(i).format("D"))&&(t[e-1].selected=!0)}))},checkReadOnlyDays(e){if(!this.readonly||!this.readonly.length)return e;let t=new Set(this.readonly);return e.map((e=>{!e.unavailable&&e.inMonth&&t.has(e.moment.format($))&&(e.selected=!0,e.readonly=!0)})),e},limitWeekDay(e,t){return t.map((t=>{-1===e.available.indexOf(Math.floor(t.moment.format("d")))&&(t.unavailable=!0)})),t},limitFromTo(e,t){return(e.from||e.to)&&t.map((t=>{this.getLimitCondition(e,t)&&(t.unavailable=!0)})),t},getLimitCondition(e,t){let i=t.moment.clone().startOf("day");return e.from&&!e.to?!i.isAfter(e.from):!e.from&&e.to?!i.isBefore(e.to):!i.isBetween(e.from,e.to)},checkDay(e){if(e.unavailable&&!e.selected||""===e.value||e.readonly)return!1;e.inMonth||("next"===e.action?this.nextMonth():this.prevMonth());let t=Uz()(this.currentYear+"-"+this.currentMonth+"-"+e.value,$).format($),i=this.modelValue.indexOf(t),a=this.modelValue.slice();!0===e.selected?(e.selected=!1,-1!==i&&a.splice(i,1)):(e.selected=!0,-1===i&&a.push(t)),this.picked(a)},showYear(){let e=Uz()(this.currentMoment).year(),t=Uz()().year();e=t{this.addYear()}))},addYear(){let e=this.$refs.yearList;e.focus(),e.addEventListener("scroll",(()=>{if(e.scrollTop({date:e,readonly:!1})));let e=new Set(this.readonly),t=new Set([...this.selectedDates,...this.readonly]);return t=Array.from(t),t.sort(),t.map((t=>({date:t,readonly:e.has(t)})))},date(){return{time:fe()().tz(this.settings.global.timzone_string).format($)}},limit(){return[{type:"fromto",from:fe()().tz(this.settings.global.timezone_string).subtract(1,"day").format($)}]},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{deleteDate(e){let t=this.selectedDates.filter((t=>t!==e));this.selectedDates=t}}};const Vz=(0,he.Z)(Pz,[["render",hz],["__scopeId","data-v-61506d1a"]]);var Wz=Vz,Rz={name:"SettingsBlackout",components:{NoPermission:ia,viewSelector:sz,dateSelectAndList:Wz,SettingsHeader:zO,SettingNotEnabled:GU,Loading:ge},data(){return{moment:fe(),quickSaving:!1,saving:!1,limit:[],isSavedMessageVisible:!1}},mounted(){wa().isEmpty(this.settings.blackout_dates)&&this.fetchBlackoutSettings(),this.getGuides({"ssasc-plugin-screen":K.blackout})},beforeRouteLeave(e,t,i){this.saving=!0,this.updateBlackoutSettings().then((()=>{this.saving=!1,i()}))},watch:{blackout_dates:{handler:function(e,t){e.length!==t.length&&this.quickSaveDates()},deep:!0}},computed:{blackout_dates:{get(){return wa().sortBy(this.settings.blackout_dates.dates,(e=>fe()(e).format($)))},set(e){this.updateBlackoutDates({settings:this.settings,value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("staff",["currentUserCan"])},methods:{quickSaveDates:wa().debounce((function(){this.quickSaving=!0,this.updateBlackoutSettings().then((()=>{this.quickSaving=!1,this.isSavedMessageVisible=!0}))}),2e3),...(0,m.nv)(["fetchSettings"]),...(0,m.OI)("blackout",["updateBlackoutDates"]),...(0,m.nv)("guides",["getGuides"]),...(0,m.nv)("blackout",["fetchBlackoutSettings","updateBlackoutSettings"])}};const Lz=(0,he.Z)(Rz,[["render",tz]]);var jz=Lz;const qz={key:1,style:{padding:"0"}};function Nz(e,t,i,r,l,s){const n=(0,o.up)("no-permission"),d=(0,o.up)("loading"),p=(0,o.up)("settings-header"),f=(0,o.up)("view-selector"),u=(0,o.up)("date-select-and-list"),c=(0,o.up)("setting-not-enabled"),h=(0,o.up)("foxy-snackbar");return(0,o.wg)(),(0,o.iD)("form",{novalidate:"",onSubmit:t[2]||(t[2]=(0,a.iM)(((...t)=>e.submit&&e.submit(...t)),["stop","prevent"]))},[s.currentUserCanBlackout?l.loading?((0,o.wg)(),(0,o.j4)(d,{key:1,message:e.translations.settings.blackout.loading},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[e.currentUserCan("ssa_manage_site_settings")?((0,o.wg)(),(0,o.j4)(p,{key:0})):(0,o.kq)("",!0),e.settings.blackout_dates.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[l.saving?((0,o.wg)(),(0,o.j4)(d,{key:0,message:e.translations.settings.blackout.saving},null,8,["message"])):((0,o.wg)(),(0,o.iD)("fieldset",qz,[(0,o.Wm)(f),(0,o.Wm)(u,{modelValue:s.blackout_dates,"onUpdate:modelValue":[t[0]||(t[0]=e=>s.blackout_dates=e),s.handleUpdatedValue],readonly:s.global_blackout_dates,saving:l.quickSaving},null,8,["modelValue","onUpdate:modelValue","readonly","saving"])]))],64)):((0,o.wg)(),(0,o.j4)(c,{key:2}))],64)):((0,o.wg)(),(0,o.j4)(n,{key:0})),(0,o.Wm)(h,{position:"top center",modelValue:l.isSavedMessageVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>l.isSavedMessageVisible=e),message:e.translations.settings.blackout.saved},null,8,["modelValue","message"])],32)}var $z={name:"SettingsBlackoutStaff",components:{NoPermission:ia,viewSelector:sz,dateSelectAndList:Wz,SettingsHeader:zO,SettingNotEnabled:GU,Loading:ge},props:{staffId:{type:[Number,String],required:!0}},data(){return{loading:!0,limit:[],moment:fe(),quickSaving:!1,saving:!1,staffSwitched:!1,isSavedMessageVisible:!1}},mounted(){"undefined"===typeof this.staff?this.fetchStaff().then((()=>{this.matchCurrentStaff(),this.loading=!1})).catch(((e,t)=>{console.log(t)})):(this.matchCurrentStaff(),this.staffSwitched=!0,this.loading=!1)},beforeRouteEnter(e,t,i){i((a=>{a.navigationGuard(e,t,i)}))},onBeforeRouteUpdate(e,t,i){this.navigationGuard(e,t,i)},beforeRouteLeave(e,t,i){this.saving=!0,this.saveStaff().then((()=>{this.saving=!1,i()}))},watch:{staffId(){this.saving=!0,this.saveStaff().then((()=>{this.saving=!1,this.matchCurrentStaff(),this.staffSwitched=!0}))}},computed:{blackout_dates:{get(){return this.currentStaff&&this.currentStaff.blackout_dates&&this.currentStaff.blackout_dates.dates?wa().sortBy(this.currentStaff.blackout_dates.dates,(e=>fe()(e).format($))):[]},set(e){this.setStaffBlackoutDates(e)}},currentUserCanBlackout(){return this.currentUserCan("ssa_manage_staff")||this.currentUserCan("ssa_manage_staff_blackout_dates")},global_blackout_dates(){return wa().sortBy(this.settings.blackout_dates.dates,(e=>fe()(e).format($)))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("staff",["currentStaff","staff"]),...(0,m.Se)("staff",["currentUserCan","currentUserIsStaff","currentUserStaffId","staffModule"])},methods:{handleUpdatedValue(){this.staffSwitched?this.staffSwitched=!1:this.quickSaveDates()},matchCurrentStaff(){this.setCurrentStaff(this.staff.find((e=>e.id===this.staffId)))},navigationGuard(e,t,i){this.currentUserCan("ssa_manage_staff")?i():this.currentUserIsStaff?this.$router.push("/ssa/settings/blackout/"+this.currentUserStaffId):this.$router.push("/ssa")},quickSaveDates:wa().debounce((function(){this.quickSaving=!0,this.saveStaff().then((()=>{this.quickSaving=!1,this.isSavedMessageVisible=!0}))}),2e3),...(0,m.nv)(["fetchSettings"]),...(0,m.nv)("staff",["fetchStaff","saveStaff"]),...(0,m.OI)("staff",["setCurrentStaff","setStaffBlackoutDates"])}};const Hz=(0,he.Z)($z,[["render",Nz],["__scopeId","data-v-19ef226c"]]);var Zz=Hz,Yz=[{path:"blackout",name:"settings-blackout",component:jz},{path:"blackout/:staffId",name:"settings-blackout-staff",component:Zz,props:!0}];const Kz={class:"notifications-all"};function Jz(e,t,i,a,r,l){const s=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",Kz,[(0,o.Wm)(s,{onSaved:l.backToList},null,8,["onSaved"])])}var Xz={name:"NotificationsAll",data(){return{}},methods:{backToList(){this.$router.push("/ssa/settings/notifications/list")}}};const Qz=(0,he.Z)(Xz,[["render",Jz]]);var eP=Qz;const tP={class:"notifications-settings"},iP={style:{flex:"1"}},aP={class:"md-title"},oP=["src"],rP={class:"md-title"},lP={class:"screen-reader-text"},sP=(0,o._)("span",{style:{flex:"1"}},null,-1),nP={class:"screen-reader-text"},dP=["src"],pP={class:"md-title"},fP=(0,o._)("span",{style:{flex:"1"}},null,-1),uP={class:"screen-reader-text"},cP={key:0,class:"notification-list"};function hP(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-toolbar"),u=(0,o.up)("foxy-card-media"),c=(0,o.up)("foxy-notification"),h=(0,o.up)("foxy-card-header-text"),m=(0,o.up)("foxy-card-header"),g=(0,o.up)("foxy-switch"),_=(0,o.up)("foxy-card-actions"),y=(0,o.up)("foxy-card"),w=(0,o.up)("promo-sms"),x=(0,o.up)("foxy-dialog"),C=(0,o.up)("notification-filter"),v=(0,o.up)("list-item"),b=(0,o.up)("foxy-empty"),B=(0,o.up)("foxy-dialog-title"),S=(0,o.up)("foxy-dialog-content"),k=(0,o.up)("foxy-dialog-button"),A=(0,o.up)("foxy-dialog-footer"),M=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",tP,[(0,o.Wm)(d),e.settings.notifications.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(f,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("div",iP,[(0,o._)("h2",aP,(0,r.zw)(e.translations.settings.notifications.title),1)]),(0,o.Wm)(p,{"data-test":"test-add-new-notification",class:"md-primary",onClick:n.addNotification,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.actions.addNew),1)])),_:1},8,["onClick"])])),_:1}),e.smsModule.installed?((0,o.wg)(),(0,o.j4)(y,{key:0,"md-with-hover":n.sms_enabled,class:(0,r.C_)(["settings",{disabled:!n.sms_enabled}]),onClick:n.maybeEdit},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{class:"md-card-header-flex"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.api.admin_static_url+"/images/settings-sms.svg",alt:"SMS"},null,8,oP)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o._)("h2",rP,(0,r.zw)(e.translations.settings.sms.title),1),e.smsModule.enabled&&!e.smsModule.active?((0,o.wg)(),(0,o.j4)(c,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.noConnection),1)])),_:1})):e.smsModule.enabled&&e.settings.sms.twilio_test_mode_enabled?((0,o.wg)(),(0,o.j4)(c,{key:1,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.testModeWarning),1)])),_:1})):(0,o.kq)("",!0)])),_:1})])),_:1}),(0,o.Wm)(_,{class:"split-actions"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{id:"sms",modelValue:n.sms_enabled,"onUpdate:modelValue":t[0]||(t[0]=e=>n.sms_enabled=e),onClick:(0,a.iM)(n.doNothing,["stop"])},{default:(0,o.w5)((()=>[(0,o._)("span",lP,(0,r.zw)(e.translations.settings.enable)+" "+(0,r.zw)(e.translations.settings.sms.title),1)])),_:1},8,["modelValue","onClick"]),sP,(0,o.Wm)(p,{onClick:n.maybeEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit)+" ",1),(0,o._)("div",nP,(0,r.zw)(e.translations.settings.sms.title),1)])),_:1},8,["onClick"])])),_:1})])),_:1},8,["md-with-hover","class","onClick"])):(0,o.kq)("",!0),e.smsModule.installed?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(y,{key:1,"md-with-hover":n.sms_enabled,class:"settings disabled",onClick:n.showUpgrade},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{class:"md-card-header-flex"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o._)("img",{src:e.api.admin_static_url+"/images/settings-sms.svg",alt:"SMS"},null,8,dP)])),_:1}),(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o._)("h2",pP,(0,r.zw)(e.translations.settings.sms.title),1)])),_:1})])),_:1}),(0,o.Wm)(_,{class:"split-actions"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{disabled:""}),fP,(0,o.Wm)(p,{onClick:n.showUpgrade},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.actions.edit)+" ",1),(0,o._)("div",uP,(0,r.zw)(e.translations.settings.sms.title),1)])),_:1},8,["onClick"])])),_:1})])),_:1},8,["md-with-hover","onClick"])),(0,o.Wm)(x,{ref:"upgradeSMS"},{default:(0,o.w5)((()=>[(0,o.Wm)(w,{"upgrade-url-params":s.smsUpgradeParams,dismissable:!1,onPromoClicked:n.closeDialog},null,8,["upgrade-url-params","onPromoClicked"])])),_:1},512),e.settings.notifications.notifications.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(C),e.filteredNotifications.length?((0,o.wg)(),(0,o.iD)("ul",cP,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.filteredNotifications,(e=>((0,o.wg)(),(0,o.j4)(v,{key:e.id,notification:e,onEdit:n.editNotification,onClone:n.cloneNotification,onDelete:n.confirmDelete},null,8,["notification","onEdit","onClone","onDelete"])))),128))])):((0,o.wg)(),(0,o.j4)(b,{key:1,label:e.translations.settings.notifications.filter.empty_label,description:e.translations.settings.notifications.filter.empty_desc},null,8,["label","description"]))],64)):((0,o.wg)(),(0,o.j4)(b,{key:3,label:e.translations.settings.notifications.empty},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{mode:"raised",icon:"add",class:"md-primary",onClick:n.addNotification},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.actions.addNew),1)])),_:1},8,["onClick"])])),_:1},8,["label"])),(0,o.Wm)(x,{ref:"confirmDelete","data-test":"test-confirm-delete-nofifications"},{default:(0,o.w5)((()=>[(0,o.Wm)(B,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.confirmDelete),1)])),_:1}),s.deletedId||0===s.deletedId?((0,o.wg)(),(0,o.j4)(S,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.settings.notifications.notifications[n.deletedIndex].title),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(A,null,{default:(0,o.w5)((()=>[(0,o.Wm)(k,{action:"dismiss",onClick:n.cancelDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.confirmDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(k,{action:"accept",onClick:n.deleteNotification},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.confirmDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),(0,o.Wm)(x,{ref:"enableSetting"},{default:(0,o.w5)((()=>[(0,o.Wm)(B,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.title),1)])),_:1}),(0,o.Wm)(S,null,{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.settings.disabledWarning),1)])),_:1}),(0,o.Wm)(A,null,{default:(0,o.w5)((()=>[(0,o.Wm)(k,{action:"dismiss",onClick:n.closeDialogs},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(k,{action:"accept",class:"md-primary",onClick:n.enableThis},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.enable),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)],64)):((0,o.wg)(),(0,o.j4)(M,{key:1}))])}const mP={class:"screen-reader-text"},gP={class:"md-list-text-container"};function _P(e,t,i,a,l,s){const n=(0,o.up)("foxy-switch"),d=(0,o.up)("foxy-icon"),p=(0,o.up)("foxy-icon-button"),f=(0,o.up)("foxy-list-item"),u=(0,o.up)("foxy-menu"),c=(0,o.up)("foxy-menu-anchor");return(0,o.wg)(),(0,o.iD)("li",{class:(0,r.C_)(["notification-list-item",{"foxy-saving":l.saving}])},[(0,o.Wm)(n,{id:"notification-"+i.notification.id,modelValue:s.notificationActive,"onUpdate:modelValue":t[0]||(t[0]=e=>s.notificationActive=e),disabled:l.saving},{default:(0,o.w5)((()=>[(0,o._)("span",mP,(0,r.zw)(s.displayTitle(i.notification))+" "+(0,r.zw)(e.translations.settings.notifications.triggers[i.notification.trigger]),1)])),_:1},8,["id","modelValue","disabled"]),(0,o._)("div",{class:"md-list-item-container",onClick:t[1]||(t[1]=(...e)=>s.edit&&s.edit(...e))},[(0,o._)("div",gP,[(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(s.displayTitle(i.notification))+" ",1),e.smsModule.active?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},["email"===i.notification.type?((0,o.wg)(),(0,o.j4)(d,{key:0,class:"small md-primary",icon:"email"})):"sms"===i.notification.type?((0,o.wg)(),(0,o.j4)(d,{key:1,class:"small md-primary",icon:"sms"})):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0)]),(0,o._)("span",null,[e.remindersInstalled&&i.notification.duration>0&&i.notification.when?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.displayDuration(i.notification.duration)+" "+e.translations.settings.notifications.when[i.notification.when].toLowerCase()+" "),1)],64)):(0,o.kq)("",!0),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.notifications.triggers[i.notification.trigger]),1)])])]),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{onClick:t[2]||(t[2]=e=>l.openMenu=!0)},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"settings"})])),_:1}),(0,o.Wm)(u,{modelValue:l.openMenu,"onUpdate:modelValue":t[3]||(t[3]=e=>l.openMenu=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{onClick:s.edit},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:1},8,["onClick"]),(0,o.Wm)(f,{onClick:s.clone},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"content_copy"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.clone),1)])),_:1},8,["onClick"]),(0,o.Wm)(f,{onClick:s.deleteThis},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:1},8,["onClick"])])),_:1},8,["modelValue"])])),_:1})],2)}var yP={name:"NotificationListItem",props:["notification"],data(){return{saving:!1,openMenu:!1}},computed:{notificationActive:{get(){return!Object.prototype.hasOwnProperty.call(this.notification,"active")||this.notification.active},set(e){let t=wa().cloneDeep(this.notification);t.active=e,this.setSingleNotification({id:this.notification.id,notification:t,settings:this.settings,timestampFormat:this.timestampFormat}),this.saving=!0,this.saveNotificationSingle(this.notification.id).then((()=>{this.saving=!1}))}},...(0,m.rn)(["settings","timestampFormat"]),...(0,m.rn)("translations",["translations"]),...(0,m.Se)(["displayDuration"]),...(0,m.Se)("notifications",["remindersInstalled","smsModule"])},methods:{clone(){this.$emit("clone",this.notification.id)},deleteThis(){console.log("list item is emitting delete",this.notification.id),this.$emit("delete",this.notification.id)},displayTitle(){return this.notification.title?this.notification.title:this.notification.subject},edit(){this.$emit("edit",this.notification.id)},...(0,m.nv)("notifications",["saveNotificationSingle"]),...(0,m.OI)("notifications",["setSingleNotification"])}};const wP=(0,he.Z)(yP,[["render",_P]]);var xP=wP;const CP={class:"notification-filter"},vP=(0,o._)("div",{style:{flex:"1"}},null,-1),bP={key:0,class:"appointment-filter-bar",ref:"filterToolbar"},BP={class:"md-subheading"},SP=(0,o._)("div",{class:"clear"},null,-1),kP={class:"appointment-filter-bar-wrap"},AP={key:0,class:"filter-field"},MP={class:"filter-field"},DP={class:"appointment-filter-bar-wrap"},TP={class:"filter-field"},OP={class:"filter-field"},GP={class:"filter-button"};function EP(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-toolbar"),p=(0,o.up)("foxy-select-multiple");return(0,o.wg)(),(0,o.iD)("div",CP,[(0,o.Wm)(d,{class:"md-transparent"},{default:(0,o.w5)((()=>[vP,(0,o.Wm)(n,{class:"md-primary",onClick:s.toggleFilters,icon:"filter_list"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.filter.filter),1)])),_:1},8,["onClick"])])),_:1}),l.openFilters?((0,o.wg)(),(0,o.iD)("fieldset",bP,[(0,o._)("legend",BP,(0,r.zw)(e.translations.settings.notifications.filter.legend),1),SP,(0,o._)("div",kP,[e.smsModule.enabled?((0,o.wg)(),(0,o.iD)("div",AP,[(0,o.Wm)(p,{options:s.whoReceivesOptions,name:"notification-type",id:"notification-type",modelValue:s.filterNotificationType,"onUpdate:modelValue":t[0]||(t[0]=e=>s.filterNotificationType=e),label:e.filter.notification_type.length?e.translations.settings.notifications.filter.fields.type+" ("+e.filter.notification_type.length+" "+e.translations.settings.notifications.filter.selected+")":e.translations.settings.notifications.filter.fields.type},null,8,["options","modelValue","label"])])):(0,o.kq)("",!0),(0,o._)("div",MP,[(0,o.Wm)(p,{options:s.editableAppointmentTypesOptions,name:"appointment-type",id:"appointment-type",modelValue:s.filterAppointmentType,"onUpdate:modelValue":t[1]||(t[1]=e=>s.filterAppointmentType=e),label:e.filter.appointment_type.length?e.translations.settings.notifications.filter.fields.appointment_type+" ("+e.filter.appointment_type.length+" "+e.translations.settings.notifications.filter.selected+")":e.translations.settings.notifications.filter.fields.appointment_type},null,8,["options","modelValue","label"])])]),(0,o._)("div",DP,[(0,o._)("div",TP,[(0,o.Wm)(p,{options:s.notificationTriggersOptions,name:"trigger",id:"trigger",modelValue:s.filterTrigger,"onUpdate:modelValue":t[2]||(t[2]=e=>s.filterTrigger=e),label:e.filter.trigger.length?e.translations.settings.notifications.fields.trigger+" ("+e.filter.trigger.length+" "+e.translations.settings.notifications.filter.selected+")":e.translations.settings.notifications.fields.trigger},null,8,["options","modelValue","label"])]),(0,o._)("div",OP,[(0,o.Wm)(p,{options:s.sentToOptionsSelectOptions,name:"sent-to",id:"sent-to",modelValue:s.filterSentTo,"onUpdate:modelValue":t[3]||(t[3]=e=>s.filterSentTo=e),label:e.filter.sent_to.length?e.translations.settings.notifications.fields.sentTo+" ("+e.filter.sent_to.length+" "+e.translations.settings.notifications.filter.selected+")":e.translations.settings.notifications.fields.sentTo},null,8,["options","modelValue","label"])]),(0,o._)("div",GP,[(0,o.Wm)(n,{class:"md-primary",onClick:s.resetFilter,disabled:!e.filterApplied,icon:"delete_sweep"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.filter.reset),1)])),_:1},8,["onClick","disabled"])])])],512)):(0,o.kq)("",!0)])}var UP={name:"FilterNotifications",data(){return{openFilters:!1,notificationTriggers:v}},beforeMount(){this.remindersInstalled&&(this.notificationTriggers=b)},mounted(){},computed:{filterAppointmentType:{get(){return this.filter.appointment_type},set(e){this.setFilter({key:"appointment_type",value:e})}},filterNotificationType:{get(){return this.filter.notification_type},set(e){this.setFilter({key:"notification_type",value:e})}},filterSentTo:{get(){return this.filter.sent_to},set(e){this.setFilter({key:"sent_to",value:e})}},filterTrigger:{get(){return this.filter.trigger},set(e){this.setFilter({key:"trigger",value:e})}},whoReceivesOptions(){return[{value:"email",label:this.translations.settings.notifications.fields.email},{value:"sms",label:this.translations.settings.notifications.fields.sms}]},editableAppointmentTypesOptions(){return this.editableAppointmentTypes.map((e=>({value:e.id,label:e.title})))},notificationTriggersOptions(){return this.notificationTriggers.map((e=>({value:e,label:this.translations.settings.notifications.triggers[e]})))},sentToOptionsSelectOptions(){return this.sentToOptions.map((e=>({value:e,label:e})))},...(0,m.rn)("notifications",["filter"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("notifications",["filterApplied","remindersInstalled","sentToOptions","smsModule"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes"])},methods:{resetFilter(){this.setFilter(A),this.openFilters=!1},toggleFilters(){this.openFilters=!this.openFilters},...(0,m.OI)("notifications",["setFilter"])}};const FP=(0,he.Z)(UP,[["render",EP]]);var IP=FP;const zP=["href"],PP=["src"],VP={class:"md-title"};function WP(e,t,i,a,l,s){const n=(0,o.up)("foxy-card-media"),d=(0,o.up)("foxy-card-header"),p=(0,o.up)("foxy-card-area"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-card-actions"),c=(0,o.up)("foxy-card-content"),h=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.j4)(h,{"md-with-hover":!0,transition:"fade","md-column":"",class:"limited-width",onClick:s.promoClicked},{default:(0,o.w5)((()=>[(0,o.Wm)(n,null,{default:(0,o.w5)((()=>[(0,o._)("a",{href:e.upgradeUrlParsed(e.proUpgradeLink,i.upgradeUrlParams),target:"_blank"},[(0,o._)("img",{src:e.api.admin_static_url+"/images/promo-sms.svg",alt:"Simply Schedule Appointments Plus",class:"promo-img promo-plus"},null,8,PP)],8,zP)])),_:1}),(0,o.Wm)(d,null,{default:(0,o.w5)((()=>[(0,o._)("h2",VP,(0,r.zw)(e.translations.promo.smsUpgrade.title),1)])),_:1}),(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{"md-inset":""},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.promo.smsUpgrade.text),1)])),_:1}),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{mode:"raised",class:"md-accent",href:e.upgradeUrlParsed(e.proUpgradeLink,i.upgradeUrlParams),target:"_blank"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.promo.smsUpgrade.cta),1)])),_:1},8,["href"])])),_:1})])),_:1})])),_:1},8,["onClick"])}var RP={name:"PromoSms",store:$J,props:{dismissable:{type:Boolean,default:!0},upgradeUrlParams:{type:Object,default(){return{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"sms",utm_content:"sms-pro-popup"}}}},data(){return{slug:"promo-sms"}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api"]),...(0,m.Se)(["upgradeUrlParsed","proUpgradeLink"])},methods:{promoClicked(){this.$emit("promoClicked")}}};const LP=(0,he.Z)(RP,[["render",WP]]);var jP=LP,qP={name:"SettingsNotifications",components:{SettingsHeader:zO,ListItem:xP,SettingNotEnabled:GU,NotificationFilter:IP,PromoSms:jP},data(){return{deletedId:null,smsUpgradeParams:{utm_source:"plugin",utm_medium:"ads",utm_campaign:"upgrade-pro",utm_term:"sms",utm_content:"sms-settings-card-popup"}}},watch:{sms_enabled(){this.getNotificationGuides()}},mounted(){this.getNotificationGuides()},computed:{deletedIndex(){if(this.deletedId)return this.settings.notifications.notifications.findIndex((e=>e.id===this.deletedId))},sms_enabled:{get(){return!!Object.prototype.hasOwnProperty.call(this.settings,"sms")&&(!!this.settings.sms.enabled&&!!this.settings.installed.sms)},set(e){this.setSmsEnabled({settings:this.settings,payload:e}),this.saveSmsSettings()}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.Se)("notifications",["filteredNotifications","remindersInstalled","smsModule"])},methods:{addNotification(){this.$router.push({name:"notification-single"})},cancelDelete(){this.$refs["confirmDelete"].close()},cloneNotification(e){this.cloneSettingsNotification({settings:this.settings,id:e});let t=this.settings.notifications.notifications[this.settings.notifications.notifications.length-1].id;this.saveNotificationSingle(t),this.$router.push({name:"notification-single",params:{id:t}})},closeDialogs(){this.$refs["enableSetting"].close()},confirmDelete(e){this.deletedId=e,this.$refs["confirmDelete"].open()},deleteNotification(){this.deleteNotificationSingle(this.deletedId),this.deletedId=null,this.$refs["confirmDelete"].close()},displayTitle(e){return e.title?e.title:e.subject},doNothing(){},editNotification(e){this.$router.push({name:"notification-single",params:{id:e}})},editSms(){this.$router.push("/ssa/settings/notifications/sms")},enableThis(){this.sms_enabled=!0,this.editSms()},maybeEdit(){this.sms_enabled?this.editSms():this.$refs["enableSetting"].open()},getNotificationGuides(){let e=[K.notifications.list];this.smsModule.installed&&this.smsModule.enabled&&e.push(K.notifications.sms_enabled),this.getGuides({"ssasc-plugin-screen":e})},closeDialog(){this.$refs["upgradeSMS"].close()},showUpgrade(){this.$refs["upgradeSMS"].open()},...(0,m.OI)("notifications",["cloneSettingsNotification","deleteSettingsNotification","setSmsEnabled"]),...(0,m.nv)("notifications",["deleteNotificationSingle","saveNotificationSingle","saveSmsSettings"]),...(0,m.nv)("guides",["getGuides"])}};const NP=(0,he.Z)(qP,[["render",hP]]);var $P=NP;const HP={class:"md-title"},ZP={key:0,class:"check-list"},YP={key:0,class:"link-hint"},KP={key:0,class:"md-error"},JP={key:3,style:{"margin-top":"12px"}},XP={key:4,class:"md-fieldset contains-layout"},QP={class:"customised-notification-list"},eV={href:"https://simplyscheduleappointments.com/guides/scheduled-event-and-cron-errors/",target:"_blank"},tV={key:0,class:"md-error"},iV={class:"foxy-list-default"},aV={key:0},oV={class:"md-fieldset has-top-menu required","data-test":"test-notification-preview-fieldset"},rV={class:"button-bar"};function lV(e,t,i,l,s,n){const d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-switch"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-radio"),c=(0,o.up)("foxy-checkbox-multi"),h=(0,o.up)("foxy-icon"),m=(0,o.up)("router-link"),g=(0,o.up)("foxy-chip-set-editable"),_=(0,o.up)("foxy-list-item"),y=(0,o.up)("foxy-select"),w=(0,o.up)("duration"),x=(0,o.up)("foxy-layout"),C=(0,o.up)("foxy-notification"),v=(0,o.up)("foxy-checkbox"),b=(0,o.up)("token-text"),B=(0,o.up)("preview"),S=(0,o.up)("foxy-progress-circular"),k=(0,o.up)("notification-details"),A=(0,o.up)("promo-sms"),M=(0,o.up)("foxy-dialog"),D=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{onSubmit:t[19]||(t[19]=(0,a.iM)((()=>{}),["prevent"])),class:"notification-edit"},[(0,o.Wm)(d,{onClick:n.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",HP,[i.id||0===i.id?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(p,{modelValue:n.active,"onUpdate:modelValue":t[0]||(t[0]=e=>n.active=e)},null,8,["modelValue"]),(0,o.Uk)(" "+(0,r.zw)(e.translations.settings.notifications.actions.edit),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.actions.addNew),1)],64))]),(0,o.Wm)(f,{"data-test":"test-notification-title-textfield",valid:s.validTitle,required:"",modelValue:n.title,"onUpdate:modelValue":t[1]||(t[1]=e=>n.title=e),label:e.translations.settings.notifications.fields.title,id:"title",helptext:s.validTitle?"":e.translations.settings.notifications.messages.titleError,"helptext-persistent":"","helptext-validation":""},null,8,["valid","modelValue","label","helptext"]),e.smsModule.active||!e.smsModule.installed?((0,o.wg)(),(0,o.iD)("fieldset",ZP,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.notifications.fields.type),1),(0,o.Wm)(u,{modelValue:n.type,"onUpdate:modelValue":t[2]||(t[2]=e=>n.type=e),id:"type-email",name:"notificationstype",value:"email"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.fields.email),1)])),_:1},8,["modelValue"]),(0,o.Wm)(u,{modelValue:n.type,"onUpdate:modelValue":t[3]||(t[3]=e=>n.type=e),disabled:!e.smsModule.installed,onClick:n.maybeShowUpgrade,id:"type-sms",name:"notificationstype",value:"sms"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.fields.sms)+" ",1),e.smsModule.installed?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("span",YP,(0,r.zw)(e.translations.promo.smsUpgrade.radioHint),1))])),_:1},8,["modelValue","disabled","onClick"])])):(0,o.kq)("",!0),"sms"===n.type?((0,o.wg)(),(0,o.iD)("fieldset",{key:1,"data-test":"test-notification-sms-sentto-fieldset",class:(0,r.C_)(["md-fieldset check-list",{"md-fieldset-invalid":!s.validSmsTo}])},[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.notifications.fields.smsTo),1),s.validSmsTo?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",KP,(0,r.zw)(e.translations.settings.notifications.messages.smsToError),1)),(0,o._)("ul",null,[(0,o._)("li",null,[e.settings.global.admin_phone?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"mdc-theme-name--light-green",id:"admin-phone",modelValue:n.sms_to,"onUpdate:modelValue":t[4]||(t[4]=e=>n.sms_to=e),value:"{{ admin_phone }}"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.general.phone),1)])),_:1},8,["modelValue"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(h,{theme:"amber",icon:"warning"}),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.messages.noAdminPhone)+" ",1),(0,o.Wm)(m,{to:"/ssa/settings/general"},{default:(0,o.w5)((()=>[(0,o.Uk)("Add phone")])),_:1})])],64))]),(0,o._)("li",null,[e.settings.installed.staff&&e.settings.staff.enabled?((0,o.wg)(),(0,o.j4)(c,{key:0,class:"mdc-theme-name--light-green",id:"team-member-phone",modelValue:n.sms_to,"onUpdate:modelValue":t[5]||(t[5]=e=>n.sms_to=e),value:"{{ team_member_phone }}"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.team_member_phone),1)])),_:1},8,["modelValue"])):(0,o.kq)("",!0)]),(0,o._)("li",null,[n.noPhone?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(h,{theme:"amber",icon:"warning"}),(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.messages.noCustomerEmail)+" ",1),(0,o.Wm)(m,{to:"/ssa/appointment-types/edit/customerInfo"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.advanced_scheduling.editTypes),1)])),_:1})])],64)):((0,o.wg)(),(0,o.j4)(c,{key:1,class:"mdc-theme-name--light-green",id:"customer-phone",modelValue:n.sms_to,"onUpdate:modelValue":t[6]||(t[6]=e=>n.sms_to=e),value:"{{ customer_phone }}"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.customer_phone),1)])),_:1},8,["modelValue"]))])])],2)):((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(g,{"data-test":"test-notification-email-sentto-field",modelValue:n.sent_to,"onUpdate:modelValue":t[7]||(t[7]=e=>n.sent_to=e),"error-text":e.translations.settings.notifications.messages.sentToError,label:e.translations.settings.notifications.fields.sentTo,"anchor-text":e.translations.settings.notifications.fields.anchorText,options:s.emailOptions,theme:"light-green",onValidateBeforeAdd:n.validateTo,"valid-add":s.validTo,required:!0},null,8,["modelValue","error-text","label","anchor-text","options","onValidateBeforeAdd","valid-add"]),(0,o._)("p",null,[(0,o.Wm)(d,{onClick:n.toggleShowCc,"trailing-icon":s.showCc?"expand_less":"expand_more"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.showCc?e.translations.settings.notifications.hideCcBccReplyToLabel:e.translations.settings.notifications.showCcBccReplyToLabel),1)])),_:1},8,["onClick","trailing-icon"])]),s.showCc?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(g,{modelValue:n.cc,"onUpdate:modelValue":t[8]||(t[8]=e=>n.cc=e),"error-text":e.translations.settings.notifications.messages.sentToError,label:e.translations.settings.notifications.fields.cc,"anchor-text":e.translations.settings.notifications.fields.anchorText,options:s.emailOptions,theme:"light-green",onValidateBeforeAdd:n.validateCc,"valid-add":s.validCc},null,8,["modelValue","error-text","label","anchor-text","options","onValidateBeforeAdd","valid-add"]),(0,o.Wm)(g,{modelValue:n.bcc,"onUpdate:modelValue":t[9]||(t[9]=e=>n.bcc=e),"error-text":e.translations.settings.notifications.messages.sentToError,label:e.translations.settings.notifications.fields.bcc,"anchor-text":e.translations.settings.notifications.fields.anchorText,options:s.emailOptions,theme:"light-green",onValidateBeforeAdd:n.validateBcc,"valid-add":s.validBcc},null,8,["modelValue","error-text","label","anchor-text","options","onValidateBeforeAdd","valid-add"]),(0,o.Wm)(g,{modelValue:n.replyTo,"onUpdate:modelValue":t[10]||(t[10]=e=>n.replyTo=e),"error-text":e.translations.settings.notifications.messages.sentToError,label:e.translations.settings.notifications.fields.replyTo,"anchor-text":e.translations.settings.notifications.fields.anchorText,options:s.emailOptions,theme:"light-green","help-text":e.translations.settings.notifications.messages.replyToHelpText,onValidateBeforeAdd:n.validateReplyTo,"valid-add":s.validReplyTo},null,8,["modelValue","error-text","label","anchor-text","options","help-text","onValidateBeforeAdd","valid-add"])],64)):(0,o.kq)("",!0)],64)),e.remindersInstalled?((0,o.wg)(),(0,o.iD)("fieldset",XP,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.notifications.fields.triggerLegend),1),(0,o.Wm)(x,{"md-gutter":!0},{default:(0,o.w5)((()=>[(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,{"allow-null":!0,"error-text":n.durationError,modelValue:n.duration,"onUpdate:modelValue":t[12]||(t[12]=e=>n.duration=e)},null,8,["error-text","modelValue"])])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(y,{label:e.translations.settings.notifications.fields.when,modelValue:n.when,"onUpdate:modelValue":t[13]||(t[13]=e=>n.when=e),disabled:n.disableWhen},{default:(0,o.w5)((()=>[(0,o.Wm)(_,{role:"option","data-value":"after"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.when.after),1)])),_:1}),(0,o.Wm)(_,{role:"option","data-value":"before"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.when.before),1)])),_:1})])),_:1},8,["label","modelValue","disabled"])])),_:1}),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(y,{label:e.translations.settings.notifications.fields.trigger,modelValue:n.trigger,"onUpdate:modelValue":t[14]||(t[14]=e=>n.trigger=e),required:!0},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.notificationTriggers,(t=>((0,o.wg)(),(0,o.j4)(_,{"data-value":t,key:t,role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.triggers[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue"])])),_:1})])),_:1}),(0,o.Wm)(a.uT,{name:"fade"},{default:(0,o.w5)((()=>[n.showWarning?((0,o.wg)(),(0,o.j4)(C,{key:0,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o._)("ul",QP,[(0,o._)("li",null,(0,r.zw)(e.translations.settings.notifications.warnings.cronWarning),1),(0,o._)("li",null,(0,r.zw)(e.translations.settings.notifications.warnings.cronWarningNoShow),1)]),(0,o._)("a",eV,(0,r.zw)(e.translations.settings.notifications.warnings.cronLinkText),1)])),_:1})):(0,o.kq)("",!0)])),_:1})])):((0,o.wg)(),(0,o.iD)("div",JP,[(0,o.Wm)(y,{label:e.translations.settings.notifications.fields.trigger,id:"trigger",modelValue:n.trigger,"onUpdate:modelValue":t[11]||(t[11]=e=>n.trigger=e),required:"",helptext:e.translations.settings.notifications.messages.triggerError,"helptext-validation":s.validTrigger},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.notificationTriggers,(t=>((0,o.wg)(),(0,o.j4)(_,{key:t,role:"option","data-value":t},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.triggers[t]),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["label","modelValue","helptext","helptext-validation"])])),(0,o._)("fieldset",{class:(0,r.C_)(["md-fieldset",{"md-fieldset-invalid":!s.validAppointmentTypes}])},[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1),s.validAppointmentTypes?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",tV,(0,r.zw)(e.translations.settings.notifications.messages.appointmentTypesError),1)),n.noPhone?((0,o.wg)(),(0,o.j4)(C,{key:1,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.noPhoneFields),1)])),_:1})):n.notAllPhone?((0,o.wg)(),(0,o.j4)(C,{key:2,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.onlyPhoneFields),1)])),_:1})):(0,o.kq)("",!0),(0,o._)("ul",iV,[n.notAllPhone?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("li",aV,[(0,o.Wm)(v,{modelValue:s.all,"onUpdate:modelValue":t[15]||(t[15]=e=>s.all=e),label:e.translations.settings.appointmentTypeAll,onToggle:n.toggleAll},null,8,["modelValue","label","onToggle"])])),s.all?(0,o.kq)("",!0):((0,o.wg)(!0),(0,o.iD)(o.HY,{key:1},(0,o.Ko)(n.appointmentTypeOptions,(e=>((0,o.wg)(),(0,o.iD)("li",{key:e.id},[(0,o.Wm)(v,{id:"type-"+e.id,name:"appointment-types",value:e.id.toString(),modelValue:n.appointment_types,"onUpdate:modelValue":t[16]||(t[16]=e=>n.appointment_types=e),label:e.title,class:"md-primary"},null,8,["id","value","modelValue","label"])])))),128))])],2),"email"===n.type?((0,o.wg)(),(0,o.iD)("fieldset",{key:5,"data-test":"test-notification-subject-fieldset",class:(0,r.C_)(["md-fieldset has-top-menu required",{"md-fieldset-invalid":!s.validSubject}])},[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.notifications.fields.subject),1),(0,o.Wm)(b,{options:s.notificationTokens,required:!0,onValidate:n.validateSubject,modelValue:n.subject,"onUpdate:modelValue":t[17]||(t[17]=e=>n.subject=e)},null,8,["options","onValidate","modelValue"])],2)):(0,o.kq)("",!0),(0,o._)("fieldset",{"data-test":"test-notification-message-fieldset",class:(0,r.C_)(["md-fieldset has-top-menu required",{"md-fieldset-invalid":!s.validMessage}])},[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.notifications.fields.message),1),(0,o.Wm)(b,{options:s.notificationTokens,required:!0,onValidate:n.validateMessage,modelValue:n.message,"onUpdate:modelValue":t[18]||(t[18]=e=>n.message=e),"show-preview":!1},null,8,["options","onValidate","modelValue"])],2),(0,o._)("fieldset",oV,[(0,o.Wm)(B,{message:n.message,"selected-appointment-types":n.appointment_types},null,8,["message","selected-appointment-types"])]),(0,o._)("div",rV,[(0,o.Wm)(d,{mode:"secondary",onClick:n.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(d,{"data-test":"test-notification-save",mode:"raised",onClick:n.saveNotification,disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"]),s.saving?((0,o.wg)(),(0,o.j4)(S,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)]),(0,o.Wm)(k,{title:e.translations.settings.notifications.tokenDetailsTitle,description:e.translations.settings.notifications.tokenDetails},null,8,["title","description"]),(0,o.Wm)(M,{ref:"upgradeSms"},{default:(0,o.w5)((()=>[(0,o.Wm)(A,{dismissable:!1,onPromoClicked:n.closeDialog},null,8,["onPromoClicked"])])),_:1},512)],32),(0,o.Wm)(D,{ref:"confirmLeaveDirty",title:e.translations.settings.notifications.confirmIgnoreChangesTitle,"content-html":e.translations.settings.notifications.confirmIgnoreChangesContent,"ok-text":e.translations.settings.notifications.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.notifications.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}function sV(e){return{version:"__VERSION__",install:t=>{Object.entries(e).forEach((([e,i])=>{const a=e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),o=t._context.components[a];o||t.component(a,i)}))},components:e}}function nV(e,t,i,a=!1){if(e){t=t.toLowerCase();const o="function"===typeof CustomEvent?new CustomEvent(t,{detail:i,bubbles:a}):dV(t,a,i);e.dispatchEvent(o)}}const dV=(e,t,i)=>{const a=document.createEvent("CustomEvent");return a.initCustomEvent(e,t,!1,i)},pV={name:"custom-link",props:{tag:String,to:[String,Object],href:String,target:String},setup(e,{slots:t,attrs:i}){const a={};return e.href&&""!==e.href&&(a.href=e.href,a.target=e.target),()=>{const{to:r,href:l}=e,s=(0,o.LL)("router-link");if(r&&s){const a=e.tag??"a";return(0,o.h)(s,{custom:!0,...i,to:r},{default:e=>(0,o.h)(a,{...i,onClick:t=>{t.__itemId=i.itemId,e.navigate(t)}},t.default?.())})}const n=l?"a":e.tag??"a",d=l?"link":"button"!==n?"button":null,p=t.default?.();return(0,o.h)(n,{...i,...a,role:d},{default:()=>p})}}},fV={inheritAttrs:!1},uV=["primary","secondary","background","surface","on-primary","on-secondary","on-surface","primary-bg","secondary-bg","text-primary-on-light","text-secondary-on-light","text-hint-on-light","text-disabled-on-light","text-icon-on-light","text-primary-on-dark","text-secondary-on-dark","text-hint-on-dark","text-disabled-on-dark","text-icon-on-dark"],cV={props:{theming:{type:String,default:""},theme:{type:String,default:"default"}},mounted(){uV.indexOf(this.theming)>-1&&this.$el.classList.add("mdc-theme--"+this.theming),this.theme&&this.$el.classList.add("mdc-theme-name--"+this.theme)}},hV=["id"],mV={class:"mdc-evolution-chip__cell mdc-evolution-chip__cell--primary",role:"gridcell"},gV={class:"mdc-evolution-chip__action mdc-evolution-chip__action--primary",type:"button",tabindex:"0","data-mdc-deletable":"true","aria-label":"Press backspace or delete to remove"},_V=(0,o._)("span",{class:"mdc-evolution-chip__ripple mdc-evolution-chip__ripple--primary"},null,-1),yV={class:"mdc-evolution-chip__text-label"},wV=(0,o._)("span",{class:"mdc-evolution-chip__ripple mdc-evolution-chip__ripple--trailing"},null,-1),xV={class:"mdc-evolution-chip__icon mdc-evolution-chip__icon--trailing material-icons"};function CV(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("span",{class:(0,r.C_)(["mdc-evolution-chip mdc-theme-name--light-green",{"mdc-ripple-upgraded--background-focused":i.focused}]),role:"presentation",id:s.id},[(0,o._)("span",mV,[(0,o._)("button",gV,[_V,(0,o._)("span",yV,(0,r.zw)(i.value),1)])]),i.trailingIcon?((0,o.wg)(),(0,o.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$emit("remove",s.id)),class:"mdc-evolution-chip__action mdc-evolution-chip__action--trailing",type:"button",tabindex:"-1","data-mdc-deletable":"true","aria-hidden":"true"},[wV,(0,o._)("span",xV,(0,r.zw)(i.trailingIcon),1)])):(0,o.kq)("",!0)],10,hV)}var vV={name:"MdcChp",mixins:[cV,fV],props:{value:{type:String,default:""},focused:[Boolean],leadingIcon:{type:String,default:""},trailingIcon:{type:String,default:""}},data(){return{}},computed:{id(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}}};const bV=(0,he.Z)(vV,[["render",CV]]);var BV=bV;const SV={class:"mdc-evolution-chip-set__chips",ref:"chips",role:"presentation"};function kV(e,t,i,a,l,s){const n=(0,o.up)("foxy-chip");return(0,o.wg)(),(0,o.iD)("div",{class:(0,r.C_)(l.classes),role:"listbox","aria-orientation":"horizontal","aria-multiselectable":"true"},[(0,o._)("span",SV,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.chips,((t,a)=>((0,o.wg)(),(0,o.j4)(n,{theming:e.theming,theme:e.theme,"trailing-icon":i.trailingIcon,"leading-icon":i.leadingIcon,value:t,focused:i.focused===t,onRemove:s.handleRemove,key:a},null,8,["theming","theme","trailing-icon","leading-icon","value","focused","onRemove"])))),128))],512)],2)}var AV=i(88676),MV={name:"MdcChipSet",props:{chips:{type:Array,default(){return[]}},focused:{type:String,default:""},input:[Boolean],newChip:{type:Object,default(){return{}}},trailingIcon:{type:String,default:""},leadingIcon:{type:String,default:""}},mixins:[cV,fV],components:{FoxyChip:BV},data(){return{mdcChipSet:void 0,classes:{"mdc-evolution-chip-set":!0,"mdc-evolution-chip-set--input":this.input}}},watch:{newChip(e){this.handleAdd(e)}},mounted(){this.mdcChipSet=new AV.Q(this.$el),this.mdcChipSet.listen("MDCChipSet:removal",this.handleRemove)},beforeUnmount(){this.mdcChipSet.unlisten("MDCChipSet:removal",this.handleRemove),this.mdcChipSet.destroy()},methods:{handleAdd(e){this.$emit("addChip",e.text)},handleRemove(e){const t=this.$el.querySelector('.mdc-evolution-chip[id="'+e+'"] .mdc-evolution-chip__text-label').innerHTML.trim();this.$emit("removeChip",t)}}};const DV=(0,he.Z)(MV,[["render",kV]]);var TV=DV;const OV=(0,o._)("span",{class:"screen-reader-text"},null,-1),GV=["autocomplete"],EV={class:"screen-reader-text"},UV={class:"helper-text"};function FV(e,t,i,a,l,s){const n=(0,o.up)("foxy-chip-set"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-menu"),u=(0,o.up)("foxy-menu-anchor");return(0,o.wg)(),(0,o.iD)("fieldset",{class:(0,r.C_)(s.containerClasses)},[(0,o._)("legend",null,(0,r.zw)(i.label),1),(0,o._)("div",{class:(0,r.C_)(s.chipContainerClasses),onClick:t[5]||(t[5]=(...e)=>s.focusInput&&s.focusInput(...e))},[(0,o.Wm)(n,{chips:l.componentValue,focused:l.focused,input:!0,"new-chip":l.addedChip,theme:e.theme,theming:e.theming,"trailing-icon":"close",ref:"chipSet",onKeydown:s.backspaceRemoveChip,onRemoveChip:s.removeChip,onAddChip:s.addChip},null,8,["chips","focused","new-chip","theme","theming","onKeydown","onRemoveChip","onAddChip"]),(0,o._)("label",null,[OV,(0,o._)("input",{type:"text",ref:"chipInput",onFocus:t[0]||(t[0]=e=>s.setFocus(!0,e)),onBlur:t[1]||(t[1]=e=>s.setFocus(!1,e)),onKeydown:t[2]||(t[2]=(...e)=>s.handleInput&&s.handleInput(...e)),autocomplete:l.hasFocus?"":"one-time-code"},null,40,GV)]),(0,o.Wm)(u,null,{default:(0,o.w5)((()=>[(0,o.Wm)(d,{class:"as-icon",onClick:t[3]||(t[3]=e=>l.anchorMenuOpen=!0),icon:"email"},{default:(0,o.w5)((()=>[(0,o._)("span",EV,(0,r.zw)(i.anchorText),1)])),_:1}),(0,o.Wm)(f,{modelValue:l.anchorMenuOpen,"onUpdate:modelValue":t[4]||(t[4]=e=>l.anchorMenuOpen=e),onSelect:s.handleTokenSelection},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.displayOptions,(e=>((0,o.wg)(),(0,o.j4)(p,{key:e,"data-value":e},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e),1)])),_:2},1032,["data-value"])))),128))])),_:1},8,["modelValue","onSelect"])])),_:1})],2),(0,o._)("div",UV,[i.validAdd&&i.helpText?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(i.helpText),1)],64)):!i.validAdd&&i.errorText?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(i.errorText),1)],64)):(0,o.kq)("",!0)])],2)}var IV={name:"MdcChipSetEditable",props:{errorText:{type:String,default:""},helpText:{type:String,default:""},label:{type:String,default:""},options:{type:Array,default(){return[]}},required:[Boolean],modelValue:{type:Array,default(){return[]}},validAdd:[Boolean],anchorText:{type:String,default:""}},mixins:[cV],components:{FoxyChipSet:TV},emits:["update:modelValue","validateBeforeAdd"],data(){return{addedChip:null,componentValue:this.modelValue.slice(0),hasFocus:!1,focused:null,anchorMenuOpen:!1}},watch:{modelValue(){this.componentValue=this.modelValue.slice(0)}},computed:{containerClasses(){return{"md-fieldset":!0,"foxy-chip-set-editable":!0,"field-wrapper":!0,"foxy-fieldset-invalid":!this.validAdd,required:this.required}},chipContainerClasses(){return{"editable-chip-set":!0,"has-focus":this.hasFocus}},displayOptions(){return this.options.filter((e=>this.modelValue.indexOf(e)<0))}},methods:{addChip(e){let t=this.modelValue.slice(0);t.push(e),this.$emit("update:modelValue",t)},backspaceRemoveChip(e){"Backspace"!==e.key&&8!==e.keyCode||!document.activeElement.classList.contains("mdc-evolution-chip")||this.removeLastChip()},focusInput(){this.$refs.chipInput.focus(),this.focused=null},handleInput(e){let t=!1,i=e.target.value.trim();if(!i.length)return this.$emit("validateBeforeAdd",""),void("keydown"!==e.type||"Backspace"!==e.key&&8!==e.keyCode||this.focusLastChip());"keydown"!==e.type||"Enter"!==e.key&&13!==e.keyCode&&","!==e.key&&188!==e.keyCode||(t=!0,e.preventDefault()),"blur"===e.type&&(t=!0),t&&(this.$emit("validateBeforeAdd",i),this.$nextTick((()=>{this.validAdd&&(this.addedChip={text:i},e.target.value="")})))},removeChip(e){let t=this.modelValue.findIndex((t=>t===e)),i=this.modelValue.slice(0);i.splice(t,1),this.$emit("update:modelValue",i)},focusLastChip(){if(this.focused)return void this.removeLastChip();let e=this.modelValue[this.modelValue.length-1],t=this.$refs.chipSet.$el,i=t.querySelector(".mdc-evolution-chip:last-child");i&&(this.focused=e,i.focus())},handleTokenSelection({index:e}){let t=this.displayOptions[e];this.addedChip={text:t}},removeLastChip(){this.removeChip(this.focused),this.focusInput()},setFocus(e,t){this.hasFocus=e,e||this.handleInput(t)}}};const zV=(0,he.Z)(IV,[["render",FV]]);var PV=zV;sV({FoxyChip:BV,FoxyChipSet:TV,FoxyChipSetEditable:PV});const VV={key:1,class:"preview-wrapper"},WV={class:"preview-description"},RV={class:"md-title"},LV=["value"],jV=["value"],qV=["innerHTML"];function NV(e,t,i,l,s,n){const d=(0,o.up)("loading"),p=(0,o.up)("foxy-select2"),f=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.iD)("form",{onSubmit:t[2]||(t[2]=(0,a.iM)((()=>{}),["prevent"])),class:"preview"},[s.loading?((0,o.wg)(),(0,o.j4)(d,{key:0,message:e.translations.settings.notifications.preview.gettingAppointments},null,8,["message"])):((0,o.wg)(),(0,o.iD)("div",VV,[(0,o._)("div",WV,[(0,o._)("h3",RV,(0,r.zw)(e.translations.settings.notifications.preview.title),1),n.matchingAppointments.length?((0,o.wg)(),(0,o.j4)(p,{key:0,label:e.translations.settings.notifications.preview.selectAppointment,name:"appointment",id:"appointment",modelValue:s.viewAppointment,"onUpdate:modelValue":[t[0]||(t[0]=e=>s.viewAppointment=e),n.previewAppointment],disabled:s.fetching},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.matchingAppointments,(e=>((0,o.wg)(),(0,o.iD)("option",{key:e.id,value:e.id},(0,r.zw)(e.customer_information.Name),9,LV)))),128))])),_:1},8,["label","modelValue","disabled","onUpdate:modelValue"])):((0,o.wg)(),(0,o.j4)(p,{key:1,label:e.translations.settings.notifications.preview.selectAppointmentType,name:"appointmentType",id:"appointmentType",modelValue:s.viewAppointmentType,"onUpdate:modelValue":[t[1]||(t[1]=e=>s.viewAppointmentType=e),n.previewAppointmentType],disabled:s.fetching},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.appointmentTypes,(e=>((0,o.wg)(),(0,o.iD)("option",{key:e.id,value:e.id},(0,r.zw)(e.title),9,jV)))),128))])),_:1},8,["label","modelValue","disabled","onUpdate:modelValue"])),(0,o._)("p",null,(0,r.zw)(e.translations.settings.notifications.preview.description),1)]),(0,o.Wm)(f,{class:"preview-container"},{default:(0,o.w5)((()=>[s.fetching?((0,o.wg)(),(0,o.j4)(d,{key:0,size:"title",message:e.translations.settings.notifications.preview.formattingPreview},null,8,["message"])):((0,o.wg)(),(0,o.iD)("div",{key:1,class:"preview",innerHTML:e.settings.notifications.preview},null,8,qV))])),_:1})]))],32)}var $V={name:"NotificationPreview",props:["message","selectedAppointmentTypes"],components:{Loading:ge},data(){return{fetching:!1,loading:!0,now:fe().utc().locale("en").format("YYYY-MM-DD"),moment:fe(),viewAppointment:null,viewAppointmentType:null,debouncePreview:null}},mounted(){if(this.upcomingAppointments&&this.upcomingAppointments.length)return this.loading=!1,this.selectDefaultAppointment(),void this.setDebouncePreview();this.fetchAppointments({end_date_min:this.now,order:"ASC",status:["booked"]}).then((()=>{this.loading=!1,this.selectDefaultAppointment(),this.setDebouncePreview()}))},watch:{message(){"function"===typeof this.debouncePreview&&this.debouncePreview()}},computed:{matchingAppointments(){let e=this.upcomingAppointments;return this.selectedAppointmentTypes.length&&(e=e.filter((e=>this.selectedAppointmentTypes.indexOf(e.appointment_type_id)>-1))),wa().sortBy(e,(e=>e.date_created))},appointmentTypes(){let e=this.editableAppointmentTypes;return this.selectedAppointmentTypes.length&&(e=e.filter((e=>this.selectedAppointmentTypes.indexOf(e.id)>-1))),e},showTz(){let e=this.detectedTimezone;return e!==this.settings.global.timezone_string},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings","timestampFormat"]),...(0,m.Se)(["detectedTimezone"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes"]),...(0,m.Se)("appointments",["upcomingAppointments"])},methods:{previewAppointment(){this.viewAppointment?(this.fetching=!0,this.fetchNotificationPreview({template:this.message,appointment_id:this.viewAppointment}).then((()=>{this.fetching=!1}))):this.selectDefaultAppointment()},previewAppointmentType(){this.viewAppointmentType?(this.fetching=!0,this.fetchNotificationPreview({template:this.message,appointment_type_id:this.viewAppointmentType}).then((()=>{this.fetching=!1}))):this.selectDefaultAppointment()},selectDefaultAppointment(){this.matchingAppointments.length?(this.viewAppointment=this.matchingAppointments[0].id,this.previewAppointment()):this.selectedAppointmentTypes.length?(this.viewAppointmentType=this.selectedAppointmentTypes[0],this.previewAppointmentType()):(this.viewAppointmentType=this.appointmentTypes[0].id,this.previewAppointmentType())},setDebouncePreview(){this.debouncePreview=wa().debounce((()=>{this.matchingAppointments.length?this.previewAppointment():this.previewAppointmentType()}),2e3)},...(0,m.nv)("notifications",["fetchNotificationPreview"]),...(0,m.nv)("appointments",["fetchAppointments"])}};const HV=(0,he.Z)($V,[["render",NV]]);var ZV=HV,YV={name:"NotificationEdit",props:{id:{type:[Number,String],required:!0}},emits:["saved"],components:{duration:Wd,FoxyChipSetEditable:PV,NotificationDetails:KU,Preview:ZV,PromoSms:jP,TokenText:hF},data(){return{all:!0,dirty:!1,emailOptions:[],saving:!1,showCc:!1,notification:{type:"email"},notificationTriggers:v,notificationEmailOptions:B,notificationStaffEmailOptions:S,notificationTokens:k,validTitle:!0,validAppointmentTypes:!0,validBcc:!0,validCc:!0,validReplyTo:!0,validMessage:!0,validSubject:!0,validTo:!0,validSmsTo:!0,validTrigger:!0,validDuration:!0,leaveWithoutSaving:!1,routerNext:null}},beforeMount(){if(this.id||0==this.id){let e=this.settings.notifications.notifications.find((e=>e.id==this.id));this.notification=wa().cloneDeep(e)}if(!Object.prototype.hasOwnProperty.call(this.notification,"id")||!this.notification.id){let e=new Date;this.notification.id=e.getTime()}Object.prototype.hasOwnProperty.call(this.notification,"trigger")||this.notification.trigger||(this.notification.trigger="appointment_booked"),Object.prototype.hasOwnProperty.call(this.notification,"when")||this.notification.when||(this.notification.when="after"),Object.prototype.hasOwnProperty.call(this.notification,"appointment_types")||(this.notification.appointment_types=[]),Object.prototype.hasOwnProperty.call(this.notification,"appointment_types")&&this.notification.appointment_types.length&&(this.all=!1),(this.notification.cc||this.notification.bcc)&&(this.showCc=!0),Object.prototype.hasOwnProperty.call(this.notification,"schema")||(this.notification.schema="2019-04-02"),this.remindersInstalled&&(this.notificationTriggers=b),this.emailOptions.length||(this.settings.installed.staff&&this.settings.staff.enabled?this.emailOptions=this.notificationStaffEmailOptions:this.emailOptions=this.notificationEmailOptions)},mounted(){document.execCommand("defaultParagraphSeparator",!1,"p"),this.getGuides({"ssasc-plugin-screen":this.guidesList})},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{notification:{handler:function(e,t){this.dirty=!wa().isEmpty(t)},deep:!0},all(e){e&&(this.validAppointmentTypes=!0)}},computed:{active:{get(){return!Object.prototype.hasOwnProperty.call(this.notification,"active")||this.notification.active},set(e){this.notification.active=e}},title:{get(){return Object.prototype.hasOwnProperty.call(this.notification,"title")?this.notification.title:""},set(e){this.notification.title=e}},type:{get(){return Object.prototype.hasOwnProperty.call(this.notification,"type")?this.notification.type:"email"},set(e){this.notification.type=e,this.appointment_types=[],this.all=!this.notAllPhone}},sent_to:{get(){return this.notification?.sent_to||[]},set(e){this.notification.sent_to=e}},sms_to:{get(){return this.notification?.sms_to||[]},set(e){this.notification.sms_to=e}},cc:{get(){return this.notification?.cc||[]},set(e){this.notification.cc=e}},bcc:{get(){return this.notification?.bcc||[]},set(e){this.notification.bcc=e}},replyTo:{get(){return this.notification?.replyTo||[]},set(e){Array.isArray(e)&&(e.length>1?this.notification.replyTo=e.slice(-1):this.notification.replyTo=e)}},trigger:{get(){return this.notification?.trigger||"appointment_booked"},set(e){this.notification.trigger=e,"appointment_start_date"!==e&&(this.notification.when="after"),e&&(this.validTrigger=!0)}},when:{get(){return this.notification?.when||"after"},set(e){this.notification.when=e}},duration:{get(){return Object.prototype.hasOwnProperty.call(this.notification,"duration")?this.notification.duration:0},set(e){this.notification.duration=e}},appointment_types:{get(){return this.notification.appointment_types},set(e){this.notification.appointment_types=e,(e.length||this.all)&&(this.validAppointmentTypes=!0)}},subject:{get(){return this.notification?.subject||""},set(e){this.notification.subject=e}},message:{get(){return this.notification?.message||""},set(e){this.notification.message=e}},disableWhen(){return"appointment_start_date"!==this.trigger},notAllPhone(){return this.smsModule.active&&"sms"===this.type&&this.phoneAppointmentTypes.length0&&t{let e=document.querySelector(".mdc-text-field--invalid, .md-fieldset-invalid, .foxy-fieldset-invalid");if(e){let t=e.querySelector("input, textarea, select, div[contenteditable]");t&&(t.focus(),t.scrollIntoView({behavior:"smooth",block:"center"}))}}))},saveNotification(){this.validationCheck()?(this.saving=!0,this.stripSubject(),this.id||0===this.id?this.setSingleNotification({id:this.id,notification:this.notification,settings:this.settings,timestampFormat:this.timestampFormat}):this.addSettingsNotification({settings:this.settings,timestampFormat:this.timestampFormat,notification:this.notification}),this.saveNotificationSingle(this.notification.id).then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")}))):this.focusInvalid()},maybeShowUpgrade(){this.smsModule.installed||this.$refs["upgradeSms"].open()},stripSubject(){if(!Object.prototype.hasOwnProperty.call(this.notification,"subject"))return;let e=this.notification.subject,t=e.replace(/ /g," ");this.notification.subject=t},toggleAll(e){if(e)return void(this.notification.appointment_types=[]);let t=this.editableAppointmentTypes.map((e=>e.id));this.notification.appointment_types=t},toggleShowCc(){this.showCc=!this.showCc},validateReplyTo(e){e.length?0===e.indexOf("{{")&&e.indexOf("}}")>-1?this.validReplyTo=!0:this.validReplyTo=this.validateEmail(e):this.validReplyTo=!0},validateBcc(e){e.length?0===e.indexOf("{{")&&e.indexOf("}}")>-1?this.validBcc=!0:this.validBcc=this.validateEmail(e):this.validBcc=!0},validateCc(e){e.length?0===e.indexOf("{{")&&e.indexOf("}}")>-1?this.validCc=!0:this.validCc=this.validateEmail(e):this.validCc=!0},validateTo(e){e.length?0===e.indexOf("{{")&&e.indexOf("}}")>-1?this.validTo=!0:this.validTo=this.validateEmail(e):this.validTo=!0},validateSubject(e){this.validSubject=e},validateMessage(e){this.validMessage=e},validationCheck(){this.validTo="email"!==this.notification.type||Object.prototype.hasOwnProperty.call(this.notification,"sent_to")&&this.notification.sent_to.length>0,this.validSmsTo="sms"!==this.notification.type||Object.prototype.hasOwnProperty.call(this.notification,"sms_to")&&this.notification.sms_to.length>0,this.validTrigger=!!this.notification.trigger;const e=this.notification.subject?this.notification.subject.replace(/<[^>]+>/g,"").trim():"";this.validSubject="email"!==this.notification.type||!(!Object.prototype.hasOwnProperty.call(this.notification,"subject")||!e.length);const t=this.notification.message?this.notification.message.replace(/<[^>]+>/g,"").trim():"";return this.validMessage=!(!Object.prototype.hasOwnProperty.call(this.notification,"message")||!t.length),this.validAppointmentTypes=Object.prototype.hasOwnProperty.call(this.notification,"appointment_types")&&this.notification.appointment_types.length||this.all,this.validTitle=!(!Object.prototype.hasOwnProperty.call(this.notification,"title")||!this.notification.title),this.validDuration=parseInt(this.duration)>=0,this.validTo&&this.validTitle&&this.validSmsTo&&this.validTrigger&&this.validSubject&&this.validMessage&&this.validAppointmentTypes&&this.validDuration},dialogLeaveWithoutSaving(){this.routerNext()},...(0,m.OI)("notifications",["addSettingsNotification","setNotificationPreview","setSingleNotification"]),...(0,m.nv)("notifications",["saveNotificationSingle"]),...(0,m.nv)("guides",["getGuides"])}};const KV=(0,he.Z)(YV,[["render",lV],["__scopeId","data-v-c73c6700"]]);var JV=KV;const XV={class:"notifications-sms"},QV={class:"settings-header"},eW={class:"md-title"},tW=(0,o._)("br",null,null,-1),iW={class:"button-bar"};function aW(e,t,i,l,s,n){const d=(0,o.up)("foxy-snackbar"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-notification"),u=(0,o.up)("foxy-textfield"),c=(0,o.up)("foxy-phone-field"),h=(0,o.up)("foxy-accordion-item"),m=(0,o.up)("foxy-empty"),g=(0,o.up)("foxy-accordion"),_=(0,o.up)("foxy-theme"),y=(0,o.up)("foxy-progress-circular"),w=(0,o.up)("setting-not-enabled"),x=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",XV,[(0,o._)("form",{novalidate:"",onSubmit:t[7]||(t[7]=(0,a.iM)(((...e)=>n.saveSms&&n.saveSms(...e)),["stop","prevent"])),class:(0,r.C_)({saving:s.saving})},[(0,o.Wm)(d,{position:"top center",modelValue:s.isErrorSavingVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>s.isErrorSavingVisible=e),message:e.translations.errors.troubleSaving+" ","action-text":e.translations.actions.retry,onAction:n.retrySave},null,8,["modelValue","message","action-text","onAction"]),(0,o.Wm)(d,{position:"top center",modelValue:s.isTwilioErrorVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.isTwilioErrorVisible=e),message:s.errorMessage},null,8,["modelValue","message"]),(0,o.Wm)(d,{position:"top center",modelValue:s.isTestMessageSentVisible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.isTestMessageSentVisible=e),message:s.testMessageStatus},null,8,["modelValue","message"]),(0,o._)("div",QV,[(0,o.Wm)(p,{tag:"md-button",to:"/ssa/settings/notifications",icon:"keyboard_arrow_left",theme:"black"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.notifications.returnToNotifications),1)])),_:1}),(0,o._)("h2",eW,(0,r.zw)(e.translations.settings.sms.title),1)]),e.settings.sms.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[n.twilio_test_mode_enabled?((0,o.wg)(),(0,o.j4)(f,{key:0,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.testModeWarning),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(_,{theme:"grey"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{label:e.translations.settings.sms.basics,message:e.translations.settings.sms.basicsMessage,index:"0",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{modelValue:s.v$.twilio_account_sid.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>s.v$.twilio_account_sid.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.sms.twilioAccountSid,helptext:s.v$.twilio_account_sid.$invalid&&s.v$.twilio_account_sid.$dirty?e.translations.settings.sms.twilioAccountSidError+" - "+e.translations.settings.sms.twilioAccountSidHelp+"":""+e.translations.settings.sms.twilioAccountSidHelp+"","helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!s.v$.twilio_account_sid.$invalid||!s.v$.twilio_account_sid.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(u,{modelValue:s.v$.twilio_auth_token.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>s.v$.twilio_auth_token.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.sms.twilioAuthToken,helptext:s.v$.twilio_auth_token.$invalid&&s.v$.twilio_auth_token.$dirty?e.translations.settings.sms.twilioAuthTokenError+" - "+e.translations.settings.sms.twilioAuthTokenHelp+"":""+e.translations.settings.sms.twilioAuthTokenHelp+"","helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!s.v$.twilio_auth_token.$invalid||!s.v$.twilio_auth_token.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(c,{modelValue:n.twilio_send_from_phone,"onUpdate:modelValue":t[5]||(t[5]=e=>n.twilio_send_from_phone=e),modelModifiers:{trim:!0},label:e.translations.settings.sms.twilioSendFromPhone,"input-options":{id:"twilio_send_from_phone",required:!0,disabled:s.saving},onValidate:n.validatePhone,"valid-characters-only":!1,"helptext-validation":!s.validPhone,helptext:s.validPhone?n.twilioSendFromPhoneHelp:n.twilioSendFromPhoneError,"helptext-persistent":""},null,8,["modelValue","label","input-options","onValidate","helptext-validation","helptext"])])),_:1},8,["label","message","open","onUpdateActive"]),(0,o.Wm)(h,{label:e.translations.settings.sms.sendTest,message:e.translations.settings.sms.sendTestMessage,index:"2",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[s.dirty||n.missing?((0,o.wg)(),(0,o.j4)(m,{key:0,label:"Settings not saved",description:"Save your settings before attempting to send a test message"})):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(c,{modelValue:s.testPhone,"onUpdate:modelValue":t[6]||(t[6]=e=>s.testPhone=e),modelModifiers:{trim:!0},label:e.translations.settings.sms.sendTestTo,"input-options":{id:"twilio_test_phone",required:!0,disabled:s.sendingTest},onValidate:n.validateTestPhone,"helptext-validation":!s.validTestPhone,helptext:s.validTestPhone?e.translations.settings.sms.sendTestToHelp:e.translations.settings.sms.sendTestToError,"helptext-persistent":""},null,8,["modelValue","label","input-options","onValidate","helptext-validation","helptext"]),tW,(0,o.Wm)(p,{theme:e.$theme.primary,mode:"raised",onClick:n.sendTest,disabled:s.sendingTest||!s.validTestPhone},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.sms.sendTest),1)])),_:1},8,["theme","onClick","disabled"])],64))])),_:1},8,["label","message","open","onUpdateActive"])])),_:1})])),_:1}),(0,o._)("div",iW,[(0,o.Wm)(p,{tag:"md-button",mode:"secondary",to:"/ssa/settings/notifications",disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled"]),(0,o.Wm)(p,{mode:"raised",class:"md-primary",onClick:n.saveSms,disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"]),(0,o.wy)((0,o.Wm)(y,{medium:"",class:"md-primary",indeterminate:""},null,512),[[a.F8,s.saving]])])],64)):((0,o.wg)(),(0,o.j4)(w,{key:1}))],34),(0,o.Wm)(x,{ref:"confirmLeaveDirty",title:e.translations.settings.sms.confirmIgnoreChangesTitle,"content-html":e.translations.settings.sms.confirmIgnoreChangesContent,"ok-text":e.translations.settings.sms.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.sms.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}var oW={name:"NotificationsSms",components:{SettingNotEnabled:GU},data(){return{v$:(0,Rd.Xw)(),dirty:!1,errorMessage:"",saving:!1,section:"0",sendingTest:!1,testMessageStatus:"",testPhone:null,validPhone:!0,validTestPhone:!0,isErrorSavingVisible:!1,isTwilioErrorVisible:!1,isTestMessageSentVisible:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{sms:{handler:function(e,t){this.dirty=t},deep:!0}},validations(){return{twilio_account_sid:{required:Ld.C1},twilio_auth_token:{required:Ld.C1},twilio_send_from_phone:{required:Ld.C1},twilio_test_account_sid:{required:(0,Ld.CF)((()=>this.twilio_test_mode_enabled))},twilio_test_auth_token:{required:(0,Ld.CF)((()=>this.twilio_test_mode_enabled))}}},mounted(){this.getGuides({"ssasc-plugin-screen":K.notifications.sms})},computed:{twilio_account_sid:{get(){return this.settings.sms.twilio_account_sid},set(e){this.updateTwilioAccountSid(e)}},twilio_auth_token:{get(){return this.settings.sms.twilio_auth_token},set(e){this.updateTwilioAuthToken(e)}},twilio_send_from_phone:{get(){return this.settings.sms.twilio_send_from_phone},set(e){this.updateTwilioSendFromPhone(e)}},twilio_test_mode_enabled:{get(){return!!this.settings.sms.twilio_test_mode_enabled},set(e){this.updateTwilioTestModeEnabled(e)}},twilio_test_account_sid:{get(){return this.settings.sms.twilio_test_account_sid},set(e){this.updateTwilioTestAccountSid(e)}},twilio_test_auth_token:{get(){return this.settings.sms.twilio_test_auth_token},set(e){this.updateTwilioTestAuthToken(e)}},missing(){return this.twilio_test_mode_enabled?!this.twilio_test_account_sid||!this.twilio_test_auth_token||!this.twilio_send_from_phone:!this.twilio_send_from_phone||!this.twilio_account_sid||!this.twilio_auth_token},twilioSendFromPhoneError(){const e=this.translations.settings.sms.twilioSendFromPhoneError,t=this.translations.settings.sms.twilioSendFromPhoneHelp,i="https://www.twilio.com/console/sms/services";return`${e} - ${t}`},twilioSendFromPhoneHelp(){const e="https://www.twilio.com/console/sms/services",t=this.translations.settings.sms.twilioSendFromPhoneHelp;return`${t}`},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("notifications",["sms","smsModule"])},methods:{retrySave(){this.isErrorSavingVisible=!1,this.saveSmsSettings()},saveSms(){this.validatePhone(),this.v$.$touch(),this.v$.$invalid||!this.validPhone?this.section="0":(this.saving=!0,this.saveSmsSettings().then((()=>{this.authorizeTwilio().then((()=>{this.dirty=!1,this.saving=!1,this.$router.push("/ssa/settings/notifications")})).catch((e=>{this.saving=!1;let t=e.response_code,i=e.error.errors;this.errorMessage=i[t][0],this.isTwilioErrorVisible=!0}))})).catch(((e,t)=>{console.log("failed to save",t),this.saving=!1,this.isErrorSavingVisible=!0})))},sendTest(){this.testPhone?(this.sendingTest=!0,this.sendTestMessage(this.testPhone).then((()=>{this.sendingTest=!1,this.testMessageStatus=this.translations.settings.sms.sendTestSuccess,this.isTestMessageSentVisible=!0})).catch((e=>{this.sendingTest=!1,console.log(e),this.testMessageStatus=this.translations.settings.sms.sendTestFailure,this.isTestMessageSentVisible=!0}))):this.validTestPhone=!1},updateSection(e){this.section=e||null},validatePhone(e=!0){this.twilio_send_from_phone?this.validPhone=e:this.validPhone=!1},validateTestPhone(e){this.validTestPhone=e},dialogLeaveWithoutSaving(){this.routerNext()},...(0,m.nv)("notifications",["authorizeTwilio","saveSmsSettings","sendTestMessage","updateTwilioAccountSid","updateTwilioAuthToken","updateTwilioSendFromPhone","updateTwilioTestModeEnabled","updateTwilioTestAccountSid","updateTwilioTestAuthToken"]),...(0,m.nv)("guides",["getGuides"])}};const rW=(0,he.Z)(oW,[["render",aW]]);var lW=rW,sW=[{path:"notifications",component:eP,redirect:"/ssa/settings/notifications/list",meta:{ssa_manage_site_settings:!0},children:[{path:"list",name:"notifications-list",component:$P},{path:"notification/:id?",name:"notification-single",component:JV,props:!0},{path:"sms",name:"notifications-sms",component:lW}]}];const nW={class:"payments-settings"};function dW(e,t,i,a,r,l){const s=(0,o.up)("settings-header"),n=(0,o.up)("payments-header"),d=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",nW,["payments-all"===e.$route.name?((0,o.wg)(),(0,o.j4)(s,{key:0})):((0,o.wg)(),(0,o.j4)(n,{key:1})),(0,o.Wm)(d)])}const pW={class:"payments-header"},fW={key:0,class:"md-title"};function uW(e,t,i,a,l,s){const n=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.iD)("div",pW,[(0,o.Wm)(n,{tag:"md-button",to:"/ssa/settings/payments/all",icon:"keyboard_arrow_left",theme:"black"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.returnToPayments),1)])),_:1}),s.headline?((0,o.wg)(),(0,o.iD)("h2",fW,(0,r.zw)(s.headline),1)):(0,o.kq)("",!0)])}var cW={name:"PaymentsHeader",data(){return{}},computed:{headline(){let e;switch(this.$route.name){case"payments-paypal":e="PayPal";break;case"payments-stripe":e="Stripe";break}return e},...(0,m.rn)("translations",["translations"])}};const hW=(0,he.Z)(cW,[["render",uW]]);var mW=hW,gW={name:"SettingsPayments",components:{SettingsHeader:zO,PaymentsHeader:mW},data(){return{}}};const _W=(0,he.Z)(gW,[["render",dW]]);var yW=_W;const wW={class:"payments-settings settings-list"},xW=["value"];function CW(e,t,i,a,l,s){const n=(0,o.up)("foxy-select2"),d=(0,o.up)("foxy-notification"),p=(0,o.up)("settings-card"),f=(0,o.up)("router-view"),u=(0,o.up)("foxy-layout"),c=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",wW,[e.settings.payments.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(n,{name:"default_currency",id:"default_currency",modelValue:s.default_currency,"onUpdate:modelValue":t[0]||(t[0]=e=>s.default_currency=e),label:e.translations.settings.payments.defaultCurrency},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(l.currencies,(e=>((0,o.wg)(),(0,o.iD)("option",{value:e.code,key:e.number},(0,r.zw)(e.currency)+" ("+(0,r.zw)(e.code)+") ",9,xW)))),128))])),_:1},8,["modelValue","label"]),(0,o.Wm)(u,{"md-gutter":!0,class:"settings-list-container"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{onEdit:t[1]||(t[1]=e=>s.editPayments("stripe")),image:e.api.admin_static_url+"/images/logo-stripe.svg",title:"Stripe","card-style":"payments-settings",modelValue:s.stripe_enabled,"onUpdate:modelValue":t[2]||(t[2]=e=>s.stripe_enabled=e)},{default:(0,o.w5)((()=>[e.stripeModule.enabled&&!e.stripeModule.active?((0,o.wg)(),(0,o.j4)(d,{key:0,theme:"amber",icon:"warning"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.stripe.noConnection),1)])),_:1})):e.stripeModule.test_mode?((0,o.wg)(),(0,o.j4)(d,{key:1,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.stripe.testModeWarning),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","modelValue"]),(0,o.Wm)(p,{onEdit:t[3]||(t[3]=e=>s.editPayments("paypal")),image:e.api.admin_static_url+"/images/logo-paypal.svg",title:"PayPal","card-style":"payments-settings",modelValue:s.paypal_enabled,"onUpdate:modelValue":t[4]||(t[4]=e=>s.paypal_enabled=e)},{default:(0,o.w5)((()=>[e.paypalModule.enabled&&!e.paypalModule.active?((0,o.wg)(),(0,o.j4)(d,{key:0,theme:"amber",icon:"warning"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.paypal.noConnection),1)])),_:1})):e.paypalModule.sandbox?((0,o.wg)(),(0,o.j4)(d,{key:1,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.paypal.sandboxMode),1)])),_:1})):(0,o.kq)("",!0)])),_:1},8,["image","modelValue"]),(0,o.Wm)(f)])),_:1})],64)):((0,o.wg)(),(0,o.j4)(c,{key:1}))])}var vW={name:"SettingsPaymentsAll",components:{SettingsCard:gO,SettingNotEnabled:GU},data(){return{currencies:V}},watch:{guidesList(){this.getGuides({"ssasc-plugin-screen":this.guidesList})}},mounted(){this.getGuides({"ssasc-plugin-screen":this.guidesList})},computed:{default_currency:{get(){return this.settings.payments.default_currency},set(e){this.updateDefaultCurrency(e)}},stripe_enabled:{get(){return!!this.settings.stripe.enabled},set(e){this.updateStripeEnabled(e)}},paypal_enabled:{get(){return!!this.settings.paypal.enabled},set(e){this.updatePaypalEnabled(e)}},woocommerce_enabled(){return!1},guidesList(){let e=[K.payments.all];return this.stripe_enabled&&e.push(K.payments.stripe_enabled),this.paypal_enabled&&e.push(K.payments.paypal_enabled),e},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.Se)("payments",["paypalModule","stripeModule"])},methods:{editPayments(e){this.$router.push(`/ssa/settings/payments/${e}`)},...(0,m.nv)("payments",["updatePaypalEnabled","updateStripeEnabled","updateDefaultCurrency"]),...(0,m.nv)("guides",["getGuides"])}};const bW=(0,he.Z)(vW,[["render",CW]]);var BW=bW;const SW={class:"paypal"},kW={class:"md-copyable"},AW={href:"https://developer.paypal.com/",target:"_blank"},MW={class:"checkboxes-list-flex-row"},DW={class:"button-bar"};function TW(e,t,i,l,s,n){const d=(0,o.up)("foxy-snackbar"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-icon-button"),h=(0,o.up)("foxy-accordion-item"),m=(0,o.up)("foxy-checkbox"),g=(0,o.up)("foxy-accordion"),_=(0,o.up)("foxy-theme"),y=(0,o.up)("foxy-button"),w=(0,o.up)("foxy-progress-circular"),x=(0,o.up)("setting-not-enabled"),C=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",SW,[(0,o._)("form",{novalidate:"",onSubmit:t[7]||(t[7]=(0,a.iM)(((...e)=>n.savePaypal&&n.savePaypal(...e)),["stop","prevent"])),class:(0,r.C_)({saving:s.saving})},[e.settings.paypal.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(d,{position:"top center",modelValue:s.isErrorSavingVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>s.isErrorSavingVisible=e),message:e.translations.errors.troubleSaving+" ","action-text":e.translations.actions.retry,onAction:n.retrySave},null,8,["modelValue","message","action-text","onAction"]),s.showSslWarning?((0,o.wg)(),(0,o.j4)(p,{key:0,icon:"error",theme:"red"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.paypal.sslWarning),1)])),_:1})):e.paypalModule.sandbox?((0,o.wg)(),(0,o.j4)(p,{key:1,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.paypal.sandboxMode),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(_,{theme:"grey"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,null,{default:(0,o.w5)((()=>[(0,o.Wm)(h,{label:e.translations.settings.payments.basics,message:e.translations.settings.payments.basicsMessage,index:"0",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{modelValue:s.v$.paypal_display_title.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>s.v$.paypal_display_title.$model=e),label:e.translations.settings.payments.displayTitle,helptext:s.v$.paypal_display_title.$invalid&&s.v$.paypal_display_title.$dirty?e.translations.settings.payments.displayTitleError:e.translations.settings.payments.displayTitleHelp,"helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!s.v$.paypal_display_title.$invalid||!s.v$.paypal_display_title.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{modelValue:n.paypal_description,"onUpdate:modelValue":t[2]||(t[2]=e=>n.paypal_description=e),label:e.translations.settings.payments.description,helptext:e.translations.settings.payments.descriptionHelp,"helptext-persistent":"",disabled:s.saving},null,8,["modelValue","label","helptext","disabled"]),(0,o.Wm)(f,{modelValue:s.v$.paypal_email.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>s.v$.paypal_email.$model=e),modelModifiers:{trim:!0,lazy:!0},label:e.translations.settings.payments.paypal.email,helptext:s.v$.paypal_email.$invalid&&s.v$.paypal_email.$dirty?e.translations.settings.payments.paypal.emailError:e.translations.settings.payments.paypal.emailHelp,"helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!s.v$.paypal_email.$invalid||!s.v$.paypal_email.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o._)("div",kW,[(0,o.Wm)(f,{label:e.translations.settings.payments.paypal.ipn_url,id:"webhook",modelValue:n.ipn_url,"onUpdate:modelValue":t[4]||(t[4]=e=>n.ipn_url=e),readonly:"",helptext:n.webhook_helper_text,ref:"ipnUrlValue",onClick:n.copyIpnUrl,disabled:s.saving,class:"textfield-with-icon"},null,8,["label","modelValue","helptext","onClick","disabled"]),(0,o.Wm)(c,{theme:e.$theme.primary,class:"md-icon-button foxy-textfield-action-button",onClick:n.copyIpnUrl},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"file_copy"})])),_:1},8,["theme","onClick"])]),(0,o.Wm)(d,{position:"top center",modelValue:s.isIpnNoticeVisible,"onUpdate:modelValue":t[5]||(t[5]=e=>s.isIpnNoticeVisible=e),message:e.translations.settings.payments.paypal.ipnCopied},null,8,["modelValue","message"])])),_:1},8,["label","message","open","onUpdateActive"]),(0,o.Wm)(h,{label:e.translations.settings.payments.advanced,message:e.translations.settings.payments.advancedMessage,index:"1",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[(0,o._)("p",null,[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.paypal.sandboxHelp1)+" ",1),(0,o._)("a",AW,(0,r.zw)(e.translations.settings.payments.paypal.sandboxHelp2),1)]),(0,o._)("div",MW,[(0,o.Wm)(m,{modelValue:n.paypal_sandbox_enabled,"onUpdate:modelValue":t[6]||(t[6]=e=>n.paypal_sandbox_enabled=e),disabled:s.saving,theme:e.$theme.primary,label:e.translations.settings.payments.paypal.enableSandbox},null,8,["modelValue","disabled","theme","label"])])])),_:1},8,["label","message","open","onUpdateActive"])])),_:1})])),_:1}),(0,o._)("div",DW,[(0,o.Wm)(y,{tag:"md-button",mode:"secondary",class:"md-raised",to:"/ssa/settings/payments",disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled"]),(0,o.Wm)(y,{mode:"raised",class:"md-primary",onClick:n.savePaypal,disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"]),(0,o.wy)((0,o.Wm)(w,{class:"md-primary",indeterminate:"",medium:""},null,512),[[a.F8,s.saving]])])],64)):((0,o.wg)(),(0,o.j4)(x,{key:1}))],34),(0,o.Wm)(C,{ref:"confirmLeaveDirty",title:e.translations.settings.payments.confirmIgnoreChangesTitle,"content-html":e.translations.settings.payments.confirmIgnoreChangesContent,"ok-text":e.translations.settings.payments.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.payments.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}var OW={name:"PaymentsPaypal",components:{SettingNotEnabled:GU},data(){return{v$:(0,Rd.Xw)(),section:"0",dirty:!1,saving:!1,showSslWarning:!1,isErrorSavingVisible:!1,isIpnNoticeVisible:!1,routerNext:null}},mounted(){this.getGuides({"ssasc-plugin-screen":K.paypal}),wa().isEmpty(this.support)?this.fetchSupportDetails().then((()=>{this.maybeShowSslWarning()})):this.maybeShowSslWarning()},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{paypal:{handler:function(e,t){this.dirty=t},deep:!0}},validations:{paypal_display_title:{required:Ld.C1},paypal_email:{required:Ld.C1,email:Ld.Do}},computed:{ipn_url(){return this.settings.paypal.ipn_url},paypal_description:{get(){return this.settings.paypal.description},set(e){this.updatePaypalDescription(e)}},paypal_display_title:{get(){return this.settings.paypal.title},set(e){this.updatePaypalTitle(e)}},paypal_email:{get(){return this.settings.paypal.email},set(e){this.updatePaypalEmail(e)}},paypal_identity_token:{get(){return this.settings.paypal.identity_token},set(e){this.updatePaypalIdentityToken(e)}},paypal_sandbox_enabled:{get(){return this.settings.paypal.sandbox_enabled},set(e){this.updatePaypalSandbox(e)}},webhook_helper_text(){return this.translations.settings.payments.paypal.ipnHelpPrefix+''+this.translations.settings.payments.paypal.ipnHelp+""},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("support",["support"]),...(0,m.Se)("payments",["paypalModule"])},methods:{copyIpnUrl(){let e=this.$refs["ipnUrlValue"].$el,t=e.querySelector("input"),i=t.value.trim();i&&(t.select(),document.execCommand("copy"),this.isIpnNoticeVisible=!0)},maybeShowSslWarning(){"good"!==this.support.site_status.https_status.status&&(this.showSslWarning=!0)},savePaypal(){this.v$.$touch(),this.v$.$invalid?this.section="0":(this.saving=!0,this.savePaypalSettings().then((()=>{this.dirty=!1,this.saving=!1,this.$router.push("/ssa/settings/payments")})).catch((()=>{this.saving=!1,this.isErrorSavingVisible=!0})))},retrySave(){this.isErrorSavingVisible=!1,this.savePaypal()},updateSection(e){this.section=e||null},dialogLeaveWithoutSaving(){this.routerNext()},...(0,m.nv)("support",["fetchSupportDetails"]),...(0,m.nv)("payments",["savePaypalSettings","updatePaypalDescription","updatePaypalEmail","updatePaypalIdentityToken","updatePaypalSandbox","updatePaypalTitle"]),...(0,m.nv)("guides",["getGuides"])}};const GW=(0,he.Z)(OW,[["render",TW]]);var EW=GW;const UW={class:"stripe"},FW={class:"md-copyable"},IW={class:"stripe-payment-method"},zW={key:0,class:"error-message payment-methods-warning-message"},PW={key:1,class:"error-message payment-methods-warning-message"},VW={class:"button-bar"};function WW(e,t,i,l,s,n){const d=(0,o.up)("foxy-snackbar"),p=(0,o.up)("foxy-notification"),f=(0,o.up)("foxy-textfield"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-icon-button"),h=(0,o.up)("foxy-checkbox"),m=(0,o.up)("foxy-accordion-item"),g=(0,o.up)("foxy-accordion"),_=(0,o.up)("foxy-theme"),y=(0,o.up)("foxy-button"),w=(0,o.up)("foxy-progress-circular"),x=(0,o.up)("setting-not-enabled"),C=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",UW,[(0,o._)("form",{novalidate:"",onSubmit:t[16]||(t[16]=(0,a.iM)(((...e)=>n.saveStripe&&n.saveStripe(...e)),["stop","prevent"])),class:(0,r.C_)({saving:s.saving})},[e.settings.stripe.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(d,{position:"top center",modelValue:s.isErrorSavingVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>s.isErrorSavingVisible=e),message:e.translations.errors.troubleSaving,"action-text":e.translations.actions.retry,onAction:n.retrySave},null,8,["modelValue","message","action-text","onAction"]),e.stripeModule.test_mode?((0,o.wg)(),(0,o.j4)(p,{key:0,icon:"info"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.payments.stripe.testModeWarning),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(_,{theme:"grey"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,null,{default:(0,o.w5)((()=>[(0,o.Wm)(m,{label:e.translations.settings.payments.basics,message:e.translations.settings.payments.basicsMessage,index:"0",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{id:"title","data-validatorkey":"stripe_display_title",modelValue:l.v$.stripe_display_title.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.stripe_display_title.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.displayTitle,helptext:l.v$.stripe_display_title.$invalid&&l.v$.stripe_display_title.$dirty?e.translations.settings.payments.displayTitleError:e.translations.settings.payments.displayTitleHelp,"helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!l.v$.stripe_display_title.$invalid||!l.v$.stripe_display_title.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{id:"description","data-validatorkey":"stripe_description",modelValue:n.stripe_description,"onUpdate:modelValue":t[2]||(t[2]=e=>n.stripe_description=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.description,helptext:e.translations.settings.payments.descriptionHelp,"helptext-persistent":"",disabled:s.saving},null,8,["modelValue","label","helptext","disabled"]),(0,o.Wm)(f,{id:"descriptor","data-validatorkey":"stripe_statement_descriptor",modelValue:l.v$.stripe_statement_descriptor.$model,"onUpdate:modelValue":t[3]||(t[3]=e=>l.v$.stripe_statement_descriptor.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.statementDescriptor,helptext:l.v$.stripe_statement_descriptor.$invalid&&l.v$.stripe_statement_descriptor.$dirty?e.translations.settings.payments.statementDescriptorError:e.translations.settings.payments.statementDescriptorHelp,"helptext-persistent":"","helptext-validation":"",disabled:s.saving,valid:!l.v$.stripe_statement_descriptor.$invalid||!l.v$.stripe_statement_descriptor.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{id:"publishable-key","data-validatorkey":"stripe_publishable_key",modelValue:l.v$.stripe_publishable_key.$model,"onUpdate:modelValue":t[4]||(t[4]=e=>l.v$.stripe_publishable_key.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.stripe.publishableKey,helptext:n.publishableKeyHelpText,"helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,valid:!l.v$.stripe_publishable_key.$invalid||!l.v$.stripe_publishable_key.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{id:"secret-key","data-validatorkey":"stripe_secret_key",modelValue:l.v$.stripe_secret_key.$model,"onUpdate:modelValue":t[5]||(t[5]=e=>l.v$.stripe_secret_key.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.stripe.secretKey,helptext:n.secretKeyHelpText,"helptext-persistent":"","helptext-validation":"",required:"",disabled:s.saving,onChange:t[6]||(t[6]=e=>n.clearfieldBackendErrors("secret_key")),valid:!l.v$.stripe_secret_key.$invalid||!l.v$.stripe_secret_key.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o._)("div",FW,[(0,o.Wm)(f,{label:e.translations.settings.payments.stripe.webhook,"aria-describedby":"webhook-helper",id:"webhook",modelValue:n.stripe_webhook,"onUpdate:modelValue":t[7]||(t[7]=e=>n.stripe_webhook=e),readonly:"",helptext:n.stripe_webhook_helper_text,ref:"webhookValue",onClick:n.copyWebhook,disabled:s.saving,class:"textfield-with-icon"},null,8,["label","modelValue","helptext","onClick","disabled"]),(0,o.Wm)(c,{type:"button",theme:e.$theme.primary,class:"foxy-textfield-action-button",onClick:n.copyWebhook},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"file_copy"})])),_:1},8,["theme","onClick"])]),(0,o.Wm)(d,{position:"top center",modelValue:s.isWebhookNoticeVisible,"onUpdate:modelValue":t[8]||(t[8]=e=>s.isWebhookNoticeVisible=e),message:e.translations.settings.payments.stripe.webhookCopied},null,8,["modelValue","message"]),(0,o.Wm)(f,{id:"webhook_secret","data-validatorkey":"stripe_webhook_secret",modelValue:l.v$.stripe_webhook_secret.$model,"onUpdate:modelValue":t[9]||(t[9]=e=>l.v$.stripe_webhook_secret.$model=e),modelModifiers:{trim:!0},label:e.translations.settings.payments.stripe.webhookSecret,helptext:l.v$.stripe_webhook_secret.$invalid?`${n.fieldErrors("webhook_secret")?.message} ${n.fieldErrors("webhook_secret")?.help_link?`– ${e.translations.settings.payments.stripe.webhookSecretHelpPrefix} ${e.translations.settings.payments.stripe.webhookHelpTarget}`:""}`:`${e.translations.settings.payments.stripe.webhookSecretHelpPrefix} ${e.translations.settings.payments.stripe.webhookHelpTarget}`,"helptext-persistent":"","helptext-validation":"",disabled:s.saving,valid:!l.v$.stripe_webhook_secret.$invalid||!l.v$.stripe_webhook_secret.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o._)("div",IW,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.payments.stripe.paymentMethods),1),0===n.stripe_enabled_payment_methods.length?((0,o.wg)(),(0,o.iD)("p",zW,(0,r.zw)(e.translations.settings.payments.stripe.noPaymentMethodsError),1)):n.stripe_enabled_payment_methods.includes("card")?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",PW,(0,r.zw)(e.translations.settings.payments.stripe.noCardPaymentMethodWarning),1)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.stripe_available_payment_methods,((i,a)=>((0,o.wg)(),(0,o.j4)(h,{key:a,theme:e.$theme.primary,id:"payment-method-"+i,name:"payment-methods",modelValue:n.stripe_enabled_payment_methods,"onUpdate:modelValue":t[10]||(t[10]=e=>n.stripe_enabled_payment_methods=e),value:i,label:i,valid:l.v$.stripe_enabled_payment_methods.valid},null,8,["theme","id","modelValue","value","label","valid"])))),128))])])),_:1},8,["label","message","open","onUpdateActive"]),(0,o.Wm)(m,{label:e.translations.settings.payments.advanced,message:e.translations.settings.payments.advancedMessage,index:"1",open:s.section,onUpdateActive:n.updateSection},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.translations.settings.payments.stripe.testModeHelp),1),(0,o.Wm)(h,{modelValue:n.stripe_test_mode_enabled,"onUpdate:modelValue":t[11]||(t[11]=e=>n.stripe_test_mode_enabled=e),theme:e.$theme.primary,disabled:s.saving,label:e.translations.settings.payments.stripe.testMode},null,8,["modelValue","theme","disabled","label"]),(0,o.Wm)(f,{id:"test-publishable-key","data-validatorkey":"stripe_test_publishable_key",modelValue:l.v$.stripe_test_publishable_key.$model,"onUpdate:modelValue":t[12]||(t[12]=e=>l.v$.stripe_test_publishable_key.$model=e),label:e.translations.settings.payments.stripe.testPublishableKey,helptext:n.publishableTestKeyHelpText,"helptext-persistent":"","helptext-validation":"",disabled:s.saving,valid:!l.v$.stripe_test_publishable_key.$invalid||!l.v$.stripe_test_publishable_key.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{id:"test-secret-key","data-validatorkey":"stripe_test_secret_key",modelValue:l.v$.stripe_test_secret_key.$model,"onUpdate:modelValue":t[13]||(t[13]=e=>l.v$.stripe_test_secret_key.$model=e),label:e.translations.settings.payments.stripe.testSecretKey,helptext:l.v$.stripe_test_secret_key.$invalid?n.fieldErrors("test_secret_key")?.["message"]+(n.fieldErrors("test_secret_key")?.["help_link"]?" – "+e.translations.settings.payments.stripe.testSecretKeyHelp+"":""):""+e.translations.settings.payments.stripe.testSecretKeyHelp+"","helptext-persistent":"","helptext-validation":"",disabled:s.saving,onChange:t[14]||(t[14]=e=>n.clearfieldBackendErrors("test_secret_key")),valid:!l.v$.stripe_test_secret_key.$invalid||!l.v$.stripe_test_secret_key.$dirty},null,8,["modelValue","label","helptext","disabled","valid"]),(0,o.Wm)(f,{id:"test-webhook-secret","data-validatorkey":"stripe_test_webhook_secret",modelValue:l.v$.stripe_test_webhook_secret.$model,"onUpdate:modelValue":t[15]||(t[15]=e=>l.v$.stripe_test_webhook_secret.$model=e),label:e.translations.settings.payments.stripe.testWebhookSecret,helptext:l.v$.stripe_test_webhook_secret.$invalid?`${n.fieldErrors("test_webhook_secret")?.message} ${n.fieldErrors("test_webhook_secret")?.help_link?`– ${e.translations.settings.payments.stripe.webhookSecretHelpPrefix} ${e.translations.settings.payments.stripe.webhookHelpTarget}`:""}`:`${e.translations.settings.payments.stripe.webhookSecretHelpPrefix} ${e.translations.settings.payments.stripe.webhookHelpTarget}`,"helptext-persistent":"","helptext-validation":"",disabled:s.saving,valid:!l.v$.stripe_test_webhook_secret.$invalid||!l.v$.stripe_test_webhook_secret.$dirty},null,8,["modelValue","label","helptext","disabled","valid"])])),_:1},8,["label","message","open","onUpdateActive"])])),_:1})])),_:1}),(0,o._)("div",VW,[(0,o.Wm)(y,{tag:"md-button",mode:"secondary",to:"/ssa/settings/payments",disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled"]),(0,o.Wm)(y,{mode:"raised",onClick:n.saveStripe,disabled:s.saving},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick","disabled"]),(0,o.wy)((0,o.Wm)(w,{class:"md-primary",medium:"",indeterminate:""},null,512),[[a.F8,s.saving]])])],64)):((0,o.wg)(),(0,o.j4)(x,{key:1}))],34),(0,o.Wm)(C,{ref:"confirmLeaveDirty",title:e.translations.settings.payments.confirmIgnoreChangesTitle,"content-html":e.translations.settings.payments.confirmIgnoreChangesContent,"ok-text":e.translations.settings.payments.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.payments.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}const RW=e=>/^(?=[^a-z]*[a-z])(?:(?![<>\\'"])[ -~]){1,10}$/i.test(e)||""===e,LW=e=>/^pk_live_[a-zA-Z0-9]+/i.test(e)||""===e,jW=e=>/^sk_live_[a-zA-Z0-9]+/i.test(e)||""===e,qW=e=>/^whsec_[a-zA-Z0-9]+/i.test(e)||""===e,NW=e=>/^pk_test_[a-zA-Z0-9]+/i.test(e)||""===e,$W=e=>/^(|sk_test_[a-zA-Z0-9]+)$/i.test(e)||""===e;var HW={name:"PaymentsStripe",components:{SettingNotEnabled:GU},setup(){return{v$:(0,Rd.Xw)()}},data(){return{section:"0",dirty:!1,saving:!1,fieldBackendErrors:{},isErrorSavingVisible:!1,isWebhookNoticeVisible:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{stripe:{handler:function(e,t){this.dirty=t},deep:!0}},validations(){return{stripe_enabled_payment_methods:{valid:()=>this.stripe_enabled_payment_methods.length>0},stripe_display_title:{required:Ld.C1},stripe_publishable_key:{required:(0,Ld.Nf)((()=>this.stripe_test_mode_enabled)),regexValidator:LW,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("publishable_key")},stripe_secret_key:{required:(0,Ld.Nf)((()=>this.stripe_test_mode_enabled)),regexValidator:jW,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("secret_key")},stripe_webhook_secret:{required:!1,regexValidator:qW,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("webhook_secret")},stripe_test_publishable_key:{required:(0,Ld.CF)((()=>this.stripe_test_mode_enabled)),regexValidator:NW,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("test_publishable_key")},stripe_test_secret_key:{required:(0,Ld.CF)((()=>this.stripe_test_mode_enabled)),regexValidator:$W,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("test_secret_key")},stripe_test_webhook_secret:{required:!1,regexValidator:qW,fieldBackendErrorsEmpty:()=>this.fieldBackendErrorsEmpty("test_webhook_secret")},stripe_statement_descriptor:{required:!1,regexValidator:RW}}},mounted(){this.getGuides({"ssasc-plugin-screen":K.stripe})},computed:{stripe_description:{get(){return this.settings.stripe.description},set(e){this.updateStripeDescription(e)}},stripe_statement_descriptor:{get(){return this.settings.stripe.statement_descriptor},set(e){this.updateStripeStatementDescriptor(e)}},stripe_display_title:{get(){return this.settings.stripe.title},set(e){this.updateStripeTitle(e)}},stripe_publishable_key:{get(){return this.settings.stripe.publishable_key},set(e){this.updateStripePublishableKey(e)}},stripe_secret_key:{get(){return this.settings.stripe.secret_key},set(e){this.updateStripeSecretKey(e)}},fieldErrors(){return e=>{if(!e)return console.error("Missing param field in fieldErrors!"),null;const t=this.fieldBackendErrors[e];if(Array.isArray(t)&&t.length>0)return{message:t.join(", "),help_link:!0};const i=this.v$?.[`stripe_${e}`];if(i?.$dirty){if(i.required?.$invalid)return{message:this.translations.settings.payments.stripe.validation_errors?.[e]?.required,help_link:!0};if(i.regexValidator?.$invalid)return{message:this.translations.settings.payments.stripe.validation_errors?.[e]?.regexValidator}}return null}},stripe_webhook(){return this.settings.stripe.webhook},stripe_webhook_helper_text(){return this.translations.settings.payments.stripe.webhookHelpPrefix+' '+this.translations.settings.payments.stripe.webhookHelpTarget+""},publishableTestKeyHelpText(){if(this.v$.stripe_test_publishable_key.$invalid){let e=this.fieldErrors("test_publishable_key")?.["message"]||"";return this.fieldErrors("test_publishable_key")?.["help_link"]&&(e+=` – ${this.translations.settings.payments.stripe.publishableKeyHelp}`),e}return`${this.translations.settings.payments.stripe.publishableKeyHelp}`},publishableKeyHelpText(){const e=this.fieldErrors("publishable_key");return this.v$.stripe_publishable_key.$invalid&&e?.message?`${e.message} ${e.help_link?`– ${this.translations.settings.payments.stripe.publishableKeyHelp}`:""}`:`${this.translations.settings.payments.stripe.publishableKeyHelp}`},secretKeyHelpText(){const e=this.fieldErrors("secret_key");return this.v$.stripe_secret_key.$invalid&&e?.message?`${e.message} ${e.help_link?`– ${this.translations.settings.payments.stripe.secretKeyHelp}`:""}`:`${this.translations.settings.payments.stripe.secretKeyHelp}`},stripe_webhook_secret:{get(){return this.settings.stripe.webhook_secret},set(e){this.updateStripeWebhookSecret(e)}},stripe_available_payment_methods(){return this.settings.stripe.available_payment_methods},stripe_enabled_payment_methods:{get(){return this.settings.stripe.enabled_payment_methods},set(e){this.updateEnabledStripePaymentMethods(e)}},stripe_test_mode_enabled:{get(){return this.settings.stripe.test_mode_enabled},set(e){this.updateStripeTestMode(e)}},stripe_test_publishable_key:{get(){return this.settings.stripe.test_publishable_key},set(e){this.updateStripeTestPublishableKey(e)}},stripe_test_secret_key:{get(){return this.settings.stripe.test_secret_key},set(e){this.updateStripeTestSecretKey(e)}},stripe_test_webhook_secret:{get(){return this.settings.stripe.test_webhook_secret},set(e){this.updateStripeTestWebhookSecret(e)}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("payments",["stripe","stripeModule"])},methods:{clearfieldBackendErrors:function(e){delete this.fieldBackendErrors[e]},saveStripe(){if(this.v$.$touch(),this.v$.$invalid){const e=this.v$.$errors[0].$property??"";this.section=this.getErrorSection(e),this.$nextTick((()=>{const t=this.$el.querySelector(`[data-validatorkey="${e}"]`);t&&t.focus()}))}else this.saving=!0,this.saveStripeSettings().then((()=>{this.fieldBackendErrors={},this.dirty=!1,this.saving=!1,this.$router.push("/ssa/settings/payments")})).catch((e=>{this.fieldBackendErrors={},e.responseJSON.additional_errors?.forEach((e=>{this.fieldBackendErrors[e.message[0]]=this.fieldBackendErrors[e.message[0]]??[],this.fieldBackendErrors[e.message[0]].push(e.message[1])})),this.saving=!1,this.isErrorSavingVisible=!0,this.v$.$touch()}))},getErrorSection(e){switch(e){case"stripe_display_title":case"stripe_publishable_key":case"stripe_secret_key":case"stripe_webhook_secret":return"0";case"stripe_test_publishable_key":case"stripe_test_secret_key":case"stripe_test_webhook_secret":case"stripe_statement_descriptor":return"1";default:return"0"}},retrySave(){this.isErrorSavingVisible=!1,this.saveStripe()},copyWebhook(){let e=this.$refs["webhookValue"].$el,t=e.querySelector("input"),i=t.value.trim();i&&(t.select(),document.execCommand("copy"),this.isWebhookNoticeVisible=!0)},updateSection(e){this.section=e||null},dialogLeaveWithoutSaving(){this.routerNext()},fieldBackendErrorsEmpty(e){return!this.fieldBackendErrors?.[e]?.length},...(0,m.nv)("payments",["saveStripeSettings","updateStripeDescription","updateStripeStatementDescriptor","updateStripeTitle","updateStripePublishableKey","updateStripeSecretKey","updateStripeWebhookSecret","updateEnabledStripePaymentMethods","updateAvailableStripePaymentMethods","updateStripeTestMode","updateStripeTestPublishableKey","updateStripeTestSecretKey","updateStripeTestWebhookSecret"]),...(0,m.nv)("guides",["getGuides"])}};const ZW=(0,he.Z)(HW,[["render",WW],["__scopeId","data-v-2ede5b9c"]]);var YW=ZW,KW=[{path:"payments",component:yW,redirect:"/ssa/settings/payments/all",meta:{ssa_manage_site_settings:!0},children:[{path:"all",name:"payments-all",component:BW},{path:"paypal",name:"payments-paypal",component:EW},{path:"stripe",name:"payments-stripe",component:YW}]}];const JW={class:"webhooks-all"};function XW(e,t,i,a,r,l){const s=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",JW,[(0,o.Wm)(s,{onSaved:l.backToList},null,8,["onSaved"])])}var QW={name:"WebhooksAll",store:$J,data(){return{}},mounted(){this.getGuides({"ssasc-plugin-screen":K.webhooks})},methods:{backToList(){this.$router.push("/ssa/settings/webhooks/list")},...(0,m.nv)("guides",["getGuides"])}};const eR=(0,he.Z)(QW,[["render",XW]]);var tR=eR;const iR={class:"webhooks-settings"},aR={style:{flex:"1"}},oR={class:"md-title"},rR={key:0,class:"foxy-list-default webhook-list"},lR=["onClick"],sR={class:"foxy-list-container"},nR={class:"md-list-text-container"};function dR(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-button"),f=(0,o.up)("foxy-toolbar"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-icon-button"),h=(0,o.up)("foxy-list-item"),m=(0,o.up)("foxy-menu"),g=(0,o.up)("foxy-menu-anchor"),_=(0,o.up)("foxy-empty"),y=(0,o.up)("foxy-dialog-title"),w=(0,o.up)("foxy-dialog-content"),x=(0,o.up)("foxy-dialog-button"),C=(0,o.up)("foxy-dialog-footer"),v=(0,o.up)("foxy-dialog"),b=(0,o.up)("setting-not-enabled");return(0,o.wg)(),(0,o.iD)("div",iR,[(0,o.Wm)(d),e.settings.webhooks.enabled?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(f,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("div",aR,[(0,o._)("h2",oR,(0,r.zw)(e.translations.settings.webhooks.title),1)]),(0,o.Wm)(p,{class:"md-primary",onClick:n.addWebhook,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.actions.addNew),1)])),_:1},8,["onClick"])])),_:1}),e.settings.webhooks.webhooks.length?((0,o.wg)(),(0,o.iD)("ul",rR,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.settings.webhooks.webhooks,((t,i)=>((0,o.wg)(),(0,o.iD)("li",{key:i,onClick:()=>n.editWebhook(i)},[(0,o._)("div",sR,[(0,o._)("div",nR,[(0,o._)("span",null,(0,r.zw)(t.title),1),(0,o._)("span",null,[1===t.triggers.length?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.trigger_single),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.trigger_plural),1)],64)),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(t.triggers,((i,a)=>((0,o.wg)(),(0,o.iD)(o.HY,null,[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.fields.triggerNames[i]),1),a[(0,o.Wm)(c,{onClick:(0,a.iM)((e=>n.actionMenuHandler(i)),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"settings"})])),_:2},1032,["onClick"]),(0,o.Wm)(m,{modelValue:s.openMenu[i],"onUpdate:modelValue":e=>s.openMenu[i]=e},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{onClick:(0,a.iM)((e=>n.editWebhook(i)),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"]),(0,o.Wm)(h,{onClick:(0,a.iM)((e=>n.cloneWebhook(i)),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"content_copy"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.clone),1)])),_:2},1032,["onClick"]),(0,o.Wm)(h,{onClick:(0,a.iM)((e=>n.confirmDelete(i)),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:2},1032,["onClick"])])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024)])],8,lR)))),128))])):((0,o.wg)(),(0,o.j4)(_,{key:1,label:e.translations.settings.webhooks.empty},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{mode:"raised",icon:"add",class:"md-primary md-raised",onClick:n.addWebhook},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.actions.addNew),1)])),_:1},8,["onClick"])])),_:1},8,["label"])),(0,o.Wm)(v,{ref:"confirmDelete"},{default:(0,o.w5)((()=>[(0,o.Wm)(y,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.confirmDelete),1)])),_:1}),s.deletedIndex||0===s.deletedIndex?((0,o.wg)(),(0,o.j4)(w,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.settings.webhooks.webhooks[s.deletedIndex].title),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o.Wm)(x,{action:"dismiss",onClick:n.cancelDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.confirmDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(x,{action:"accept",onClick:n.deleteWebhook},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.confirmDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512)],64)):((0,o.wg)(),(0,o.j4)(b,{key:1}))])}var pR={name:"SettingsWebhooksList",components:{SettingsHeader:zO,SettingNotEnabled:GU},data(){return{deletedIndex:null,openMenu:{}}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"])},methods:{actionMenuHandler(e){this.openMenu={},this.openMenu[e]=!0},addWebhook(){this.$router.push({name:"webhook-single"})},editWebhook(e){this.$router.push({name:"webhook-single",params:{index:e}})},cloneWebhook(e){this.cloneSettingsWebhook({index:e,settings:this.settings}),this.updateWebhooksSettings(),this.$router.push({name:"webhook-single",params:{index:this.settings.webhooks.webhooks.length-1}})},deleteWebhook(){this.deleteSettingsWebhook({index:this.deletedIndex,settings:this.settings}),this.deletedIndex=null,this.$refs["confirmDelete"].close(),this.updateWebhooksSettings()},confirmDelete(e){this.deletedIndex=e,this.$refs["confirmDelete"].open()},cancelDelete(){this.$refs["confirmDelete"].close()},...(0,m.OI)("webhooks",["deleteSettingsWebhook","cloneSettingsWebhook"]),...(0,m.nv)("webhooks",["updateWebhooksSettings"])}};const fR=(0,he.Z)(pR,[["render",dR],["__scopeId","data-v-544b3a67"]]);var uR=fR;const cR={class:"md-title"},hR={class:"md-refreshable"},mR={class:"md-fieldset"},gR={key:0,class:"checkboxes-list-flex-row"},_R={class:"md-fieldset"},yR={class:"foxy-list-default fit-content"},wR={class:"foxy-list-container"},xR={class:"md-fieldset"},CR={class:"checkboxes-list-flex-row"},vR={class:"button-bar"};function bR(e,t,i,l,s,n){const d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-textfield"),f=(0,o.up)("foxy-icon"),u=(0,o.up)("foxy-icon-button"),c=(0,o.up)("foxy-snackbar"),h=(0,o.up)("foxy-checkbox"),m=(0,o.up)("foxy-progress-circular"),g=(0,o.up)("webhook-details"),_=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{onSubmit:t[7]||(t[7]=(0,a.iM)((()=>{}),["prevent"])),class:"webhook-edit"},[(0,o.Wm)(d,{onClick:n.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",cR,[i.index||0===i.index?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.actions.edit),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.webhooks.actions.addNew),1)],64))]),(0,o.Wm)(p,{modelValue:n.title,"onUpdate:modelValue":t[0]||(t[0]=e=>n.title=e),id:"title",label:e.translations.settings.webhooks.fields.title},null,8,["modelValue","label"]),(0,o._)("div",hR,[(0,o.Wm)(p,{modelValue:n.token,"onUpdate:modelValue":t[1]||(t[1]=e=>n.token=e),id:"token",required:"",label:e.translations.settings.webhooks.fields.token,helptext:s.validToken?e.translations.settings.webhooks.fields.token_help:e.translations.settings.webhooks.fields.token_error,"helptext-persistent":"","helptext-validation":"",valid:s.validToken},null,8,["modelValue","label","helptext","valid"]),(0,o.Wm)(u,{class:"foxy-textfield-action-button",onClick:n.refreshToken},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"refresh"})])),_:1},8,["onClick"])]),(0,o.Wm)(c,{position:"top center",modelValue:s.isTokenNoticeVisible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.isTokenNoticeVisible=e),message:e.translations.settings.webhooks.fields.token_copied},null,8,["modelValue","message"]),(0,o._)("fieldset",mR,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.webhooks.fields.triggers)+" *",1),(0,o.wy)((0,o._)("p",{class:"error-message"},(0,r.zw)(e.translations.settings.webhooks.errors.requiredTriggers),513),[[a.F8,!s.validTriggers]]),s.webhookTriggers.length?((0,o.wg)(),(0,o.iD)("div",gR,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.webhookTriggers,((i,a)=>((0,o.wg)(),(0,o.j4)(h,{key:a,id:"trigger-"+a,name:"triggers",value:i.toString(),modelValue:n.triggers,"onUpdate:modelValue":t[3]||(t[3]=e=>n.triggers=e),label:e.translations.settings.webhooks.fields.triggerNames[i],class:"md-primary"},null,8,["id","value","modelValue","label"])))),128))])):(0,o.kq)("",!0)]),(0,o._)("fieldset",_R,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.webhooks.fields.urls)+" *",1),(0,o.wy)((0,o._)("p",{class:"error-message"},(0,r.zw)(e.translations.settings.webhooks.errors.requiredUrls),513),[[a.F8,!s.validUrls]]),(0,o._)("ul",yR,[Object.prototype.hasOwnProperty.call(s.webhook,"urls")&&s.webhook.urls.length?((0,o.wg)(!0),(0,o.iD)(o.HY,{key:0},(0,o.Ko)(s.webhook.urls,((e,t)=>((0,o.wg)(),(0,o.iD)("li",{key:t},[(0,o._)("div",wR,[(0,o._)("span",null,[(0,o.Wm)(f,{icon:"link"})]),(0,o._)("span",null,(0,r.zw)(e),1),(0,o.Wm)(u,{class:"md-icon-button md-list-action",onClick:e=>n.removeUrl(t)},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{icon:"clear",class:"md-primary"})])),_:2},1032,["onClick"])])])))),128)):(0,o.kq)("",!0)]),(0,o.Wm)(p,{placeholder:"https://",id:"label",modelValue:s.url,"onUpdate:modelValue":t[4]||(t[4]=e=>s.url=e),onKeyup:n.addUrl,onChange:n.addUrl,label:"Add URL",helptext:s.urlExists?e.translations.settings.webhooks.fields.url_exists:s.validUrl?"":e.translations.settings.webhooks.fields.url_invalid,"helptext-persistent":"","helptext-validation":"",valid:s.validUrls&&!s.urlExists&&s.validUrl},null,8,["modelValue","onKeyup","onChange","helptext","valid"])]),(0,o._)("fieldset",xR,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.appointmentTypesTitle)+" *",1),(0,o.wy)((0,o._)("p",{class:"error-message"},(0,r.zw)(e.translations.settings.webhooks.errors.requiredAppointmentTypes),513),[[a.F8,!s.validAppointmentTypes]]),(0,o._)("div",CR,[(0,o.Wm)(h,{modelValue:s.all,"onUpdate:modelValue":t[5]||(t[5]=e=>s.all=e),label:e.translations.settings.appointmentTypeAll,onToggle:n.toggleAll},null,8,["modelValue","label","onToggle"]),s.all?(0,o.kq)("",!0):((0,o.wg)(!0),(0,o.iD)(o.HY,{key:0},(0,o.Ko)(e.editableAppointmentTypes,(e=>((0,o.wg)(),(0,o.j4)(h,{key:e.id,id:"type-"+e.id,name:"appointment-types",value:e.id.toString(),modelValue:n.appointment_types,"onUpdate:modelValue":t[6]||(t[6]=e=>n.appointment_types=e),label:e.title,class:"md-primary"},null,8,["id","value","modelValue","label"])))),128))])]),(0,o._)("div",vR,[(0,o.Wm)(d,{mode:"secondary",onClick:n.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(d,{mode:"raised",onClick:n.saveWebhook},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["onClick"]),s.saving?((0,o.wg)(),(0,o.j4)(m,{key:0,indeterminate:"",medium:""})):(0,o.kq)("",!0)]),(0,o.Wm)(g,{index:this.index},null,8,["index"])],32),(0,o.Wm)(_,{ref:"confirmLeaveDirty",title:e.translations.settings.webhooks.confirmIgnoreChangesTitle,"content-html":e.translations.settings.webhooks.confirmIgnoreChangesContent,"ok-text":e.translations.settings.webhooks.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.webhooks.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"])])}i(95194),i(79976),i(54302),i(1274);const BR={class:"webhook-details"},SR=(0,o._)("hr",{class:"foxy-divider"},null,-1),kR={class:"md-title"},AR={class:"foxy-table mdc-theme-name--default"},MR=(0,o._)("tbody",null,[(0,o._)("tr",null,[(0,o._)("td",null,[(0,o._)("code",null,"Content-Type")]),(0,o._)("td",null,"application/json; charset=utf-8")])],-1),DR={class:"md-title"},TR=(0,o._)("pre",null,[(0,o._)("code",null,'{\n "action": "appointment_booked", // possible values of `appointment_booked`, `appointment_edited`, `appointment_canceled`\n "action_noun": "appointment",\n "action_verb": "booked", // possible values of `booked`, `edited`, `canceled`\n "appointment": {\n "id": "123", // Unique ID to reference this appointment\n "appointment_type_id": "36", // Unique value that is consistent even if the type\'s name/slug changes\n "appointment_type_slug": "2hr-call",\n "customer_id": "1",\n "customer_information": {\n "Name": "Nathan Tyler",\n "Email": "nathan@tylerdigital.com"\n // values from your custom fields will also be included here\n },\n "post_information": [],\n "customer_timezone": "Asia/Beirut",\n "start_date": "2018-09-20 16:15:00", // all dates are stored in the UTC timezone\n "end_date": "2018-09-20 18:15:00",\n "status": "booked", // possible values of `booked` or `canceled`\n "date_created": "2018-09-19 01:00:44",\n "date_modified": "2018-09-19 01:00:44",\n "public_edit_url": "http://yoursite.com/appointments/change/e7b9a0a37d18e86ef11b2da12345678900",\n "price_full": 100.00,\n "payment_method": "stripe",\n "web_meeting_url": "https://your-web-meeting-url.com/url/j.php?MTID=m89e2d3199fc229a01732c0964bf48c03",\n "web_meeting_password": "your-meeting-password",\n "appointment_type_title": "2hr Call",\n "local_time_for": {\n "appointment_type": {\n "raw": {\n "start_date": "2023-10-10 10:00:00",\n "end_date": "2023-10-10 11:00:00",\n "date_created": "2023-10-04 22:04:42",\n "date_modified": "2023-10-04 22:04:44"\n },\n "raw_parts": {\n "start_date": {\n "date": "2023-10-10",\n "time": "10:00:00",\n "timezone": "Asia/Beirut",\n "timezone_offset": "+0300"\n },\n "end_date": {\n "date": "2023-10-10",\n "time": "11:00:00",\n "timezone": "Asia/Beirut",\n "timezone_offset": "+0300"\n },\n "date_created": {\n "date": "2023-10-04",\n "time": "22:04:42",\n "timezone": "Asia/Beirut",\n "timezone_offset": "+0300"\n },\n "date_modified": {\n "date": "2023-10-04",\n "time": "22:04:44",\n "timezone": "Asia/Beirut",\n "timezone_offset": "+0300"\n }\n },\n "formatted": {\n "start_date": "October 10, 2023 10:00 am EEST",\n "end_date": "October 10, 2023 11:00 am EEST",\n "date_created": "October 4, 2023 10:04 pm EEST",\n "date_modified": "October 4, 2023 10:04 pm EEST"\n },\n "formatted_parts": {\n "start_date": {\n "date": "October 10, 2023",\n "time": "10:00 am",\n "timezone": "EEST"\n },\n "end_date": {\n "date": "October 10, 2023",\n "time": "11:00 am",\n "timezone": "EEST"\n },\n "date_created": {\n "date": "October 4, 2023",\n "time": "10:04 pm",\n "timezone": "EEST"\n },\n "date_modified": {\n "date": "October 4, 2023",\n "time": "10:04 pm",\n "timezone": "EEST"\n }\n }\n }\n }\n },\n "team_members": [\n {\n "id": 1,\n "wp_user_id": "2",\n "name": "John",\n "display_name": "John",\n "email": "your-email@example.com"\n }\n ],\n // MemberPress integration; In case the appointment is booked under a specific membership\n "mepr_membership": {\n "id": 1,\n "title": "Premium"\n },\n "meta": [],\n "signature": {\n "token": "1a2b3c4d5e6f..." // so you can verify that the delivered webhook originated from this site\n "site_name": "This WordPress Site" // in case you have multiple sites sharing the same webhook\n "home_url": "https://thissite\'shome.com" // the homepage URL for your website\n "site_url": "https://thissite.com" // in case you have multiple sites sharing the same webhook\n "network_site_url": "1a2b3c4d5e6f..." // only different than `site_url` if using multisite\n }\n}\n')],-1);function OR(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("div",BR,[SR,(0,o._)("h3",kR,(0,r.zw)(e.translations.settings.webhooks.details.deliveryHeaders),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.webhooks.details.deliveryDetails),1),(0,o._)("div",AR,[(0,o._)("table",null,[(0,o._)("thead",null,[(0,o._)("tr",null,[(0,o._)("th",null,(0,r.zw)(e.translations.settings.webhooks.details.deliveryDetailHeader),1),(0,o._)("th",null,(0,r.zw)(e.translations.settings.webhooks.details.deliveryDetailDescription),1)])]),MR])]),(0,o._)("h3",DR,(0,r.zw)(e.translations.settings.webhooks.details.deliveryExample),1),TR])}var GR={name:"WebhookDetails",props:["index"],data(){return{}},computed:{...(0,m.rn)("translations",["translations"])}};const ER=(0,he.Z)(GR,[["render",OR]]);var UR=ER,FR={name:"WebhookEdit",props:["index"],components:{WebhookDetails:UR},data(){return{all:!0,dirty:!1,saving:!1,webhook:{},webhookTriggers:P,url:"",urlExists:!1,validAppointmentTypes:!0,validToken:!0,validTriggers:!0,validUrl:!0,validUrls:!0,leaveWithoutSaving:!1,isTokenNoticeVisible:!1,routerNext:null}},beforeMount(){if(this.index||0===this.index){let e=wa().cloneDeep(this.settings.webhooks.webhooks[this.index]);this.webhook=e}Object.prototype.hasOwnProperty.call(this.webhook,"token")&&this.webhook.token||this.refreshToken(),Object.prototype.hasOwnProperty.call(this.webhook,"triggers")||(this.webhook.triggers=[]),Object.prototype.hasOwnProperty.call(this.webhook,"urls")||(this.webhook.urls=[]),Object.prototype.hasOwnProperty.call(this.webhook,"appointment_types")||(this.webhook.appointment_types=[]),Object.prototype.hasOwnProperty.call(this.webhook,"appointment_types")&&this.webhook.appointment_types.length&&(this.all=!1),Object.prototype.hasOwnProperty.call(this.webhook,"schema")||(this.webhook.schema="2018-09-20")},beforeRouteLeave(e,t,i){if(this.dirty){let e="confirmLeaveDirty";this.$refs[e].open(),this.routerNext=i}else i()},watch:{webhook:{handler:function(e,t){this.dirty=!wa().isEmpty(t)},deep:!0}},computed:{title:{get(){return Object.prototype.hasOwnProperty.call(this.webhook,"title")?this.webhook.title:""},set(e){this.webhook.title=e}},token:{get(){return Object.prototype.hasOwnProperty.call(this.webhook,"token")?this.webhook.token:""},set(e){this.webhook.token=e}},triggers:{get(){return this.webhook.triggers},set(e){this.webhook.triggers=e}},appointment_types:{get(){return this.webhook.appointment_types},set(e){this.webhook.appointment_types=e}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes"])},methods:{cancelEdit(){this.$router.push("/ssa/settings/webhooks/list")},generateToken(){let e=new Uint8Array(12);return window.crypto.getRandomValues(e),Array.from(e,(e=>("0"+e.toString(16)).substr(-2))).join("")},refreshToken(){let e=this.generateToken();this.webhook.token=e},isValidUrl(e){try{let t=e;return t.toLowerCase(),t=new URL(e),!0}catch(t){return!1}},addUrl(e){if(this.validUrl=!0,"keyup"===e.type&&13!==e.keyCode)return;if(!this.url)return;if(!this.isValidUrl(this.url))return void(this.validUrl=!1);let t=Object.prototype.hasOwnProperty.call(this.webhook,"urls")?this.webhook.urls.slice(0):[],i=t.findIndex((e=>e===this.url));i>-1?this.urlExists=!0:(this.urlExists=!1,t.push(this.url),this.webhook.urls=t,this.validateRequiredFields(),this.url="")},removeUrl(e){let t=this.webhook.urls.slice(0);t.splice(e,1),this.webhook.urls=t},validateRequiredFields(){this.validTriggers=this.webhook.triggers.length,this.validUrls=this.webhook.urls.length,this.validAppointmentTypes=this.webhook.appointment_types.length||this.all,this.validToken=this.webhook.token.length},saveWebhook(){this.validateRequiredFields(),this.validUrls&&this.validTriggers&&this.validAppointmentTypes&&this.validToken&&(this.saving=!0,this.index||0===this.index?this.updateSingleWebhook({index:this.index,webhook:this.webhook,settings:this.settings}):this.addSettingsWebhook({webhook:this.webhook,settings:this.settings}),this.updateWebhooksSettings().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")})))},toggleAll(e){if(e)return void(this.webhook.appointment_types=[]);let t=this.editableAppointmentTypes.map((e=>e.id));this.webhook.appointment_types=t},dialogLeaveWithoutSaving(){this.routerNext()},...(0,m.OI)("webhooks",["updateSingleWebhook","addSettingsWebhook"]),...(0,m.nv)("webhooks",["updateWebhooksSettings"])}};const IR=(0,he.Z)(FR,[["render",bR]]);var zR=IR,PR=[{path:"webhooks",component:tR,redirect:"/ssa/settings/webhooks/list",meta:{ssa_manage_site_settings:!0},children:[{path:"list",name:"webhooks-list",component:uR},{path:"webhook/:index?",name:"webhook-single",component:zR,props:!0}]}];const VR={class:"staff-all"};function WR(e,t,i,a,r,l){const s=(0,o.up)("loading"),n=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",VR,[r.loading?((0,o.wg)(),(0,o.j4)(s,{key:0,message:e.translations.settings.staff.loading},null,8,["message"])):((0,o.wg)(),(0,o.j4)(n,{key:1}))])}var RR={name:"StaffAll",components:{Loading:ge},data(){return{loading:!0}},mounted(){this.init()},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("staff",["staff","users"])},methods:{init(){return"undefined"===typeof this.staff?(this.loading=!0,void this.fetchStaff().then((()=>this.init())).catch((e=>{console.log("Error loading staff",e)}))):this.users?void(this.loading=!1):(this.loading=!0,void this.fetchUsers().then((()=>this.init())).catch((e=>{console.log("Error loading WP users",e)})))},...(0,m.nv)("staff",["fetchStaff","fetchUsers"])}};const LR=(0,he.Z)(RR,[["render",WR]]);var jR=LR;const qR={class:"staff-listing"},NR=(0,o._)("div",{style:{flex:"1"}},null,-1),$R={key:0,class:"search"},HR={class:"screen-reader-text"},ZR={for:"filterSearchInput",class:"screen-reader-text"},YR={class:"screen-reader-text"},KR={key:1,class:"staff-list"},JR=["onClick"],XR=["src"],QR={class:"md-list-item-container"},eL={class:"md-list-text-container"},tL=["href"],iL={class:"screen-reader-text"},aL={key:1},oL={class:"inline-staff-error-notice"},rL={key:0};function lL(e,t,i,l,s,n){const d=(0,o.up)("settings-header"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-select"),u=(0,o.up)("foxy-icon"),c=(0,o.up)("foxy-icon-button"),h=(0,o.up)("foxy-button"),m=(0,o.up)("foxy-toolbar"),g=(0,o.up)("foxy-dialog-title"),_=(0,o.up)("foxy-dialog-button"),y=(0,o.up)("foxy-dialog-footer"),w=(0,o.up)("foxy-dialog"),x=(0,o.up)("foxy-empty"),C=(0,o.up)("foxy-avatar"),v=(0,o.up)("foxy-menu"),b=(0,o.up)("foxy-menu-anchor");return(0,o.wg)(),(0,o.iD)("div",qR,[(0,o.Wm)(d),(0,o.Wm)(m,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{fullwidth:!1,style:{width:"300px"},class:"title",name:"staff-view",id:"staff-view",modelValue:s.staffView,"onUpdate:modelValue":t[0]||(t[0]=e=>s.staffView=e),label:e.translations.settings.staff.selectStaff},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{"data-value":"publish",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.title),1)])),_:1}),(0,o.Wm)(p,{"data-value":"draft",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.status.inactive),1)])),_:1})])),_:1},8,["modelValue","label"]),NR,s.searching?((0,o.wg)(),(0,o.iD)("div",$R,[(0,o.Wm)(c,{onClick:n.closeSearch},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"keyboard_arrow_left"}),(0,o._)("span",HR,(0,r.zw)(e.translations.settings.staff.search.closeSearch),1)])),_:1},8,["onClick"]),(0,o._)("label",ZR,(0,r.zw)(e.translations.settings.staff.search.searchLabel),1),(0,o.wy)((0,o._)("input",{ref:"searchInput",type:"text",id:"filterSearchInput","onUpdate:modelValue":t[1]||(t[1]=e=>n.searchString=e),placeholder:"Search"},null,512),[[a.nr,n.searchString]]),(0,o.wy)((0,o.Wm)(c,{class:"clearFilterSearchInput",onClick:t[2]||(t[2]=e=>n.searchString=""),size:"small"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"close"}),(0,o._)("span",YR,(0,r.zw)(e.translations.settings.staff.search.clearSearch),1)])),_:1},512),[[a.F8,n.searchString]])])):(0,o.kq)("",!0),(0,o._)("div",null,[s.searching?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(h,{key:0,ref:"openSearchButton",class:"md-primary",onClick:n.openSearch,indicator:""!=n.searchString,icon:"search"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.appointments.filter.search),1)])),_:1},8,["onClick","indicator"])),(0,o.Wm)(h,{class:"md-primary",onClick:n.addStaff,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.actions.addNew),1)])),_:1},8,["onClick"])])])),_:1}),(0,o.Wm)(w,{ref:"confirmDelete"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.confirmDelete),1)])),_:1}),(0,o.Wm)(y,null,{default:(0,o.w5)((()=>[(0,o.Wm)(_,{action:"dismiss",onClick:n.cancelDelete},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.confirmDeleteCancel),1)])),_:1},8,["onClick"]),(0,o.Wm)(_,{action:"accept",onClick:n.deleteSelectedStaff},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.confirmDeleteOk),1)])),_:1},8,["onClick"])])),_:1})])),_:1},512),n.displayStaff.length?((0,o.wg)(),(0,o.iD)("ul",KR,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.displayStaff,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id,class:(0,r.C_)(["list-item",{"status-deleting":t.id===s.pendingId,"hover-off":n.isEditMenuOpened}]),onClick:e=>n.editStaff(t.id,n.isEditMenuOpened)},[(0,o.Wm)(C,{"md-theme":"light-green",class:"border-theme"},{default:(0,o.w5)((()=>[0!==parseInt(t.user_id,10)?((0,o.wg)(),(0,o.iD)("img",{key:0,src:e.userGravatar(t.user_id),alt:""},null,8,XR)):((0,o.wg)(),(0,o.j4)(u,{key:1,class:"md-size-2x",icon:"account_circle"}))])),_:2},1024),(0,o._)("div",QR,[(0,o._)("div",eL,[(0,o._)("span",null,[(0,o.Uk)((0,r.zw)(t.name?t.name:t.display_name)+" ",1),0!==parseInt(t.user_id,10)?((0,o.wg)(),(0,o.iD)("a",{key:0,href:e.wpUserLink(t.user_id),class:"staff-wp-indicator"},[(0,o.Uk)(" WP "),(0,o._)("span",iL,(0,r.zw)(e.translations.settings.staff.connectedUserEdit),1)],8,tL)):(0,o.kq)("",!0),t.error?.missing_refresh_token||t.error?.google_calendar_get_events_for_staff?((0,o.wg)(),(0,o.iD)("span",aL,[(0,o._)("u",oL,[(0,o.Wm)(u,{icon:"error",theme:e.$theme.error},null,8,["theme"]),(0,o._)("span",null,(0,r.zw)(e.translations.settings.staff.requireGcalReconnect),1)])])):(0,o.kq)("",!0)]),(0,o._)("span",null,(0,r.zw)(t.email),1),e.smsModule.enabled?((0,o.wg)(),(0,o.iD)("span",rL,(0,r.zw)(t.phone),1)):(0,o.kq)("",!0)])]),(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(c,{disabled:s.saving,onClick:(0,a.iM)((e=>n.openEditMenu(t.id)),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"settings"})])),_:2},1032,["disabled","onClick"]),(0,o.Wm)(v,{modelValue:s.openMenu[t.id],"onUpdate:modelValue":e=>s.openMenu[t.id]=e},{default:(0,o.w5)((()=>["publish"===t.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(p,{onClick:e=>n.editStaff(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"]),(0,o.Wm)(p,{onClick:e=>n.toggleStaff(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"block"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.deactivate),1)])),_:2},1032,["onClick"])],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(p,{onClick:e=>n.toggleStaff(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"how_to_reg"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.activate),1)])),_:2},1032,["onClick"]),(0,o.Wm)(p,{onClick:e=>n.confirmDelete(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:2},1032,["onClick"])],64))])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024)],10,JR)))),128))])):((0,o.wg)(),(0,o.j4)(x,{key:0,label:n.emptyLabel,description:n.emptyDescription},{default:(0,o.w5)((()=>["publish"===s.staffView?((0,o.wg)(),(0,o.j4)(h,{key:0,mode:"raised",class:"md-primary",onClick:n.addStaff},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.actions.addNew),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])),_:1},8,["label","description"]))])}var sL={name:"SettingsStaff",components:{SettingsHeader:zO},data(){return{pendingId:null,saving:!1,staffView:"publish",searching:!1,filteredStaff:[],openMenu:{}}},watch:{searchString(e,t){if(e!==t){var i=[];i="publish"===this.staffView?[...this.staffStatusPublish]:[...this.staffStatusDraft];var a=[];for(let t=0;te.id.toString()===this.pendingId.toString()))},searchString:{get(){return this.search},set(e){this.setSearch(e)}},isEditMenuOpened(){return Object.keys(this.openMenu).length>0&&Object.values(this.openMenu).some((e=>!0===e))},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["api","settings"]),...(0,m.rn)("staff",["staff","search"]),...(0,m.Se)("appointments",["wpUserLink"]),...(0,m.Se)("staff",["staffStatusDraft","staffStatusPublish","userGravatar"]),...(0,m.Se)("notifications",["smsModule"])},methods:{addStaff(){this.defineNewStaffMember(),this.$router.push({name:"staff-single"})},cancelDelete(){this.$refs["confirmDelete"].close(),this.pendingId=null},confirmDelete(e){this.$refs["confirmDelete"].open(),this.pendingId=e},deleteSelectedStaff(){let e=this.pendingId;this.pendingId=null,this.$refs["confirmDelete"].close(),this.deleteStaff(e).then((()=>{})).catch((e=>{console.log(e)}))},editStaff(e,t=!1){if(t)return;if(this.saving)return;if(this.pendingId)return;let i=this.staff.find((t=>t.id===e));this.setCurrentStaff(i),this.$router.push({name:"staff-single",params:{id:e}})},toggleStaff(e){if(this.saving)return;this.saving=!0,this.pendingId=e;let t=this.staff.find((t=>t.id===e));this.setCurrentStaff(t);let i="publish"===t.status?"draft":"publish";this.setCurrentStaff({key:"status",value:i}),this.saveStaff().then((()=>{this.saving=!1,this.pendingId=null})).catch((e=>{console.log(e)}))},openSearch(){this.searching=1,this.$nextTick((()=>this.$refs.searchInput.focus())),document.addEventListener("keydown",this.keyPressEsc)},keyPressEsc(e){"Escape"===e.key&&(this.closeSearch(),document.removeEventListener("keydown",this.keyPressEsc))},closeSearch(){this.searchString="",this.searching=0,this.$nextTick((()=>this.$refs.openSearchButton?.$el.querySelector("button")?.focus()))},openEditMenu(e){this.openMenu={},this.openMenu[e]=!0},...(0,m.nv)("staff",["deleteStaff","saveStaff"]),...(0,m.OI)("staff",["defineNewStaffMember","setCurrentStaff","setSearch"]),...(0,m.nv)("guides",["getGuides"])}};const nL=(0,he.Z)(sL,[["render",lL]]);var dL=nL;const pL={style:{width:"fit-content"}},fL={class:"md-title"},uL={class:"button-bar"};function cL(e,t,i,l,s,n){const d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-snackbar"),f=(0,o.up)("loading"),u=(0,o.up)("user-selector"),c=(0,o.up)("edit-contact"),h=(0,o.up)("foxy-tab-item"),m=(0,o.up)("edit-permissions"),g=(0,o.up)("foxy-empty"),_=(0,o.up)("edit-availability"),y=(0,o.up)("edit-web-meetings"),w=(0,o.up)("foxy-tabs"),x=(0,o.up)("foxy-progress-circular"),C=(0,o.up)("foxy-dialog-confirm");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("form",{onSubmit:t[1]||(t[1]=(0,a.iM)((()=>{}),["prevent"])),novalidate:"",class:(0,r.C_)(["staff-edit",{saving:s.saving}])},[(0,o._)("div",pL,[e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.j4)(d,{key:0,onClick:n.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)]),(0,o._)("h2",fL,(0,r.zw)(n.pageTitle),1),(0,o.Wm)(p,{position:"top center",modelValue:s.isSaveStatusVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>s.isSaveStatusVisible=e),message:e.translations.settings.staff.actions.saved},null,8,["modelValue","message"]),s.loading?((0,o.wg)(),(0,o.j4)(f,{key:0,message:e.translations.settings.staff.loading},null,8,["message"])):i.id?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(w,{ref:"staffTabs"},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{label:e.translations.settings.staff.editProfile.contact,class:"tab-edit-contact"},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{onValidationCheck:n.validateContact,"available-email":s.availableEmail,"user-id":e.userId,saving:s.saving},null,8,["onValidationCheck","available-email","user-id","saving"])])),_:1},8,["label"]),e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.j4)(h,{key:0,label:e.translations.settings.staff.editProfile.permissions},{default:(0,o.w5)((()=>[0!==e.userId?((0,o.wg)(),(0,o.j4)(m,{key:0,id:i.id,"user-id":e.userId,saving:s.saving},null,8,["id","user-id","saving"])):((0,o.wg)(),(0,o.j4)(g,{key:1,label:e.translations.settings.staff.not_connected.title,description:e.translations.settings.staff.not_connected.desc},{default:(0,o.w5)((()=>[(0,o._)("p",null,(0,r.zw)(e.currentStaff.email),1),(0,o.Wm)(d,{href:e.api.admin_url+"user-new.php",class:"md-raised md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.not_connected.addNew),1)])),_:1},8,["href"])])),_:1},8,["label","description"]))])),_:1},8,["label"])):(0,o.kq)("",!0),(0,o.Wm)(h,{label:e.translations.settings.staff.editProfile.availability},{default:(0,o.w5)((()=>[(0,o.Wm)(_,{"all-appointment-types":s.allAppointmentTypes,onToggleAll:n.toggleAllAppointmentTypes,id:i.id},null,8,["all-appointment-types","onToggleAll","id"])])),_:1},8,["label"]),(0,o.Wm)(h,{label:e.translations.settings.staff.editProfile.web_meetings},{default:(0,o.w5)((()=>[(0,o.Wm)(y)])),_:1},8,["label"])])),_:1},512),(0,o._)("div",uL,[(0,o.Wm)(d,{mode:"secondary",disabled:s.saving,onClick:n.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(d,{mode:"raised",class:"md-primary",disabled:s.saving,onClick:n.saveStaffForm},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.save),1)])),_:1},8,["disabled","onClick"]),s.saving?((0,o.wg)(),(0,o.j4)(x,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])],64)):((0,o.wg)(),(0,o.j4)(u,{key:1,onCreateUser:n.createStaffFromEmail,disabled:s.saving,label:e.translations.settings.staff.fields.email.label,help:e.translations.settings.staff.fields.email.help},null,8,["onCreateUser","disabled","label","help"]))],34),(0,o.Wm)(C,{ref:"confirmLeaveDirty",title:e.translations.settings.staff.confirmIgnoreChangesTitle,"content-html":e.translations.settings.staff.confirmIgnoreChangesContent,"ok-text":e.translations.settings.staff.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.staff.confirmIgnoreChangesCancel,onConfirm:n.dialogLeaveDirty},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),(0,o.Wm)(C,{ref:"confirmLeaveIncomplete",title:e.translations.settings.staff.confirmDelete,"content-html":e.translations.settings.staff.confirmImcompleteContent,"ok-text":e.translations.settings.staff.confirmDeleteOk,"cancel-text":e.translations.settings.staff.confirmIncompleteCancel,onConfirm:n.dialogLeaveIncomplete},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),(0,o.Wm)(C,{ref:"existingStaff",title:s.editExistingText["title"],"content-html":s.editExistingText["content-html"],"ok-text":s.editExistingText["ok-text"],"cancel-text":s.editExistingText["cancel-text"],onConfirm:n.existingStaffConfirm,onCancel:n.existingStaffCancel},null,8,["title","content-html","ok-text","cancel-text","onConfirm","onCancel"]),(0,o.Wm)(C,{ref:"linkToUser",title:e.translations.settings.staff.linkUser.title,"content-html":"

"+e.translations.settings.staff.linkUser.htmlIntro+"

"+e.translations.settings.staff.fields.name.label+": "+s.currentUser.name+"
"+e.translations.settings.staff.fields.email.label+": "+s.currentUser.email+"

"+e.translations.settings.staff.linkUser.htmlExplanation+"

","ok-text":e.translations.settings.staff.linkUser.okText,"cancel-text":e.translations.settings.staff.linkUser.cancelText,onConfirm:n.linkToUserConfirm,onCancel:n.linkToUserCancel},null,8,["title","content-html","ok-text","cancel-text","onConfirm","onCancel"]),(0,o.Wm)(C,{ref:"emailTaken",title:e.translations.settings.staff.emailTaken.title,"content-html":e.translations.settings.staff.emailTaken["content-html"]},null,8,["title","content-html"])])}const hL={style:{"margin-bottom":"10px"}};function mL(e,t,i,l,s,n){const d=(0,o.up)("foxy-autocomplete"),p=(0,o.up)("foxy-textfield"),f=(0,o.up)("foxy-layout"),u=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.j4)(f,{"md-vertical-align":"center","md-gutter":16},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[e.unattachedUsers.length?((0,o.wg)(),(0,o.j4)(d,{key:0,modelValue:s.selectedEmail,"onUpdate:modelValue":t[0]||(t[0]=e=>s.selectedEmail=e),suggestions:e.unattachedUsers,"print-attribute":"email",onSelected:n.userCallback,disabled:i.disabled,label:i.label,helptext:s.error?e.translations.settings.staff.fields.email.error:i.help,"helptext-persistent":"","helptext-validation":"",valid:!s.error},null,8,["modelValue","suggestions","onSelected","disabled","label","helptext","valid"])):((0,o.wg)(),(0,o.j4)(p,{key:1,modelValue:s.selectedEmail,"onUpdate:modelValue":t[1]||(t[1]=e=>s.selectedEmail=e),onChange:n.userCallback,disabled:i.disabled,label:i.label,helptext:s.error?e.translations.settings.staff.fields.email.error:i.help,"helptext-persistent":"","helptext-validation":"",valid:!s.error},null,8,["modelValue","onChange","disabled","label","helptext","valid"]))])),_:1}),(0,o.Wm)(f,{"md-flex":"none"},{default:(0,o.w5)((()=>[(0,o._)("div",hL,[(0,o.Wm)(u,{mode:"raised",class:"md-primary",disabled:i.disabled,onKeydown:(0,a.D2)((0,a.iM)(n.handleCreate,["prevent"]),["enter"]),onClick:n.handleCreate},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.actions.create),1)])),_:1},8,["disabled","onKeydown","onClick"])])])),_:1})])),_:1})}var gL={name:"UserSelector",components:{},props:{disabled:{type:Boolean},help:{type:String,default:""},label:{type:String,default:""},value:{type:String,default:""}},data(){return{error:!1,selectedDisplayName:null,selectedEmail:null,selectedUser:null}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("staff",["users"]),...(0,m.Se)("notifications",["validateEmail"]),...(0,m.Se)("staff",["unattachedUsers"])},methods:{handleCreate(){this.selectedEmail&&this.validateEmail(this.selectedEmail)?(this.error=!1,this.$emit("createUser",{user_id:this.selectedUser,email:this.selectedEmail,display_name:this.selectedDisplayName})):this.error=!0},userCallback(e){if("object"===typeof e&&Object.prototype.hasOwnProperty.call(e,"email"))return this.selectedEmail=e.email.toLowerCase(),this.selectedUser=e.id,void(this.selectedDisplayName=e.display_name);if(!this.validateEmail(e))return;this.error=!1,this.selectedEmail=e;let t=this.users.find((e=>e.email.toLowerCase()===this.selectedEmail));this.selectedUser=t?t.id:0,this.selectedDisplayName=t?t.display_name:""},...(0,m.nv)("staff",["fetchUsers"])}};const _L=(0,he.Z)(gL,[["render",mL]]);var yL=_L;const wL={class:"edit-staff-contact"},xL={class:"md-title",style:{flex:"1"}};function CL(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield"),d=(0,o.up)("foxy-toolbar"),p=(0,o.up)("foxy-phone-field"),f=(0,o.up)("foxy-checkbox");return(0,o.wg)(),(0,o.iD)("div",wL,[0===i.userId?((0,o.wg)(),(0,o.j4)(n,{key:0,modelValue:l.v$.name.$model,"onUpdate:modelValue":t[0]||(t[0]=e=>l.v$.name.$model=e),disabled:i.saving,id:"name",required:"",label:e.translations.settings.staff.fields.name.label,helptext:l.v$.name.$error?e.translations.settings.staff.fields.name.error:"","helptext-persistent":"","helptext-validation":"",valid:!l.v$.name.$error},null,8,["modelValue","disabled","label","helptext","valid"])):(0,o.kq)("",!0),0!==i.userId?((0,o.wg)(),(0,o.j4)(d,{key:1,class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("h3",xL,(0,r.zw)(e.translations.settings.staff.connectedUser),1)])),_:1})):(0,o.kq)("",!0),(0,o.Wm)(n,{modelValue:l.v$.display_name.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.display_name.$model=e),disabled:i.saving,id:"display_name",required:"",label:e.translations.settings.staff.fields.display_name.label,helptext:l.v$.display_name.$error?e.translations.settings.staff.fields.display_name.error:e.translations.settings.staff.fields.display_name.help,"helptext-persistent":"","helptext-validation":"",valid:!l.v$.display_name.$error},null,8,["modelValue","disabled","label","helptext","valid"]),(0,o.Wm)(n,{modelValue:l.v$.email.$model,"onUpdate:modelValue":t[2]||(t[2]=e=>l.v$.email.$model=e),id:"email",disabled:i.saving||0!==i.userId,required:"",label:e.translations.settings.staff.fields.email.label,helptext:i.availableEmail?l.v$.email.$error?e.translations.settings.staff.fields.email.error:"":e.translations.settings.staff.fields.email.errorTaken,"helptext-persistent":"","helptext-validation":"",valid:!l.v$.email.$error&&i.availableEmail},null,8,["modelValue","disabled","label","helptext","valid"]),e.smsModule.active?((0,o.wg)(),(0,o.j4)(p,{key:2,modelValue:s.phone,"onUpdate:modelValue":t[3]||(t[3]=e=>s.phone=e),modelModifiers:{trim:!0},label:e.translations.settings.staff.fields.phone.label,"input-options":{id:"phone",disabled:i.saving},required:!1,onValidate:s.checkPhone,"helptext-validation":!l.validPhone,helptext:e.translations.settings.general.phone_error,"helptext-persistent":!l.validPhone},null,8,["modelValue","label","input-options","onValidate","helptext-validation","helptext","helptext-persistent"])):(0,o.kq)("",!0),(0,o.Wm)(f,{disabled:e.currentStaff.can_manage_appointments,name:"wpUser",modelValue:s.canLogin,"onUpdate:modelValue":t[4]||(t[4]=e=>s.canLogin=e),label:e.translations.settings.staff.creatUser},null,8,["disabled","modelValue","label"])])}var vL={name:"SettingsContactStaffEdit",props:["userId","saving","availableEmail"],data(){return{v$:(0,Rd.Xw)(),validPhone:!0}},validations:{name:{required:Ld.C1},display_name:{required:Ld.C1},email:{required:Ld.C1,email:Ld.Do}},computed:{display_name:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"display_name")?this.currentStaff.display_name:""},set(e){this.setCurrentStaff({key:"display_name",value:e}),this.validationCheck()}},email:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"email")?this.currentStaff.email.toLowerCase():""},set(e){this.setCurrentStaff({key:"email",value:e.toLowerCase()}),this.validationCheck()}},name:{get(){let e="";return e=0===this.userId?this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"name")?this.currentStaff.name:"":this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"display_name")?this.currentStaff.display_name:"",e},set(e){this.setCurrentStaff({key:"name",value:e}),this.validationCheck()}},phone:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"phone")?this.currentStaff.phone:""},set(e){this.setCurrentStaff({key:"phone",value:e})}},canLogin:{get(){return Ps(this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"can_login")?this.currentStaff.can_login:"")},set(e){this.setCurrentStaff({key:"can_login",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("staff",["currentStaff"]),...(0,m.Se)("appointments",["wpUserLink"]),...(0,m.Se)("notifications",["smsModule"])},methods:{checkPhone(e){this.validPhone=e,this.validationCheck()},validationCheck(){this.v$.$touch(),this.$emit("validationCheck",!this.v$.name.$invalid&&!this.v$.display_name.$invalid&&!this.v$.email.$invalid&&this.validPhone)},...(0,m.OI)("staff",["setCurrentStaff"])}};const bL=(0,he.Z)(vL,[["render",CL]]);var BL=bL;const SL={class:"edit-staff-permissions"},kL={key:0,class:"md-checkbox-with-note"},AL={key:1,class:"md-checkbox-with-note"},ML={key:2,class:"md-checkbox-with-note"};function DL(e,t,i,a,r,l){const s=(0,o.up)("foxy-checkbox");return(0,o.wg)(),(0,o.iD)("div",SL,[e.settings.blackout_dates.enabled&&0!==i.userId&&e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.iD)("div",kL,[(0,o.Wm)(s,{id:"blackout",name:"blackout",disabled:i.saving||l.adminManagingSelf,modelValue:l.manages_blackout_dates,"onUpdate:modelValue":t[0]||(t[0]=e=>l.manages_blackout_dates=e),label:e.translations.settings.staff.fields.blackout.label},null,8,["disabled","modelValue","label"])])):(0,o.kq)("",!0),0!==i.userId&&e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.iD)("div",AL,[(0,o.Wm)(s,{id:"working-hour-access",name:"working-hour-access",disabled:i.saving||l.adminManagingSelf,modelValue:l.manages_working_hours,"onUpdate:modelValue":t[1]||(t[1]=e=>l.manages_working_hours=e),label:e.translations.settings.staff.fields.manages_working_hours.label},null,8,["disabled","modelValue","label"])])):(0,o.kq)("",!0),e.settings.google_calendar.enabled&&0!==i.userId?((0,o.wg)(),(0,o.iD)("div",ML,[(0,o.Wm)(s,{id:"google-calendar",name:"google-calendar",disabled:i.saving||l.adminManagingSelf,modelValue:l.manages_google,"onUpdate:modelValue":t[2]||(t[2]=e=>l.manages_google=e),label:e.translations.settings.staff.fields.gcalendar.label},null,8,["disabled","modelValue","label"])])):(0,o.kq)("",!0)])}var TL={name:"SettingsPermissionsStaffEdit",props:["userId","saving","id"],data(){return{}},computed:{adminManagingSelf(){return this.currentUserIsSelf&&this.currentUserCan("ssa_manage_staff")},manages_blackout_dates:{get(){return!!this.adminManagingSelf||!(!this.currentStaff||!Object.prototype.hasOwnProperty.call(this.currentStaff,"manages_blackout_dates"))&&!!parseInt(this.currentStaff.manages_blackout_dates,10)},set(e){this.setCurrentStaff({key:"manages_blackout_dates",value:e})}},manages_google:{get(){return!!this.adminManagingSelf||!(!this.currentStaff||!Object.prototype.hasOwnProperty.call(this.currentStaff,"manages_google"))&&!!parseInt(this.currentStaff.manages_google,10)},set(e){this.setCurrentStaff({key:"manages_google",value:e})}},manages_working_hours:{get(){return!!this.adminManagingSelf||!(!this.currentStaff||!Object.prototype.hasOwnProperty.call(this.currentStaff,"manages_working_hours"))&&!!parseInt(this.currentStaff.manages_working_hours,10)},set(e){this.setCurrentStaff({key:"manages_working_hours",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)(["settings"]),...(0,m.rn)("staff",["currentStaff"]),...(0,m.Se)("staff",["currentUserCan","currentUserIsSelf"])},methods:{...(0,m.OI)("staff",["setCurrentStaff"])}};const OL=(0,he.Z)(TL,[["render",DL]]);var GL=OL;const EL={class:"edit-staff-availability"},UL={class:"md-headline"},FL={key:0,class:"md-error"},IL={class:"foxy-list-default"},zL={key:0},PL={class:"md-heading-group"},VL={class:"md-headline"},WL={key:0},RL={key:1},LL={class:"md-heading-group"},jL={class:"md-headline"},qL={class:"md-headline"},NL={class:"md-fieldset field-wrapper"},$L={class:"custom-working-hours-help","aria-live":"polite"},HL={key:0},ZL=(0,o._)("br",null,null,-1),YL={class:"md-headline"},KL={key:0},JL=(0,o._)("br",null,null,-1);function XL(e,t,i,a,l,s){const n=(0,o.up)("foxy-notification"),d=(0,o.up)("foxy-checkbox"),p=(0,o.up)("appointment-type-read-only"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-radio"),c=(0,o.up)("availability-picker"),h=(0,o.up)("foxy-theme"),m=(0,o.up)("foxy-progress-circular"),g=(0,o.up)("google-calendar-auth"),_=(0,o.up)("google-calendar-list");return(0,o.wg)(),(0,o.iD)("div",EL,[e.currentUserCan("ssa_manage_staff")?((0,o.wg)(),(0,o.iD)("fieldset",{key:0,class:(0,r.C_)(["md-fieldset",{"md-fieldset-invalid":!s.validAppointmentTypes}])},[(0,o._)("legend",UL,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1),s.validAppointmentTypes?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",FL,(0,r.zw)(e.translations.settings.staff.fields.appointment_types.error),1)),e.editableAppointmentTypes.length?e.staffAppointmentTypes.length?s.notAllStaff?((0,o.wg)(),(0,o.j4)(n,{key:3,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.notices.someStaffAppointmentTypes),1)])),_:1})):(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(n,{key:2,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.notices.noStaffAppointmentTypes),1)])),_:1})):((0,o.wg)(),(0,o.j4)(n,{key:1,icon:"warning",theme:"amber"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.notices.noAppointmentTypes),1)])),_:1})),(0,o._)("ul",IL,[s.notAllStaff?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("li",zL,[(0,o.Wm)(d,{modelValue:s.allTypes,"onUpdate:modelValue":t[0]||(t[0]=e=>s.allTypes=e),label:e.translations.settings.staff.fields.appointment_types.all},null,8,["modelValue","label"])])),s.allTypes?(0,o.kq)("",!0):((0,o.wg)(!0),(0,o.iD)(o.HY,{key:1},(0,o.Ko)(e.staffAppointmentTypes,(e=>((0,o.wg)(),(0,o.iD)("li",{key:e.id},[(0,o.Wm)(d,{id:"type-"+e.id,name:"appointment-types",value:e.id.toString(),modelValue:s.appointment_types,"onUpdate:modelValue":t[1]||(t[1]=e=>s.appointment_types=e),label:e.title},null,8,["id","value","modelValue","label"])])))),128))])],2)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o._)("div",PL,[(0,o._)("h3",VL,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1)]),s.appointment_types.length?((0,o.wg)(),(0,o.iD)("ul",WL,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.appointment_types,(e=>((0,o.wg)(),(0,o.j4)(p,{key:e.id,id:e},null,8,["id"])))),128))])):((0,o.wg)(),(0,o.iD)("p",RL,(0,r.zw)(e.translations.settings.staff.fields.appointment_types.error_staff),1))],64)),e.settings.blackout_dates.enabled&&(s.canEditOwnBlackoutDates||e.currentUserCan("ssa_manage_staff"))?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o._)("div",LL,[(0,o._)("h3",jL,(0,r.zw)(e.translations.settings.blackout.title),1),(0,o._)("p",null,(0,r.zw)(e.translations.settings.blackout.description),1)]),(0,o.Wm)(f,{tag:"md-button",mode:"raised",class:"md-primary md-raised",to:"/ssa/settings/blackout/"+i.id},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.fields.blackout.editText),1)])),_:1},8,["to"])],64)):(0,o.kq)("",!0),e.currentUserCan("ssa_manage_staff")||s.canEditOwnWorkingHours?((0,o.wg)(),(0,o.iD)(o.HY,{key:3},[(0,o._)("h3",qL,(0,r.zw)(e.translations.settings.staff.fields.working_hours.label),1),(0,o._)("fieldset",NL,[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.staff.fields.custom_working_hours.legend),1),(0,o.Wm)(u,{modelValue:s.custom_working_hours,"onUpdate:modelValue":t[2]||(t[2]=e=>s.custom_working_hours=e),id:"custom_working_hours_off",name:"custom_working_hours",value:!1,"aria-described-by":"custom-working-hours-help"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.fields.custom_working_hours.labelOff),1)])),_:1},8,["modelValue"]),(0,o.Wm)(u,{modelValue:s.custom_working_hours,"onUpdate:modelValue":t[3]||(t[3]=e=>s.custom_working_hours=e),id:"custom_working_hours_on",name:"custom_working_hours",value:!0,"aria-described-by":"custom-working-hours-help"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.fields.custom_working_hours.labelOn),1)])),_:1},8,["modelValue"]),(0,o._)("div",$L,[(0,o._)("p",null,[s.custom_working_hours?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.fields.custom_working_hours.helpOn),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.fields.custom_working_hours.helpOff),1)],64))])])]),s.custom_working_hours?((0,o.wg)(),(0,o.iD)("p",HL,[(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.fields.working_hours.timezone_label),1),(0,o.Uk)(" "+(0,r.zw)(e.formatTimezone(e.settings.global.timezone_string)),1),ZL,(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.fields.working_hours.current_time_label),1),(0,o.Uk)(" "+(0,r.zw)(l.moment.tz(e.settings.global.timezone_string).format(this.settings.global.date_format_moment+" "+this.settings.global.time_format_moment)),1)])):(0,o.kq)("",!0),(0,o.Wm)(h,{theme:"light-green"},{default:(0,o.w5)((()=>[s.custom_working_hours?((0,o.wg)(),(0,o.j4)(c,{key:0,increment:30,modelValue:s.working_hours,"onUpdate:modelValue":t[4]||(t[4]=e=>s.working_hours=e)},null,8,["modelValue"])):(0,o.kq)("",!0)])),_:1})],64)):(0,o.kq)("",!0),s.managesGoogle?((0,o.wg)(),(0,o.iD)(o.HY,{key:4},[(0,o._)("h3",YL,(0,r.zw)(e.translations.wizard.appointmentType.googleCalendar),1),0!==e.userId&&e.currentUserCan("ssa_manage_staff")&&!e.currentUserIsSelf?((0,o.wg)(),(0,o.iD)("p",KL,[s.googleCalendarConnected?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.google.admin.staff_connected)+" ",1),s.calendarsConnected?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.google.admin.staff_calendars)+" ",1),JL,(0,o._)("strong",null,(0,r.zw)(e.translations.settings.staff.google.admin.calendars_connected),1),(0,o.Uk)(" "+(0,r.zw)(e.currentStaff.google.excluded_calendars.length),1)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.google.admin.staff_no_calendars),1)],64)),(0,o._)("div",null,[(0,o.Wm)(f,{onClick:s.disconnectAccount,disabled:l.disconnecting,class:"md-primary"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.disconnect),1)])),_:1},8,["onClick","disabled"])]),l.disconnecting?((0,o.wg)(),(0,o.j4)(m,{key:2,medium:""})):(0,o.kq)("",!0)],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.google.admin.staff_not_connected),1)],64))])):(0,o.kq)("",!0),s.canConnectOwnGoogleAccount?((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[s.googleCalendarConnected?((0,o.wg)(),(0,o.j4)(_,{key:1})):((0,o.wg)(),(0,o.j4)(g,{key:0}))],64)):(0,o.kq)("",!0)],64)):(0,o.kq)("",!0)])}function QL(e,t,i,a,l,s){return(0,o.wg)(),(0,o.iD)("li",null,(0,r.zw)(s.title)+" ("+(0,r.zw)(s.duration)+") ",1)}var ej={props:{id:{type:[Number,String],required:!0}},computed:{appointmentType(){let e=this.appointmentTypes.find((e=>parseInt(e.id,10)===parseInt(this.id,10)));return e},title(){return this.appointmentType?this.appointmentType.title:""},duration(){let e=this.appointmentType?this.appointmentType.duration:0;return this.displayDuration(e)},...(0,m.rn)("appointment_types",["appointmentTypes"]),...(0,m.Se)(["displayDuration"])}};const tj=(0,he.Z)(ej,[["render",QL]]);var ij=tj;function aj(e,t,i,a,l,s){const n=(0,o.up)("foxy-progress-circular"),d=(0,o.up)("foxy-button");return(0,o.wg)(),(0,o.iD)("div",null,[l.saving?((0,o.wg)(),(0,o.j4)(n,{key:0,indeterminate:"",medium:"true",class:"app-spinner"})):((0,o.wg)(),(0,o.j4)(d,{key:1,mode:"raised",class:"md-primary",onClick:s.authorizeGoogle},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.staff.google.actions.connect),1)])),_:1},8,["onClick"]))])}var oj={name:"StaffGoogleCalendarAuth",data(){return{saving:!1}},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("google_calendar",["googleAuthUrl"]),...(0,m.rn)("staff",["currentStaff"])},methods:{authorizeGoogle(){this.saving=!0;const e=window.ssa_is_embed?window.top.location.href:window.location.hostname+window.location.pathname;this.googleCalendarAuth({ssa_redirect:this.$route.path,ssa_base_url:e,staff_id:this.currentStaff.id}).then((()=>{window.ssa_is_embed?window.top.location.href=this.googleAuthUrl:window.location.href=this.googleAuthUrl}))},...(0,m.nv)("google_calendar",["googleCalendarAuth"])}};const rj=(0,he.Z)(oj,[["render",aj]]);var lj=rj;const sj={class:"md-fieldset",style:{"margin-top":"1rem"}},nj={class:"checkboxes-list-flex-row"};function dj(e,t,i,a,l,s){const n=(0,o.up)("loading"),d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-empty"),f=(0,o.up)("foxy-checkbox");return(0,o.wg)(),(0,o.iD)("div",null,[l.loading?((0,o.wg)(),(0,o.j4)(n,{key:0,size:"body",message:l.loadingMessage},null,8,["message"])):l.error?((0,o.wg)(),(0,o.j4)(p,{key:1,label:e.translations.settings.staff.google.check_settings},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{onClick:s.disconnectAccount,mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.disconnect),1)])),_:1},8,["onClick"])])),_:1},8,["label"])):s.googleCalendarConnected?((0,o.wg)(),(0,o.iD)(o.HY,{key:2},[(0,o.Wm)(d,{onClick:s.disconnectAccount,mode:"raised"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.google_calendar.disconnect),1)])),_:1},8,["onClick"]),(0,o._)("fieldset",sj,[(0,o._)("legend",null,(0,r.zw)(e.translations.wizard.appointmentType.checkCalendars),1),(0,o._)("p",null,(0,r.zw)(e.translations.wizard.appointmentType.checkCalendarsDesc),1),(0,o._)("div",nj,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.googleCalendars,(e=>((0,o.wg)(),(0,o.j4)(f,{key:e.gcal_id,modelValue:s.googleCalendarsAvailability,"onUpdate:modelValue":t[0]||(t[0]=e=>s.googleCalendarsAvailability=e),id:e.gcal_id,name:e.gcal_id,value:e.gcal_id.toString(),label:e.summary},null,8,["modelValue","id","name","value","label"])))),128))])])],64)):(0,o.kq)("",!0)])}var pj={name:"StaffGoogleCalendarList",components:{Loading:ge},data(){return{loading:!0,loadingMessage:"",error:!1}},mounted(){this.loadingMessage=this.translations.settings.google_calendar.loadingCalendars,this.setGoogleAccountConnected(),this.googleCalendars.length?this.loading=!1:this.fetchGoogleCalendars({staff_id:this.currentStaff.id}).then((()=>{this.loading=!1})).catch((e=>{console.log(e),this.loading=!1,this.error=!0}))},computed:{googleCalendarConnected(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"google_access_token")&&!wa().isEmpty(this.currentStaff.google_access_token)},googleCalendarsAvailability:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"google")&&Object.prototype.hasOwnProperty.call(this.currentStaff.google,"excluded_calendars")?this.currentStaff.google.excluded_calendars:[]},set(e){let t=this.currentStaff.google||{},i=Object.assign({},t,{excluded_calendars:e});this.setCurrentStaff({key:"google",value:i})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("staff",["currentStaff","googleCalendars"])},methods:{disconnectAccount(){this.loadingMessage=this.translations.settings.google_calendar.disconnecting,this.loading=!0,this.googleCalendarDeauth({staff_id:this.currentStaff.id}).then((()=>{this.loading=!1,this.saveStaff()}))},setGoogleAccountConnected(){let e=this.currentStaff.google||{},t=Object.assign({},e,{connected:this.googleCalendarConnected}),i=JSON.stringify(e),a=JSON.stringify(t);i!==a&&(this.setCurrentStaff({key:"google",value:t}),this.saveStaff())},...(0,m.nv)("google_calendar",["fetchGoogleCalendars"]),...(0,m.nv)("staff",["googleCalendarDeauth","saveStaff"]),...(0,m.OI)("staff",["setCurrentStaff"])}};const fj=(0,he.Z)(pj,[["render",dj]]);var uj=fj,cj={name:"SettingsAvailabilityStaffEdit",props:["id","allAppointmentTypes"],components:{AvailabilityPicker:qp,AppointmentTypeReadOnly:ij,GoogleCalendarAuth:lj,GoogleCalendarList:uj},data(){return{defaultStaff:q,disconnecting:!1,moment:fe()}},computed:{allTypes:{get(){return this.allAppointmentTypes},set(e){this.$emit("toggleAll",e);let t=this.staffAppointmentTypes.map((e=>e.id));this.setCurrentStaff({key:"appointment_types",value:t})}},appointment_types:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"appointment_types")?this.currentStaff.appointment_types.map(String):[]},set(e){this.setCurrentStaff({key:"appointment_types",value:e})}},validAppointmentTypes(){return this.appointment_types.length>0},calendarsConnected(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"google")&&Object.prototype.hasOwnProperty.call(this.currentStaff.google,"excluded_calendars")&&this.currentStaff.google.excluded_calendars.length},canConnectOwnGoogleAccount(){return!(!this.settings.google_calendar.enabled||!Object.prototype.hasOwnProperty.call(this.currentStaff,"google_access_token"))&&(!!this.currentUserIsSelf||this.currentUserIsStaff&&this.currentUserStaffId===this.currentStaff.id&&this.managesGoogle)},canEditOwnBlackoutDates(){return this.currentUserIsStaff&&this.currentUserStaffId===this.currentStaff.id&&Ps(this.currentStaff.manages_blackout_dates)},canEditOwnWorkingHours(){return this.currentUserIsStaff&&this.currentUserStaffId===this.currentStaff.id&&Ps(this.currentStaff.manages_working_hours)},custom_working_hours:{get(){return!(!this.currentStaff||!Object.prototype.hasOwnProperty.call(this.currentStaff,"custom_working_hours"))&&Ps(this.currentStaff.custom_working_hours)},set(e){this.setCurrentStaff({key:"custom_working_hours",value:Ps(e)})}},googleCalendarConnected(){return this.currentUserIsStaff||this.currentUserIsSelf?this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"google_access_token")&&!wa().isEmpty(this.currentStaff.google_access_token):!!(this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"google")&&Object.prototype.hasOwnProperty.call(this.currentStaff.google,"connected"))&&this.currentStaff.google.connected},managesGoogle(){return!(!this.settings.google_calendar.enabled||!this.settings.google_calendar.access_token)&&(!("0"===this.currentStaff.user_id||!Object.prototype.hasOwnProperty.call(this.currentStaff,"manages_google"))&&Ps(this.currentStaff.manages_google))},notAllStaff(){return this.editableAppointmentTypes.length&&this.staffAppointmentTypes.length{this.disconnecting=!1,this.saveStaff()}))},...(0,m.OI)("staff",["setCurrentStaff"]),...(0,m.nv)("staff",["googleCalendarDeauth","saveStaff"])}};const hj=(0,he.Z)(cj,[["render",XL]]);var mj=hj;const gj={class:"edit-staff-web-meetings"},_j={class:"md-headline"},yj={class:"md-fieldset field-wrapper"};function wj(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield");return(0,o.wg)(),(0,o.iD)("div",gj,[(0,o._)("div",null,[(0,o._)("h3",_j,(0,r.zw)(e.translations.settings.staff.webMeetings.headline),1),(0,o._)("fieldset",yj,[(0,o._)("p",null,(0,r.zw)(e.translations.settings.staff.webMeetings.web_meetings_url),1),(0,o.Wm)(n,{modelValue:s.web_meetings_url,"onUpdate:modelValue":t[0]||(t[0]=e=>s.web_meetings_url=e),placeholder:"https://",maxlength:"255",id:"web_meetings_url",label:e.translations.settings.staff.webMeetings.headline},null,8,["modelValue","label"])])])])}var xj={name:"SettingsWebMeetingsEdit",computed:{web_meetings_url:{get(){return this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"web_meetings_url")?this.currentStaff.web_meetings_url:null},set(e){this.setCurrentStaff({key:"web_meetings_url",value:e})}},...(0,m.rn)("translations",["translations"]),...(0,m.rn)("staff",["currentStaff"])},methods:{...(0,m.OI)("staff",["setCurrentStaff"])}};const Cj=(0,he.Z)(xj,[["render",wj]]);var vj=Cj,bj={name:"SettingsStaffEdit",components:{Loading:ge,UserSelector:yL,EditContact:BL,EditPermissions:GL,EditAvailability:mj,EditWebMeetings:vj},props:{id:{type:[Number,String],required:!0}},data(){return{allAppointmentTypes:!0,availableEmail:!0,dirty:!1,currentUser:{name:"",email:""},defaultStaff:q,editExistingText:{title:"","content-html":"Edit","ok-text":"","cancel-text":""},incomplete:!1,loading:!0,linkUser:!1,saving:!1,validContact:!0,leaveWithoutSaving:!1,isSaveStatusVisible:!1,routerNext:null,editExistingStaff:null,user:null}},mounted(){this.onMountOrUpdate(),this.getGuides({"ssasc-plugin-screen":K.teams.edit})},onBeforeRouteUpdate(e,t,i){this.onMountOrUpdate(),this.navigationGuard(e,t,i)},beforeRouteLeave(e,t,i){if(this.incomplete){let e="confirmLeaveIncomplete";return this.$refs[e].open(),void(this.routerNext=i)}if(this.dirty){let e="confirmLeaveDirty";return this.$refs[e].open(),void(this.routerNext=i)}i()},watch:{currentStaffString(e,t){this.dirty=t!==e,this.incomplete=e&&0===parseInt(this.currentStaff.user_id,10)&&(!this.currentStaff.name||!this.currentStaff.display_name)}},computed:{currentStaffString(){return JSON.stringify(this.currentStaff)},name(){let e="";return e=0===this.userId?this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"name")?this.currentStaff.name:"":this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"display_name")?this.currentStaff.display_name:"",e},notAllStaff(){return this.editableAppointmentTypes.length&&this.staffAppointmentTypes.length{i.focus()}),200)},cancelEdit(){this.currentUserCan("ssa_manage_staff")?this.$router.push("/ssa/settings/staff"):this.$router.push("/ssa/appointments")},checkEmail(){let e=this.currentStaff&&Object.prototype.hasOwnProperty.call(this.currentStaff,"email")?this.currentStaff.email.toLowerCase():"",t=this.staff.find((e=>e.id===this.currentStaff.id)).email.toLowerCase(),i=this.staff.map((e=>e.email?e.email.toLowerCase():"")),a=i.filter((e=>e!==t));if(this.availableEmail=a.indexOf(e)<0,!this.availableEmail){let e="emailTaken";return void this.$refs[e].open()}if(0!==parseInt(this.currentStaff.user_id,10))return;let o=this.users.find((t=>e===t.email.toLowerCase()));if(o&&!this.linkUser){this.user=o,this.availableEmail=!1,this.currentUser={name:o.display_name,email:o.email.toLowerCase()};let e="linkToUser";this.$refs[e].open()}},linkToUserConfirm(){let e=this.user;this.availableEmail=!0,this.linkUser=!0,this.setCurrentStaff({key:"user_id",value:e.id}),this.saveStaffForm()},linkToUserCancel(){this.availableEmail=!0,this.linkUser=!1},createStaffFromEmail(e){let t=this.staff.find((t=>t.email.toLowerCase()===e.email.toLowerCase()));t?this.editExisting(t):(this.saving=!0,e=Object.assign({},this.defaultStaff,e),this.setCurrentStaff(e),this.updateAllAppointmentTypes(),this.saveStaff().then((()=>{this.saving=!1,this.$router.push({name:"staff-single",params:{id:this.currentStaff.id}})})))},deleteCurrentStaff(){let e=this.currentStaff.id;this.deleteStaff(e).then((()=>{})).catch((e=>{console.log(e)}))},existingStaffConfirm(){let e=this.editExistingStaff;this.setCurrentStaff(e),"publish"!==e.status&&this.setCurrentStaff({key:"status",value:"publish"}),this.saving=!0,this.saveStaff().then((()=>{this.saving=!1,this.updateAllAppointmentTypes()})).catch((e=>{console.log(e)})),this.$router.push("/ssa/settings/staff/profile/"+e.id)},existingStaffCancel(){this.editExistingStaff=null,this.$router.push("/ssa/settings/staff")},editExisting(e){let t=this.translations.settings.staff.editExisting[e.status];this.editExistingText=t;let i="existingStaff";this.$refs[i].open(),this.editExistingStaff=e},loadStaff(){let e=this.staff.find((e=>parseInt(e.id,10)===parseInt(this.id,10)));this.setCurrentStaff(e)},navigationGuard(e,t,i){this.currentUserCan("ssa_manage_staff")?(e.params.id||this.setCurrentStaff(void 0),i()):this.currentUserIsStaff?this.$router.push("/ssa/settings/staff/profile/"+this.currentUserStaffId):this.$router.push("/ssa")},onMountOrUpdate(){this.id?(this.loadStaff(),Object.prototype.hasOwnProperty.call(this.currentStaff,"appointment_types")&&this.currentStaff.appointment_types.length?(this.loading=!1,this.updateAllAppointmentTypes()):this.fetchSingleStaff(this.id).then((()=>{this.loading=!1,this.updateAllAppointmentTypes()}))):this.loading=!1},saveStaffForm(){if(this.checkEmail(),this.updateAllAppointmentTypes(),!this.validContact||!this.availableEmail)return this.saving=!1,void this.activateContactTab();this.saving=!0,this.saveStaff().then((()=>{this.dirty=!1,this.saving=!1,this.linkUser=!1,this.currentUserCan("ssa_manage_staff")?(this.$router.push("/ssa/settings/staff"),this.fetchUsers(),this.fetchStaff()):this.isSaveStatusVisible=!0})).catch((e=>{console.log("failed to save",e),this.saving=!1}))},toggleAllAppointmentTypes(e){this.allAppointmentTypes=e},updateAllAppointmentTypes(){Object.prototype.hasOwnProperty.call(this.currentStaff,"appointment_types")&&(this.allAppointmentTypes=this.currentStaff.appointment_types.length===this.editableAppointmentTypes.length,this.notAllStaff&&(this.allAppointmentTypes=!1))},validateContact(e){this.validContact=e},dialogLeaveDirty(){this.routerNext()},dialogLeaveIncomplete(){this.deleteCurrentStaff(),this.routerNext()},...(0,m.nv)("staff",["deleteStaff","fetchSingleStaff","saveStaff","fetchStaff","fetchUsers"]),...(0,m.OI)("staff",["setCurrentStaff"]),...(0,m.nv)("guides",["getGuides"])}};const Bj=(0,he.Z)(bj,[["render",cL]]);var Sj=Bj,kj=[{path:"staff",component:jR,redirect:"/ssa/settings/staff/all",children:[{path:"all",name:"staff-all",component:dL,meta:{ssa_manage_staff:!0}},{path:"profile/:id?",name:"staff-single",component:Sj,props:!0}]}];function Aj(e,t,i,a,r,l){const s=(0,o.up)("loading"),n=(0,o.up)("router-view");return(0,o.wg)(),(0,o.iD)("div",null,[r.loading?((0,o.wg)(),(0,o.j4)(s,{key:0,message:e.translations.settings.resources.loading},null,8,["message"])):((0,o.wg)(),(0,o.j4)(n,{key:1,onSaved:l.backToList,onAutoGeneratedResources:l.openResourceGroup},null,8,["onSaved","onAutoGeneratedResources"]))])}var Mj={name:"ResourcesaAll",components:{Loading:ge},data(){return{loading:!0}},mounted(){this.init()},computed:{...(0,m.rn)("translations",["translations"]),...(0,m.rn)("resources",["resourceGroups","currentResourceGroup","resources"])},methods:{init(){return"undefined"===typeof this.resourceGroups?(this.loading=!0,void this.fetchResourceGroups().then((()=>this.init())).catch((e=>{console.log("Error loading resource groups",e)}))):"undefined"===typeof this.resources?(this.loading=!0,void this.fetchResources().then((()=>this.init())).catch((e=>{console.log("Error loading resources",e)}))):void(this.loading=!1)},backToList(){this.$router.push({name:"resources-all"})},openResourceGroup(){this.$router.push({name:"identifiable-group",params:{id:this.currentResourceGroup.id}})},...(0,m.nv)("resources",["fetchResources","fetchResourceGroups"])}};const Dj=(0,he.Z)(Mj,[["render",Aj]]);var Tj=Dj;const Oj=e=>((0,o.dD)("data-v-03092804"),e=e(),(0,o.Cn)(),e),Gj={class:"resources_settings_group"},Ej=Oj((()=>(0,o._)("div",{style:{flex:"1"}},null,-1))),Uj={key:1,class:"foxy-list-default resources-list-items-cards"},Fj=["onClick"],Ij={class:"foxy-list-container"},zj={class:"card-content"},Pj={class:"md-title"},Vj={key:0,class:"desc_quantity"},Wj={key:1,class:"desc_quantity"};function Rj(e,t,i,a,l,s){const n=(0,o.up)("settings-header"),d=(0,o.up)("foxy-list-item"),p=(0,o.up)("foxy-select"),f=(0,o.up)("foxy-button"),u=(0,o.up)("foxy-toolbar"),c=(0,o.up)("foxy-empty"),h=(0,o.up)("foxy-card-header"),m=(0,o.up)("foxy-icon"),g=(0,o.up)("foxy-card-content"),_=(0,o.up)("foxy-icon-button"),y=(0,o.up)("foxy-menu"),w=(0,o.up)("foxy-menu-anchor"),x=(0,o.up)("foxy-card-actions"),C=(0,o.up)("foxy-card");return(0,o.wg)(),(0,o.iD)("div",Gj,[(0,o.Wm)(n),(0,o.Wm)(u,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{fullwidth:!1,style:{width:"250px"},class:"title",label:e.translations.settings.resources.selectResources,name:"resources-view",id:"resources-view",modelValue:l.resourcesView,"onUpdate:modelValue":t[0]||(t[0]=e=>l.resourcesView=e)},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{role:"option","data-value":"active"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.title),1)])),_:1}),(0,o.Wm)(d,{"data-value":"inactive",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.status.inactive),1)])),_:1})])),_:1},8,["label","modelValue"]),Ej,(0,o.Wm)(f,{class:"md-primary",onClick:s.createResourceGroup,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.addNewGroup),1)])),_:1},8,["onClick"])])),_:1}),s.displayResources.length?((0,o.wg)(),(0,o.iD)("ul",Uj,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(s.displayResources,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id},[(0,o._)("button",{class:"foxy-button-ghost",tabindex:"-1",onClick:e=>s.maybeEditResourceGroup(t)},null,8,Fj),(0,o._)("div",Ij,[(0,o.Wm)(C,{class:"card"},{default:(0,o.w5)((()=>[(0,o._)("div",zj,[(0,o.Wm)(h,null,{default:(0,o.w5)((()=>[(0,o._)("div",Pj,(0,r.zw)(t.title),1)])),_:2},1024),(0,o.Wm)(g,null,{default:(0,o.w5)((()=>[(0,o._)("div",null,(0,r.zw)(t.description),1),"identical"==t.resource_type?((0,o.wg)(),(0,o.iD)("div",Vj,[(0,o.Wm)(m,{icon:"inventory"}),(0,o._)("span",null,(0,r.zw)(t.quantity)+" "+(0,r.zw)(e.translations.resourceGroups.quantity),1)])):(0,o.kq)("",!0),"identifiable"==t.resource_type?((0,o.wg)(),(0,o.iD)("div",Wj,[(0,o.Wm)(m,{icon:"workspaces_filled"}),(0,o._)("span",null,(0,r.zw)(t.published_quantity)+" "+(0,r.zw)(e.translations.resourceGroups.items),1)])):(0,o.kq)("",!0)])),_:2},1024)]),(0,o.Wm)(x,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,null,{default:(0,o.w5)((()=>[(0,o.Wm)(_,{onClick:e=>{l.openMenu={},l.openMenu[t.id]=!0}},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{icon:"settings"})])),_:2},1032,["onClick"]),(0,o.Wm)(y,{modelValue:l.openMenu[t.id],"onUpdate:modelValue":e=>l.openMenu[t.id]=e},{default:(0,o.w5)((()=>["publish"===t.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(d,{onClick:e=>s.editResourceGroup(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"]),(0,o.Wm)(d,{onClick:e=>s.toggleResource(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{icon:"block"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.deactivate),1)])),_:2},1032,["onClick"])],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(d,{onClick:e=>s.toggleResource(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{icon:"how_to_reg"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.activate),1)])),_:2},1032,["onClick"]),(0,o.Wm)(d,{onClick:e=>s.confirmDelete(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:2},1032,["onClick"])],64))])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024)])),_:2},1024)])),_:2},1024)])])))),128))])):((0,o.wg)(),(0,o.j4)(c,{key:0,label:s.emptyLabel,description:s.emptyDescription},{default:(0,o.w5)((()=>["active"===l.resourcesView?((0,o.wg)(),(0,o.j4)(f,{key:0,mode:"raised",class:"md-primary",onClick:s.createResourceGroup},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.addNew),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])),_:1},8,["label","description"]))])}var Lj={name:"SettingsResources",components:{SettingsHeader:zO},data(){return{pendingId:null,resourcesView:"active",openMenu:{}}},computed:{emptyDescription(){return"active"===this.resourcesView?this.translations.settings.resources.emptyDescription:this.translations.settings.resources.emptyInactiveDescription},emptyLabel(){return"active"===this.resourcesView?this.translations.settings.resources.emptyLabel:this.translations.settings.resources.emptyInactiveLabel},displayResources(){return"active"===this.resourcesView?this.resourcesStatusActive:this.resourcesStatusInactive},...(0,m.rn)("labels",["apptTypeLabels"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)("resources",["resourceGroups"]),...(0,m.Se)("resources",["resourcesStatusActive","resourcesStatusInactive"])},methods:{toggleResource(e){if(this.saving)return;this.saving=!0,this.pendingId=e;let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t);let i="publish"===t.status?"draft":"publish";this.setCurrentResourceGroup({key:"status",value:i}),"draft"===i&&this.setCurrentResourceGroup({key:"appointment_type_ids",value:[]}),this.saveResourceGroup().then((()=>{this.saving=!1,this.pendingId=null})).catch((e=>{console.log(e)}))},confirmDelete(e){if(this.saving)return;this.saving=!0,this.pendingId=e;let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t);let i="deleted";this.setCurrentResourceGroup({key:"status",value:i}),this.saveResourceGroup().then((()=>{this.saving=!1,this.pendingId=null})).catch((e=>{console.log(e)}))},createResourceGroup(){this.setCurrentResourceGroupDefault(),this.$router.push({name:"resources-group-single"})},maybeEditResourceGroup(e){"identical"==e.resource_type?this.editResourceGroup(e.id):this.openResourceGroup(e.id)},editResourceGroup(e){if(this.saving)return;let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t),this.$router.push({name:"resources-group-single",params:{id:e}})},openResourceGroup(e){let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t),this.$router.push({name:"identifiable-group",params:{id:e}})},...(0,m.nv)("resources",["saveResourceGroup"]),...(0,m.OI)("resources",["setCurrentResourceGroup","setCurrentResourceGroupDefault"])}};const jj=(0,he.Z)(Lj,[["render",Rj],["__scopeId","data-v-03092804"]]);var qj=jj;const Nj={class:"md-title"},$j={class:"button-bar"};function Hj(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-dialog-confirm"),p=(0,o.up)("foxy-snackbar"),f=(0,o.up)("loading"),u=(0,o.up)("edit-group"),c=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(n,{onClick:s.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",Nj,(0,r.zw)(s.pageTitle),1),(0,o.Wm)(d,{ref:"confirmLeaveDirty",title:e.translations.settings.staff.confirmIgnoreChangesTitle,"content-html":e.translations.settings.staff.confirmIgnoreChangesContent,"ok-text":e.translations.settings.staff.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.staff.confirmIgnoreChangesCancel,onConfirm:s.dialogLeaveWithoutSaving,onCancel:s.dialogKeepEdits},null,8,["title","content-html","ok-text","cancel-text","onConfirm","onCancel"]),(0,o.Wm)(p,{position:"top center",modelValue:l.isSaveStatusVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>l.isSaveStatusVisible=e),message:e.translations.settings.staff.actions.saved},null,8,["modelValue","message"]),l.loading?((0,o.wg)(),(0,o.j4)(f,{key:0,message:e.translations.settings.resources.loading},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(u,{onValidationCheck:s.validateFormFields},null,8,["onValidationCheck"]),(0,o._)("div",$j,[(0,o.Wm)(n,{mode:"secondary",disabled:l.saving,onClick:s.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(n,{mode:"raised",class:"md-primary",disabled:l.saving||!l.validFormFields,onClick:s.saveResourceForm},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.buttonText),1)])),_:1},8,["disabled","onClick"]),l.saving?((0,o.wg)(),(0,o.j4)(c,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])],64))])}const Zj={key:0,class:"md-error"},Yj={class:"appt-types-list-assossiated"},Kj={key:0};function Jj(e,t,i,a,l,s){const n=(0,o.up)("foxy-textfield"),d=(0,o.up)("foxy-checkbox"),p=(0,o.up)("foxy-radio");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(n,{modelValue:l.v$.title.$model,"onUpdate:modelValue":t[0]||(t[0]=e=>l.v$.title.$model=e),id:"title",required:"","aria-describedby":"titleError",label:e.translations.resourceGroups.title,helptext:s.titleError?e.translations.resourceGroups.titleError:"","helptext-persistent":"","helptext-validation":"",valid:!s.titleError},null,8,["modelValue","label","helptext","valid"]),(0,o.Wm)(n,{modelValue:l.v$.description.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.description.$model=e),id:"description","aria-describedby":"descriptionError",required:"",multiline:"",label:e.translations.resourceGroups.description,helptext:s.descriptionError?e.translations.resourceGroups.descriptionError:"","helptext-persistent":"","helptext-validation":"",valid:!s.descriptionError},null,8,["modelValue","label","helptext","valid"]),(0,o._)("fieldset",{class:(0,r.C_)(["resource-group md-fieldset",{"md-fieldset-invalid":!l.validAppointmentTypes}])},[(0,o._)("legend",null,(0,r.zw)(e.translations.settings.appointmentTypesTitle),1),l.validAppointmentTypes?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("p",Zj,(0,r.zw)(e.translations.settings.notifications.messages.appointmentTypesError),1)),(0,o._)("div",Yj,[(0,o.Wm)(d,{onToggle:s.toggleAll,modelValue:s.all,"onUpdate:modelValue":t[2]||(t[2]=e=>s.all=e),label:e.translations.settings.appointmentTypeAll},null,8,["onToggle","modelValue","label"]),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.editableAppointmentTypes,(e=>((0,o.wg)(),(0,o.j4)(d,{key:e.id,modelValue:s.appointmentTypes,"onUpdate:modelValue":t[3]||(t[3]=e=>s.appointmentTypes=e),id:"type-"+e.id,name:"appointment-types",value:e.id.toString(),label:e.title},null,8,["modelValue","id","value","label"])))),128))])],2),e.currentResourceGroup.id?(0,o.kq)("",!0):((0,o.wg)(),(0,o.iD)("fieldset",Kj,[(0,o._)("legend",null,(0,r.zw)(e.translations.resourceGroups.selectResourceGroupType),1),(0,o.Wm)(p,{modelValue:s.resourceGroupType,"onUpdate:modelValue":t[4]||(t[4]=e=>s.resourceGroupType=e),id:"identifiable",name:"resourceGroupType",value:"identifiable"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.resourceGroups.identifiable),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.resourceGroups.identifiableDesc),1)])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.resourceGroupType,"onUpdate:modelValue":t[5]||(t[5]=e=>s.resourceGroupType=e),id:"identical",name:"resourceGroupType",value:"identical"},{default:(0,o.w5)((()=>[(0,o._)("strong",null,(0,r.zw)(e.translations.resourceGroups.identical),1),(0,o.Uk)(" "+(0,r.zw)(e.translations.resourceGroups.identicalDesc),1)])),_:1},8,["modelValue"])])),"identical"==s.resourceGroupType?((0,o.wg)(),(0,o.j4)(n,{key:1,type:"number",modelValue:l.v$.quantity.$model,"onUpdate:modelValue":t[6]||(t[6]=e=>l.v$.quantity.$model=e),modelModifiers:{number:!0},id:"quantity","aria-describedby":"quantityError",min:1,label:e.translations.resourceGroups.quantity,helptext:s.quantityError?e.translations.resourceGroups.quantityError:"","helptext-persistent":"","helptext-validation":"",valid:!s.quantityError},null,8,["modelValue","label","helptext","valid"])):(0,o.kq)("",!0)])}var Xj={name:"EditResourceGroup",data(){return{v$:(0,Rd.Xw)(),validAppointmentTypes:!0,isInterchangeable:!1}},validations(){return{title:{required:Ld.C1},description:{required:Ld.C1},quantity:{required:(0,Ld.CF)((()=>"identical"==this.currentResourceGroup.resource_type)),minValue:"identical"==this.currentResourceGroup.resource_type?(0,Ld.uv)(1):(0,Ld.uv)(0)},appointmentTypes:{required:Ld.C1}}},beforeMount(){this.currentResourceGroup||this.setCurrentResourceGroupDefault()},watch:{all(e){e&&(this.validAppointmentTypes=!0,this.validationCheck())}},computed:{title:{get(){return this.currentResourceGroup?this.currentResourceGroup.title:""},set(e){this.updateCurrentResourceGroup({key:"title",value:e}),this.validationCheck()}},description:{get(){return this.currentResourceGroup?this.currentResourceGroup.description:""},set(e){this.updateCurrentResourceGroup({key:"description",value:e}),this.validationCheck()}},resourceGroupType:{get(){return this.currentResourceGroup.resource_type},set(e){"identical"==e?(this.updateCurrentResourceGroup({key:"resource_type",value:e}),this.quantity=1):(this.updateCurrentResourceGroup({key:"resource_type",value:e}),this.quantity=0),this.validationCheck()}},quantity:{get(){return this.currentResourceGroup?this.currentResourceGroup.quantity:1},set(e){this.updateCurrentResourceGroup({key:"quantity",value:e}),this.validationCheck()}},all:{get(){return!this.currentResourceGroup||this.currentResourceGroup.appointment_type_ids.length==this.editableAppointmentTypes.length},set(e){this.appointmentTypes=e?this.editableAppointmentTypes.map((e=>e.id)):[],this.validationCheck()}},appointmentTypes:{get(){return this.currentResourceGroup?this.currentResourceGroup.appointment_type_ids.map(String):[]},set(e){this.updateCurrentResourceGroup({key:"appointment_type_ids",value:e}),0!=e.length||this.all?this.validAppointmentTypes=!0:this.validAppointmentTypes=!1,this.validationCheck()}},titleError(){return this.v$.title.$invalid&&this.v$.title.$dirty},descriptionError(){return this.v$.description.$invalid&&this.v$.description.$dirty},quantityError(){return this.v$.quantity.$invalid&&this.v$.quantity.$dirty},...(0,m.rn)("resources",["currentResourceGroup"]),...(0,m.rn)("translations",["translations"]),...(0,m.Se)("appointment_types",["editableAppointmentTypes"])},methods:{toggleAll(e){if(e)return this.appointmentTypes=[],void(this.all=e);let t=this.editableAppointmentTypes.map((e=>e.id));this.appointmentTypes=t,this.all=e},validationCheck(){this.$emit("validationCheck",!this.v$.$invalid&&this.validAppointmentTypes)},...(0,m.nv)("resources",["updateCurrentResourceGroup"]),...(0,m.OI)("resources",["setCurrentResourceGroupDefault"])}};const Qj=(0,he.Z)(Xj,[["render",Jj]]);var eq=Qj,tq={name:"SettingsResourceGroupEdit",components:{Loading:ge,EditGroup:eq},props:{id:{type:[Number,String],required:!0}},data(){return{loading:!0,saving:!1,validFormFields:!1,leaveWithoutSaving:!1,isSaveStatusVisible:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.currentResourceGroupIsDirty){let e="confirmLeaveDirty";return this.$refs[e].open(),void(this.routerNext=i)}i()},mounted(){this.maybeLoadResource()},computed:{pageTitle(){let e=this.translations.settings.resources.actions.addNew;return this.id&&(e=this.translations.settings.resources.emptyEditTitle),e},buttonText(){return this.id?this.translations.general.save:this.translations.general.create},...(0,m.rn)("resources",["resourceGroups","currentResourceGroupIsDirty"]),...(0,m.rn)("translations",["translations"])},methods:{loadResource(){let e=this.resourceGroups.find((e=>parseInt(e.id,10)===parseInt(this.id,10)));this.setCurrentResourceGroup(e),this.loading=!1},cancelEdit(){this.$router.push("/ssa/settings/resources")},dialogLeaveWithoutSaving(){this.routerNext()},dialogKeepEdits(){this.routerNext(!1)},validateFormFields(e){this.validFormFields=e},maybeLoadResource(){this.id?this.loadResource():this.loading=!1},saveResourceForm(){this.saving=!0,this.saveResourceGroup().then((()=>{this.saving=!1,this.dirty=!1,this.$emit("saved")}))},...(0,m.nv)("resources",["saveResourceGroup"]),...(0,m.OI)("resources",["setCurrentResourceGroup"])}};const iq=(0,he.Z)(tq,[["render",Hj]]);var aq=iq;const oq=e=>((0,o.dD)("data-v-afedf28a"),e=e(),(0,o.Cn)(),e),rq={class:"resources_settings_resources"},lq={class:"tootlbar-resources-container"},sq=oq((()=>(0,o._)("div",{style:{flex:"1"}},null,-1))),nq={class:"resourses-toolbar-actions"},dq={class:"empty-state-actions"},pq={key:1,class:"foxy-list-default resources-list-items"},fq=["onClick"],uq={class:"foxy-list-container"},cq={class:"md-list-text-container"},hq={class:"md-title"},mq={class:"screen-reader-text"};function gq(e,t,i,l,s,n){const d=(0,o.up)("foxy-button"),p=(0,o.up)("foxy-list-item"),f=(0,o.up)("foxy-select"),u=(0,o.up)("foxy-toolbar"),c=(0,o.up)("foxy-empty"),h=(0,o.up)("foxy-icon"),m=(0,o.up)("foxy-icon-button"),g=(0,o.up)("foxy-menu"),_=(0,o.up)("foxy-menu-anchor");return(0,o.wg)(),(0,o.iD)("div",rq,[(0,o.Wm)(d,{onClick:n.backToGroups,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.title),1)])),_:1},8,["onClick"]),(0,o.Wm)(u,{class:"md-transparent"},{default:(0,o.w5)((()=>[(0,o._)("div",lq,[(0,o._)("h2",null,(0,r.zw)(e.currentResourceGroup?e.currentResourceGroup.title:e.translations.settings.resources.newResourceGroup),1),(0,o.Wm)(f,{style:{width:"300px"},name:"resources-view",id:"resources-view",modelValue:s.resourcesView,"onUpdate:modelValue":t[0]||(t[0]=e=>s.resourcesView=e),label:e.translations.settings.resources.selectResources},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{"data-value":"active",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.title),1)])),_:1}),(0,o.Wm)(p,{"data-value":"inactive",role:"option"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.status.inactive),1)])),_:1})])),_:1},8,["modelValue","label"])]),sq,(0,o._)("div",nq,[(0,o.Wm)(d,{class:"md-primary",onClick:n.createResource,icon:"add"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.addNew),1)])),_:1},8,["onClick"]),(0,o.Wm)(d,{class:"md-primary",onClick:t[1]||(t[1]=t=>n.editResourceGroup(e.currentResourceGroup.id)),icon:"edit"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.edit),1)])),_:1})])])),_:1}),n.displayResources.length?((0,o.wg)(),(0,o.iD)("ul",pq,[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(n.displayResources,(t=>((0,o.wg)(),(0,o.iD)("li",{key:t.id,class:"resource-item"},[(0,o._)("button",{class:"foxy-button-ghost",tabindex:"-1",onClick:e=>n.editResource(t.id)},null,8,fq),(0,o._)("div",uq,[(0,o._)("div",cq,[(0,o._)("div",hq,(0,r.zw)(t.title),1),(0,o._)("div",null,(0,r.zw)(t.description),1)]),(0,o.Wm)(_,null,{default:(0,o.w5)((()=>[(0,o.Wm)(m,{onClick:(0,a.iM)((e=>{s.openMenu={},s.openMenu[t.id]=!0}),["stop"])},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"settings"}),(0,o._)("span",mq,(0,r.zw)(e.translations.settings.resources.resourceSettings),1)])),_:2},1032,["onClick"]),(0,o.Wm)(g,{modelValue:s.openMenu[t.id],"onUpdate:modelValue":e=>s.openMenu[t.id]=e},{default:(0,o.w5)((()=>["publish"===t.status?((0,o.wg)(),(0,o.iD)(o.HY,{key:0},[(0,o.Wm)(p,{onClick:e=>n.toggleResource(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"block"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.deactivate),1)])),_:2},1032,["onClick"]),(0,o.Wm)(p,{onClick:e=>n.editResource(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"edit"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.edit),1)])),_:2},1032,["onClick"])],64)):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(p,{onClick:e=>n.toggleResource(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"how_to_reg"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.activate),1)])),_:2},1032,["onClick"]),(0,o.Wm)(p,{onClick:e=>n.confirmDelete(t.id)},{default:(0,o.w5)((()=>[(0,o.Wm)(h,{icon:"delete"}),(0,o._)("span",null,(0,r.zw)(e.translations.actions.delete),1)])),_:2},1032,["onClick"])],64))])),_:2},1032,["modelValue","onUpdate:modelValue"])])),_:2},1024)])])))),128))])):((0,o.wg)(),(0,o.j4)(c,{key:0,label:n.emptyLabel,description:n.emptyDescription},{default:(0,o.w5)((()=>[(0,o._)("div",dq,["active"===s.resourcesView?((0,o.wg)(),(0,o.j4)(d,{key:0,mode:"raised",class:"md-primary",onClick:n.createResource},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.addNew),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0),"active"===s.resourcesView?((0,o.wg)(),(0,o.j4)(d,{key:1,mode:"raised",class:"md-primary",onClick:n.autoGenerateResources},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.autoGenerate),1)])),_:1},8,["onClick"])):(0,o.kq)("",!0)])])),_:1},8,["label","description"]))])}var _q={name:"IdentifiableResources",props:{id:{type:[Number,String],required:!0}},data(){return{pendingId:null,resourcesView:"active",openMenu:{}}},mounted(){let e=this.resourceGroups.find((e=>e.id===this.id));this.setCurrentResourceGroup(e)},computed:{emptyDescription(){return"active"===this.resourcesView?this.translations.settings.resources.emptyGroupDescription:this.translations.settings.resources.emptyInactiveDescription},emptyLabel(){return"active"===this.resourcesView?this.translations.settings.resources.emptyLabel:this.translations.settings.resources.emptyInactiveLabel},displayResources(){let e=this.currentResourceGroup.resource_ids.map((e=>e.toString()));return"active"===this.resourcesView?this.resources.filter((t=>"publish"===t.status&&e.includes(t.id.toString()))):this.resources.filter((t=>"draft"===t.status&&e.includes(t.id.toString())))},...(0,m.rn)("labels",["apptTypeLabels"]),...(0,m.rn)("translations",["translations"]),...(0,m.rn)("resources",["currentResourceGroup","resources","resourceGroups"]),...(0,m.Se)("resources",["resourcesStatusActive","resourcesStatusInactive"])},methods:{toggleResource(e){if(this.saving)return;this.saving=!0,this.pendingId=e;let t=this.resources.find((t=>t.id===e));this.setCurrentResource(t);let i="publish"===t.status?"draft":"publish";this.setCurrentResource({key:"status",value:i}),this.saveResource().then((()=>{this.saving=!1,this.pendingId=null})).catch((e=>{console.log(e)}))},confirmDelete(e){if(this.saving)return;this.saving=!0,this.pendingId=e;let t=this.resources.find((t=>t.id===e));this.setCurrentResource(t);let i="deleted";this.setCurrentResource({key:"status",value:i}),this.saveResource().then((()=>{this.saving=!1,this.pendingId=null})).catch((e=>{console.log(e)}))},autoGenerateResources(){this.setCurrentResource(this.currentResourceGroup),this.$router.push({name:"auto-generate-resources",params:{id:this.currentResourceGroup.id}})},createResource(){this.setCurrentResourceDefault(),this.$router.push({name:"resource-single"})},editResourceGroup(e){if(this.saving)return;let t=this.resourceGroups.find((t=>t.id===e));this.setCurrentResourceGroup(t),this.$router.push({name:"resources-group-single",params:{id:e}})},editResource(e){if(this.saving)return;let t=this.resources.find((t=>t.id===e));this.setCurrentResource(t),this.$router.push({name:"resource-single",params:{id:e}})},backToGroups(){this.$router.push({name:"resources-all"})},...(0,m.nv)("resources",["saveResource"]),...(0,m.OI)("resources",["setCurrentResource","setCurrentResourceDefault","setCurrentResourceGroup"])}};const yq=(0,he.Z)(_q,[["render",gq],["__scopeId","data-v-afedf28a"]]);var wq=yq;const xq={class:"md-title"},Cq={class:"button-bar"};function vq(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-dialog-confirm"),p=(0,o.up)("foxy-snackbar"),f=(0,o.up)("loading"),u=(0,o.up)("foxy-textfield"),c=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(n,{onClick:s.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",xq,(0,r.zw)(s.pageTitle),1),(0,o.Wm)(d,{ref:"confirmLeaveDirty",title:e.translations.settings.staff.confirmIgnoreChangesTitle,"content-html":e.translations.settings.staff.confirmIgnoreChangesContent,"ok-text":e.translations.settings.staff.confirmIgnoreChangesOkay,"cancel-text":e.translations.settings.staff.confirmIgnoreChangesCancel,onConfirm:s.dialogLeaveWithoutSaving},null,8,["title","content-html","ok-text","cancel-text","onConfirm"]),(0,o.Wm)(p,{position:"top center",modelValue:l.isSaveStatusVisible,"onUpdate:modelValue":t[0]||(t[0]=e=>l.isSaveStatusVisible=e),message:e.translations.settings.staff.actions.saved},null,8,["modelValue","message"]),l.loading?((0,o.wg)(),(0,o.j4)(f,{key:0,message:e.translations.settings.resources.loadingResource},null,8,["message"])):((0,o.wg)(),(0,o.iD)(o.HY,{key:1},[(0,o.Wm)(u,{modelValue:l.v$.title.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.title.$model=e),id:"title",required:"","aria-describedby":"titleError",label:e.translations.resourceGroups.title,helptext:s.titleError?e.translations.resourceGroups.titleError:"","helptext-persistent":"","helptext-validation":"",valid:!s.titleError},null,8,["modelValue","label","helptext","valid"]),(0,o.Wm)(u,{modelValue:l.v$.description.$model,"onUpdate:modelValue":t[2]||(t[2]=e=>l.v$.description.$model=e),id:"description","aria-describedby":"descriptionError",required:"",multiline:"",label:e.translations.resourceGroups.description,helptext:s.descriptionError?e.translations.resourceGroups.descriptionError:"","helptext-persistent":"","helptext-validation":"",valid:!s.descriptionError},null,8,["modelValue","label","helptext","valid"]),(0,o._)("div",Cq,[(0,o.Wm)(n,{disabled:l.saving,mode:"secondary",onClick:s.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(n,{mode:"raised",disabled:l.saving||!l.validFormFields,onClick:s.saveResourceForm},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(s.buttonText),1)])),_:1},8,["disabled","onClick"]),l.saving?((0,o.wg)(),(0,o.j4)(c,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])],64))])}var bq={name:"EditResource",components:{Loading:ge},props:{id:{type:[Number,String],required:!0}},data(){return{v$:(0,Rd.Xw)(),loading:!0,saving:!1,validFormFields:!1,leaveWithoutSaving:!1,isSaveStatusVisible:!1,routerNext:null}},beforeRouteLeave(e,t,i){if(this.currentResourceIsDirty){let e="confirmLeaveDirty";return this.$refs[e].open(),void(this.routerNext=i)}i()},validations(){return{title:{required:Ld.C1},description:{required:Ld.C1}}},beforeMount(){if(this.id){let e=this.resources.find((e=>e.id===this.id));this.setCurrentResource(e)}else this.setCurrentResourceDefault();this.loading=!1},computed:{title:{get(){return this.currentResource?this.currentResource.title:""},set(e){this.updateCurrentResource({key:"title",value:e}),this.validationCheck()}},description:{get(){return this.currentResource?this.currentResource.description:""},set(e){this.updateCurrentResource({key:"description",value:e}),this.validationCheck()}},pageTitle(){let e=this.translations.settings.resources.actions.addNew;return this.id&&(e=this.name?this.name:this.translations.settings.resources.emptyEditTitleResource),e},titleError(){return this.v$.title.$invalid&&this.v$.title.$dirty},descriptionError(){return this.v$.description.$invalid&&this.v$.description.$dirty},buttonText(){return this.id?this.translations.general.save:this.translations.general.create},...(0,m.rn)("resources",["currentResource","resources","currentResourceIsDirty","currentResourceGroup"]),...(0,m.rn)("translations",["translations"])},methods:{dialogLeaveWithoutSaving(){this.routerNext()},validationCheck(){this.validFormFields=!this.v$.$invalid},cancelEdit(){this.$router.push({name:"identifiable-group",params:{id:this.currentResourceGroup.id}})},saveResourceForm(){this.updateCurrentResource({key:"resource_group_id",value:this.currentResourceGroup.id}),this.saving=!0,this.saveResource().then((()=>{this.saving=!1,this.dirty=!1,this.cancelEdit()}))},...(0,m.nv)("resources",["updateCurrentResource","saveResource"]),...(0,m.OI)("resources",["setCurrentResourceDefault","setCurrentResource"])}};const Bq=(0,he.Z)(bq,[["render",vq]]);var Sq=Bq;const kq={class:"md-title"},Aq={class:"md-fieldset field-wrapper"},Mq={class:"md-subheading"},Dq={class:"radio-list"},Tq={class:"button-bar"};function Oq(e,t,i,a,l,s){const n=(0,o.up)("foxy-button"),d=(0,o.up)("foxy-textfield"),p=(0,o.up)("foxy-radio"),f=(0,o.up)("foxy-progress-circular");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(n,{onClick:s.cancelEdit,icon:"keyboard_arrow_left"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["onClick"]),(0,o._)("h2",kq,(0,r.zw)(s.pageTitle),1),(0,o.Wm)(d,{modelValue:l.v$.resourceTitle.$model,"onUpdate:modelValue":t[0]||(t[0]=e=>l.v$.resourceTitle.$model=e),id:"title",required:"","aria-describedby":"titleError",label:e.translations.resourceGroups.title,helptext:s.titleError?e.translations.resourceGroups.titleError:"","helptext-persistent":"","helptext-validation":"",valid:!s.titleError},null,8,["modelValue","label","helptext","valid"]),(0,o.Wm)(d,{type:"number",required:"",modelValue:l.v$.generateQuantity.$model,"onUpdate:modelValue":t[1]||(t[1]=e=>l.v$.generateQuantity.$model=e),modelModifiers:{number:!0},id:"quantity","aria-describedby":"quantityError",min:1,label:e.translations.resourceGroups.quantity,helptext:s.quantityError?e.translations.resourceGroups.quantityError:e.translations.settings.resources.quantityHelperText,"helptext-persistent":"","helptext-validation":"",valid:!s.quantityError},null,8,["modelValue","label","helptext","valid"]),(0,o._)("fieldset",Aq,[(0,o._)("legend",Mq,(0,r.zw)(e.translations.settings.resources.autoGenerateOptions.label),1),(0,o._)("div",Dq,[(0,o.Wm)(p,{modelValue:s.incrementMethod,"onUpdate:modelValue":t[2]||(t[2]=e=>s.incrementMethod=e),id:"increment-numbers",name:"incrementMethod",value:"numbers"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.autoGenerateOptions.number),1)])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.incrementMethod,"onUpdate:modelValue":t[3]||(t[3]=e=>s.incrementMethod=e),id:"increment-capital",name:"incrementMethod",value:"capital"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.autoGenerateOptions.capital),1)])),_:1},8,["modelValue"]),(0,o.Wm)(p,{modelValue:s.incrementMethod,"onUpdate:modelValue":t[4]||(t[4]=e=>s.incrementMethod=e),id:"increment-small",name:"incrementMethod",value:"small"},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.autoGenerateOptions.lower),1)])),_:1},8,["modelValue"])])]),(0,o._)("div",Tq,[(0,o.Wm)(n,{mode:"raised",disabled:l.saving,onClick:s.cancelEdit},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.general.cancel),1)])),_:1},8,["disabled","onClick"]),(0,o.Wm)(n,{mode:"raised",class:"md-primary",disabled:l.saving||!l.validFormFields,onClick:s.generateResources},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.translations.settings.resources.actions.autoGenerate),1)])),_:1},8,["disabled","onClick"]),l.saving?((0,o.wg)(),(0,o.j4)(f,{key:0,medium:"",indeterminate:""})):(0,o.kq)("",!0)])])}var Gq={name:"AutoGenerateResources",components:{},props:{id:{type:[Number,String],required:!0}},data(){return{v$:(0,Rd.Xw)(),saving:!1,validFormFields:!1,title:"",quantity:1,incrementBy:"numbers"}},validations(){return{resourceTitle:{required:Ld.C1},generateQuantity:{required:Ld.C1,minValue:(0,Ld.uv)(1)}}},mounted(){if(!this.currentResourceGroup){let e=this.resourceGroups.find((e=>e.id===this.id));this.setCurrentResource(e)}},computed:{resourceTitle:{get(){return this.title?this.title:""},set(e){this.title=e,this.validationCheck()}},generateQuantity:{get(){return this.quantity},set(e){this.quantity=e,this.validationCheck()}},incrementMethod:{get(){return this.incrementBy},set(e){this.incrementBy=e}},pageTitle(){let e=this.translations.settings.resources.actions.autoGenerate;return this.currentResourceGroup&&(e=this.currentResourceGroup.title),e},titleError(){return this.v$.resourceTitle.$invalid&&this.v$.resourceTitle.$dirty},quantityError(){return this.v$.generateQuantity.$invalid},...(0,m.rn)("resources",["currentResource","resources","resourceGroups","currentResourceIsDirty","currentResourceGroup"]),...(0,m.rn)("translations",["translations"])},methods:{cancelEdit(){this.$router.push({name:"identifiable-group",params:{id:this.currentResourceGroup.id}})},validationCheck(){this.validFormFields=!this.v$.$invalid},generateObjects(e,t,i){const a=[];for(let o=0;os.selectCode&&s.selectCode(...e)),onFocus:t[1]||(t[1]=(...e)=>s.selectCode&&s.selectCode(...e))},"\n + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/jsconfig.json b/wp-content/plugins/simply-schedule-appointments/admin-app/jsconfig.json new file mode 100644 index 0000000..4aafc5f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "baseUrl": "./", + "moduleResolution": "node", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/favicon.ico b/wp-content/plugins/simply-schedule-appointments/admin-app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/index.html b/wp-content/plugins/simply-schedule-appointments/admin-app/public/index.html new file mode 100644 index 0000000..c2a0c1b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/index.html @@ -0,0 +1,31 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + +
+ + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-eyes-closed.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-eyes-closed.svg new file mode 100644 index 0000000..f417168 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-eyes-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-down.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-down.svg new file mode 100644 index 0000000..f4d400c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-up.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-up.svg new file mode 100644 index 0000000..71be32f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sitting-tail-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sleeping.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sleeping.svg new file mode 100644 index 0000000..446ef38 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-sleeping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-standing.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-standing.svg new file mode 100644 index 0000000..90bb91b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/foxes/fox-standing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg new file mode 100644 index 0000000..8464cb2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-branding/btn_google_dark_normal_ios.svg @@ -0,0 +1,50 @@ + + + + btn_google_dark_normal_ios + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step1.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3729d1ac1c7c3232e032a220ef2a19cbc6480dad GIT binary patch literal 21456 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 mBRg~cKlKRtC$xh9fa$p_e{*2@dvX3<{N?r9H<0 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step2.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc93bea230dd6934bab01d857190fb65287569e7 GIT binary patch literal 32661 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 N@?rf`K+w(Pe*wD>v#tOD literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step3.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c612b1c2c8f9b6882a226c7bea1ba4bfdf4ff4b4 GIT binary patch literal 34552 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step4.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b65b2ae75c80c0a522d2066eb96bba1c5134bdd0 GIT binary patch literal 31264 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 F{~sDKjz9na literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step5.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6e1d7c8eddfa084097d6b202bc693a1b61d7b02 GIT binary patch literal 24009 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 Nj&etM2=M>E2>=*A)4~7% literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step6.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bac348190f4d07ca9dfd08d4746f6c751c15c37 GIT binary patch literal 29517 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 D7!0%5 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step7.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a2e275d887632e40d48fdec3bd7830456c036ca GIT binary patch literal 43035 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step8.jpg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/google-calendar-steps/step8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0be6f1f34da07685452a1dbe125cedb1da4bea3c GIT binary patch literal 38138 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 H-2V8IFQ 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 bnf_f-*L+bt;sw6>|5W(!e_v;bpA-KNK{s7U literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/icon-face.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/icon-face.svg new file mode 100644 index 0000000..95876db --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/icon-face.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-paypal.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-paypal.svg new file mode 100644 index 0000000..9c4c788 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-paypal.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-ssa.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-ssa.svg new file mode 100644 index 0000000..12d3cc2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-ssa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-stripe.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-stripe.svg new file mode 100644 index 0000000..a07ce1e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-stripe.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-woocommerce.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-woocommerce.svg new file mode 100644 index 0000000..996927f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/logo-woocommerce.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/no-appointments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/no-appointments.svg new file mode 100644 index 0000000..733c2dc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/no-appointments.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-booking-flows.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-booking-flows.svg new file mode 100644 index 0000000..36f0132 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-booking-flows.svg @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-info.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-info.svg new file mode 100644 index 0000000..458312a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-upsell.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-upsell.svg new file mode 100644 index 0000000..23b06e9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-gravity-forms-upsell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-new-booking-app.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-new-booking-app.svg new file mode 100644 index 0000000..412f574 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-new-booking-app.svg @@ -0,0 +1,833 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-sms.svg new file mode 100644 index 0000000..f8e74c0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/promo-sms.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/review-plugin-card-congrats.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/review-plugin-card-congrats.svg new file mode 100644 index 0000000..e67720e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/review-plugin-card-congrats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-advanced-scheduling.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-advanced-scheduling.svg new file mode 100644 index 0000000..39548be --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-advanced-scheduling.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-blackout.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-blackout.svg new file mode 100644 index 0000000..33acdfe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-blackout.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-calendar-events.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-calendar-events.svg new file mode 100644 index 0000000..0f0c039 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-calendar-events.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-general.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-general.svg new file mode 100644 index 0000000..6d323fa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-general.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-google-calendar.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-google-calendar.svg new file mode 100644 index 0000000..d5252e3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-google-calendar.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-locations.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-locations.svg new file mode 100644 index 0000000..bb034fb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-locations.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-mailchimp.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-mailchimp.svg new file mode 100644 index 0000000..06f2fff --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-mailchimp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications-sms.svg new file mode 100644 index 0000000..cff5361 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications-sms.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications.svg new file mode 100644 index 0000000..cff5361 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-notifications.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-payments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-payments.svg new file mode 100644 index 0000000..10a462f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-payments.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-resources.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-resources.svg new file mode 100644 index 0000000..4746f78 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-resources.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-sms.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-sms.svg new file mode 100644 index 0000000..821fad8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-sms.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-staff.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-staff.svg new file mode 100644 index 0000000..b742ef6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-staff.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-styles.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-styles.svg new file mode 100644 index 0000000..006300f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-styles.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-tracking.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-tracking.svg new file mode 100644 index 0000000..fa87b15 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-tracking.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translation.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translation.svg new file mode 100644 index 0000000..89d86fe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translation.svg @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translations.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translations.svg new file mode 100644 index 0000000..2b553b5 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-translations.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webex.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webex.svg new file mode 100644 index 0000000..df3f7e0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webex.svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webhooks.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webhooks.svg new file mode 100644 index 0000000..d447cca --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-webhooks.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-zoom.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-zoom.svg new file mode 100644 index 0000000..29bcc96 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/settings-zoom.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-business.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-business.svg new file mode 100644 index 0000000..c5eef14 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-business.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-plus.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-plus.svg new file mode 100644 index 0000000..961b426 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-plus.svg @@ -0,0 +1 @@ + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-pro.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-pro.svg new file mode 100644 index 0000000..acb8174 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-promo-pro.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-zoom.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-zoom.svg new file mode 100644 index 0000000..c8392fb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upgrade-zoom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-card-payments.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-card-payments.svg new file mode 100644 index 0000000..61b45ad --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-card-payments.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-google-calendar.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-google-calendar.svg new file mode 100644 index 0000000..027a003 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-google-calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-business.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-business.svg new file mode 100644 index 0000000..5ef2129 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-business.svg @@ -0,0 +1 @@ +Upsell Card Business \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-plus.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-plus.svg new file mode 100644 index 0000000..af08e0a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-pro.svg b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-pro.svg new file mode 100644 index 0000000..7630112 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/images/upsell-promo-pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/js/manifest.js b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/js/manifest.js new file mode 100644 index 0000000..2bded6d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/public/static/js/manifest.js @@ -0,0 +1,2 @@ +!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,i){for(var u,a,f,s=0,l=[];s { + config.plugin('define').tap((definitions) => { + Object.assign(definitions[0], { + __VUE_OPTIONS_API__: 'true', + __VUE_PROD_DEVTOOLS__: 'false', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' + }) + return definitions + }) + } +}) diff --git a/wp-content/plugins/simply-schedule-appointments/admin-app/yarn.lock b/wp-content/plugins/simply-schedule-appointments/admin-app/yarn.lock new file mode 100644 index 0000000..106b7ac --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/admin-app/yarn.lock @@ -0,0 +1,9744 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@achrinza/node-ipc@^9.2.5": + version "9.2.5" + resolved "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.5.tgz" + integrity sha512-kBX7Ay911iXZ3VZ1pYltj3Rfu7Ow9H7sK4H4RSfWIfWR2JKNB40K808wppoRIEzE2j2hXLU+r6TJgCAliCGhyQ== + dependencies: + "@node-ipc/js-queue" "2.0.3" + event-pubsub "4.3.0" + js-message "1.0.7" + +"@akryum/winattr@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@akryum/winattr/-/winattr-3.0.0.tgz" + integrity sha512-t4WmWoGV9gyzypwG3y3JlcK2t8fKLtvzBA7xEoFTj9SMPvOuLsf13uh4ikK0RRaaa9RPPWLgFUdOyIRaQvCpwQ== + dependencies: + fswin "^2.17.1227" + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@apollo/protobufjs@1.2.4": + version "1.2.4" + resolved "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.4.tgz" + integrity sha512-npVJ9NVU/pynj+SCU+fambvTneJDyCnif738DnZ7pCxdDtzeEz7WkpSIq5wNUmWm5Td55N+S2xfqZ+WP4hDLng== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +"@apollo/utils.dropunuseddefinitions@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz" + integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== + +"@apollo/utils.keyvaluecache@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz" + integrity sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA== + dependencies: + "@apollo/utils.logger" "^1.0.0" + lru-cache "^7.10.1" + +"@apollo/utils.logger@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.0.tgz" + integrity sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q== + +"@apollo/utils.printwithreducedwhitespace@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz" + integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== + +"@apollo/utils.removealiases@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz" + integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== + +"@apollo/utils.sortast@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz" + integrity sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA== + dependencies: + lodash.sortby "^4.7.0" + +"@apollo/utils.stripsensitiveliterals@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz" + integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== + +"@apollo/utils.usagereporting@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.0.tgz" + integrity sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w== + dependencies: + "@apollo/utils.dropunuseddefinitions" "^1.1.0" + "@apollo/utils.printwithreducedwhitespace" "^1.1.0" + "@apollo/utils.removealiases" "1.0.0" + "@apollo/utils.sortast" "^1.1.0" + "@apollo/utils.stripsensitiveliterals" "^1.2.0" + apollo-reporting-protobuf "^3.3.1" + +"@apollographql/apollo-tools@^0.5.3": + version "0.5.4" + resolved "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz" + integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== + +"@apollographql/graphql-playground-html@1.6.29": + version "1.6.29" + resolved "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz" + integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== + dependencies: + xss "^1.0.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.6", "@babel/core@^7.10.3", "@babel/core@^7.12.0", "@babel/core@^7.12.16", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@>=7.11.0": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/eslint-parser@^7.12.16": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz" + integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz" + integrity sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.6", "@babel/parser@^7.18.4", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9", "@babel/parser@^7.24.7": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz" + integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.13", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@^7.12.13": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz" + integrity sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.18.6" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz" + integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-flow-strip-types@^7.18.6": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz" + integrity sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-flow" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.12.15": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz" + integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.10.3", "@babel/preset-env@^7.12.16": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-flow@^7.0.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz" + integrity sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-flow-strip-types" "^7.18.6" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.1.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/register@^7.0.0": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz" + integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.5" + source-map-support "^0.5.16" + +"@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.0.0", "@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.12", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@bevacqua/rome@^3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@bevacqua/rome/-/rome-3.0.4.tgz" + integrity sha512-7xQiqpjYyrCg/LmeZAdMCtOLf0tJVHtOXARVbCfm95sDOS83m+ZyAUGgQucRElfgnDMG6ivYNJ6RyK5D/9zrJg== + dependencies: + bullseye "1.4.6" + contra "^1.9.4" + crossvent "1.5.0" + moment "^2.8.2" + +"@ckpack/vue-color@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.5.0.tgz" + integrity sha512-dj1zXVyay2m4LdlLJCQSdIS2FYwUl77BZqyKmUXiehyqjCP0bGYnPcL38lrShzYUc2FdkYQX8ANZZjRahd4PQw== + dependencies: + "@ctrl/tinycolor" "^3.6.0" + material-colors "^1.2.6" + +"@ctrl/tinycolor@^3.6.0": + version "3.6.1" + resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@graphql-tools/merge@8.3.1": + version "8.3.1" + resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz" + integrity sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg== + dependencies: + "@graphql-tools/utils" "8.9.0" + tslib "^2.4.0" + +"@graphql-tools/mock@^8.1.2": + version "8.7.1" + resolved "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.1.tgz" + integrity sha512-k85qWloFnxw1AAu7P153y1y+9GEbiQ4T17uay2o2QZKtjxPkBADkX0sKYsI7oj+ip+l/D4an3FfsbWATGxzT8w== + dependencies: + "@graphql-tools/schema" "8.5.1" + "@graphql-tools/utils" "8.9.0" + fast-json-stable-stringify "^2.1.0" + tslib "^2.4.0" + +"@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.5.0", "@graphql-tools/schema@8.5.1": + version "8.5.1" + resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz" + integrity sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg== + dependencies: + "@graphql-tools/merge" "8.3.1" + "@graphql-tools/utils" "8.9.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/utils@8.9.0": + version "8.9.0" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz" + integrity sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg== + dependencies: + tslib "^2.4.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@josephg/resolvable@^1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz" + integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@material/animation@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/animation/-/animation-13.0.0.tgz" + integrity sha512-YR0/u4u56qXDjKYolQ7F+IvlPkaSBhMl/dZv8DK0FbD6PH4ckOPd3bEXNRndXtprsxwknQQP2pttjPImylkl0g== + dependencies: + tslib "^2.1.0" + +"@material/animation@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/animation/-/animation-14.0.0.tgz" + integrity sha512-VlYSfUaIj/BBVtRZI8Gv0VvzikFf+XgK0Zdgsok5c1v5DDnNz5tpB8mnGrveWz0rHbp1X4+CWLKrTwNmjrw3Xw== + dependencies: + tslib "^2.1.0" + +"@material/base@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/base/-/base-13.0.0.tgz" + integrity sha512-vFx0JryRfcvUNX3cZ2u32wUMvxzd+c/YW0LFOXNgqCDWlubHcMm0Y6Wz371LhfQo80/NE69u+/4Joo99yKnVeg== + dependencies: + tslib "^2.1.0" + +"@material/base@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/base/-/base-14.0.0.tgz" + integrity sha512-Ou7vS7n1H4Y10MUZyYAbt6H0t67c6urxoCgeVT7M38aQlaNUwFMODp7KT/myjYz2YULfhu3PtfSV3Sltgac9mA== + dependencies: + tslib "^2.1.0" + +"@material/button@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/button/-/button-13.0.0.tgz" + integrity sha512-lYorht6fcEd4P+dsLVp2BGtaY5cGYNp71LMajuDe71GZX3dZPoKeVvb+Ie1S7vcB+o+WLTeaisMk9/vA4gfi8A== + dependencies: + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/tokens" "^13.0.0" + "@material/touch-target" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/card@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/card/-/card-13.0.0.tgz" + integrity sha512-ooJUOt1Viv99Dyz4rhz9ZZbfa996eHh3RUuXkPRkT66Btd5TzpdqsQWKwOVc5bgbgWqzhDWQ6A/aQdYqH97ccg== + dependencies: + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/checkbox@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/checkbox/-/checkbox-13.0.0.tgz" + integrity sha512-tRC6n9Jq7GgdU0d1F8NOvUy6WiRZR58tUgL1QqoiQK9PGKSt0dAF3Aa48uubO7/Lt9K4NqgwV6/OeHv8pHaM/w== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/touch-target" "^13.0.0" + tslib "^2.1.0" + +"@material/chips@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/chips/-/chips-13.0.0.tgz" + integrity sha512-Ov4runDbrROUpMqKyCi3lpknfrLzGwtV+/rfYIgTYUkEVpCHXHddxXxcjP4zqh3QLXnE6ma92PLGcxCb/zzogQ== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/checkbox" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/tokens" "^13.0.0" + "@material/touch-target" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/circular-progress@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-13.0.0.tgz" + integrity sha512-jSbr0ywY2N6s05tyqTXl/cG339C+qU3ck3FwXUq5SJup8CWT0AoJ8EG/CD10CEhNH8nH9Iwstve95oNgIt8G4g== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/progress-indicator" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/density@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/density/-/density-13.0.0.tgz" + integrity sha512-ppJTzOsuhjQam5GvHaq/XZocZNUr+41XQ2sd5nONAmQ0wwzXgqG0FaxtF1EXqK3uZFadz+vAu6enagre9DXhTA== + dependencies: + tslib "^2.1.0" + +"@material/density@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/density/-/density-14.0.0.tgz" + integrity sha512-NlxXBV5XjNsKd8UXF4K/+fOXLxoFNecKbsaQO6O2u+iG8QBfFreKRmkhEBb2hPPwC3w8nrODwXX0lHV+toICQw== + dependencies: + tslib "^2.1.0" + +"@material/dialog@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/dialog/-/dialog-13.0.0.tgz" + integrity sha512-1Ggo9Bid94F1ttZJKSjIcgMvkVQtKsqwbqLs5cWlleaiwtAcwUE12XA2B1MNj8xM9ajU3BJm4GigupBOK1jGHQ== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/button" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/icon-button" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/tokens" "^13.0.0" + "@material/touch-target" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/dom@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/dom/-/dom-13.0.0.tgz" + integrity sha512-M9HLAYBZtkTUvf66FL+jAEvUOdhji1HkGA1mV6oyE+HY9gkCkmso+mngvzlLd5+uaAVE9I3WQFhSb9gp0cpXnw== + dependencies: + "@material/feature-targeting" "^13.0.0" + tslib "^2.1.0" + +"@material/dom@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/dom/-/dom-14.0.0.tgz" + integrity sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q== + dependencies: + "@material/feature-targeting" "^14.0.0" + tslib "^2.1.0" + +"@material/drawer@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/drawer/-/drawer-14.0.0.tgz" + integrity sha512-VPrxMIhbkXVbfH7aMFV+Um0tjOVrU/Y65X2hWsVdmjASadE8C5UYjIE3vjL1DM1M+zIa3qZZRUWqz0j1zqbr3w== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/list" "^14.0.0" + "@material/ripple" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/shape" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/elevation@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/elevation/-/elevation-13.0.0.tgz" + integrity sha512-hzdblgamVRbC0UwKafcvUVDvKzMiOSveDiwGgFk+EAg/tZRdwMlQPyf/9I6Lr8Cw/pNGnEOPhmCDOYPOHimr0w== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/elevation@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0.tgz" + integrity sha512-Di3tkxTpXwvf1GJUmaC8rd+zVh5dB2SWMBGagL4+kT8UmjSISif/OPRGuGnXs3QhF6nmEjkdC0ijdZLcYQkepw== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/fab@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/fab/-/fab-14.0.0.tgz" + integrity sha512-s4rrw2TLU8ITKopHSTEHuJEFsGEZsb+ijwW16pQt0h9GArxPGaALT+CCJIPjf75D3wPEEMW0vnLj7oMoII2VFg== + dependencies: + "@material/animation" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/focus-ring" "^14.0.0" + "@material/ripple" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/shape" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/tokens" "^14.0.0" + "@material/touch-target" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/feature-targeting@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-13.0.0.tgz" + integrity sha512-QJClfeaA4EMyAxKJy9WR0Nx+/VwSZCkhGLUVBG9NhxqYGfl/LtaeaidrNm32vYEoNZAofN92VD2RwQTRwp/dMQ== + dependencies: + tslib "^2.1.0" + +"@material/feature-targeting@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0.tgz" + integrity sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA== + dependencies: + tslib "^2.1.0" + +"@material/floating-label@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/floating-label/-/floating-label-13.0.0.tgz" + integrity sha512-imAPamD97QrizVCOpxjr3UfQJyDBpEEhDBSbEbKLrCpqG3jQx4/My5rNKKVGWjxUiBYgBA1dhkn98RRX5tGBtQ== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/focus-ring@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-14.0.0.tgz" + integrity sha512-fqqka6iSfQGJG3Le48RxPCtnOiaLGPDPikhktGbxlyW9srBVMgeCiONfHM7IT/1eu80O0Y67Lh/4ohu5+C+VAQ== + dependencies: + "@material/dom" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + +"@material/form-field@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/form-field/-/form-field-13.0.0.tgz" + integrity sha512-cXs5uYA89KgrXrU1UYkl52JizeIK3Mx9LjBw4ZYiyQJzFaBTPYsYWGSJMad1HZhWlRiigGTyN1M9ePIxtBpi0Q== + dependencies: + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/icon-button@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/icon-button/-/icon-button-13.0.0.tgz" + integrity sha512-SdxFytWvbfN0fj7jHFq3DqK5/Zoms+Ipuv6fI8AzwgDFe7mXJ2euPahN+3XcmJ3BaSMyfYsdbcYdCWs8bgHW1w== + dependencies: + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/touch-target" "^13.0.0" + tslib "^2.1.0" + +"@material/layout-grid@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-14.0.0.tgz" + integrity sha512-tAce0PR/c85VI2gf1HUdM0Y15ZWpfZWAFIwaCRW1+jnOLWnG1/aOJYLlzqtVEv2m0TS1R1WRRGN3Or+CWvpDRA== + dependencies: + tslib "^2.1.0" + +"@material/line-ripple@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-13.0.0.tgz" + integrity sha512-5djBRXrd1+SiMVUTWr4rD6xv+/qTaGGmgUS5GytBE5mczvnEwcPmM4PzF+HNj2TS+wvNvIfRjRmUzWO2Z6w2lA== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/linear-progress@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-14.0.0.tgz" + integrity sha512-MGIAWMHMW6TSV/TNWyl5N/escpDHk3Rq6hultFif+D9adqbOXrtfZZIFPLj1FpMm1Ucnj6zgOmJHgCDsxRVNIA== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/progress-indicator" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/list@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/list/-/list-13.0.0.tgz" + integrity sha512-poq4WNDEfW6Z3YPAn3wdBX4RSkj3A83Pht6984MmG8YJZMlq34ftHECw37VcdmFJIyRPdpZqywJo/i7CxsSAgQ== + dependencies: + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/list@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/list/-/list-14.0.0.tgz" + integrity sha512-AFaBGV9vQyfnG8BT2R3UGVdF5w2SigQqBH+qbOSxQhk4BgVvhDfJUIKT415poLNMdnaDtcuYz+ZWvVNoRDaL7w== + dependencies: + "@material/base" "^14.0.0" + "@material/density" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/ripple" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/shape" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/menu-surface@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-13.0.0.tgz" + integrity sha512-Irfnk0l8AO7z8ucilbBzZI8izbFV/aK1GbiPpT1SmZuKkL1z+04rB2HpB+OqwaBixdLTDq70AyawcnQ0MACeXQ== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/menu@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/menu/-/menu-13.0.0.tgz" + integrity sha512-RY9R2ubYU6a7WRJW3nWr/AoSzdrxwUGqkfJSx0U9M/wK1vbXYYcJ7eCXFzSpa5VrstE7of7PbyYtQ8V61tILEQ== + dependencies: + "@material/base" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/list" "^13.0.0" + "@material/menu-surface" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/notched-outline@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-13.0.0.tgz" + integrity sha512-BHdxr1x2AN4oqycTNg0FGisG3rMHf50z3MuyUoQsJJ3WGjxBMWKd0yK/xl4m38nFKPg1vQnzyHIYTJdRpCaE7A== + dependencies: + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/floating-label" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/progress-indicator@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-13.0.0.tgz" + integrity sha512-IfhAMn03gWg/Rl0Bg26Q1g+DrMnaULllz+ZJeIY7BXZC5qFYq1fLq4+RiQmfPGlJfURUjrWNLcI1VDVyXUHHzg== + dependencies: + tslib "^2.1.0" + +"@material/progress-indicator@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-14.0.0.tgz" + integrity sha512-09JRTuIySxs670Tcy4jVlqCUbyrO+Ad6z3nHnAi8pYl74duco4n/9jTROV0mlFdr9NIFifnd08lKbiFLDmfJGQ== + dependencies: + tslib "^2.1.0" + +"@material/radio@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/radio/-/radio-13.0.0.tgz" + integrity sha512-6jeZ+dKSzBB/j2IZ7RjFl5mrB+EWnpv/x+U9w6ENLCdueM4+LKUqBAc2fC2WMycsqgoFnlB0xsO/sG+kN0J6fw== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/touch-target" "^13.0.0" + tslib "^2.1.0" + +"@material/ripple@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/ripple/-/ripple-13.0.0.tgz" + integrity sha512-hx4B40hB2rRfsGwf1jwo2GGlYDq0yUQjcMcMmXfQipPJNpQhy8ylmXKc1DBjmWf7EQ/MgbfCSYwPrYXrbGP31w== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/ripple@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0.tgz" + integrity sha512-9XoGBFd5JhFgELgW7pqtiLy+CnCIcV2s9cQ2BWbOQeA8faX9UZIDUx/g76nHLZ7UzKFtsULJxZTwORmsEt2zvw== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/rtl@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/rtl/-/rtl-13.0.0.tgz" + integrity sha512-nFGy3iQg7k+xLs67eb86mRFVLwa0yi7MusqRK4OM8DXcLO5yoVfUTPKpdSykcbRryp9imVHsxutox2tZawR4og== + dependencies: + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/rtl@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0.tgz" + integrity sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA== + dependencies: + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/select@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/select/-/select-13.0.0.tgz" + integrity sha512-wVprsSMicU/l+LAqXdOU+qdzzdHupLXpWWQo2Rsk8G6AxL1Zna+/+ETnRlDdr2wHHK/KNDXSBdmuCcoEIRshcA== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/floating-label" "^13.0.0" + "@material/line-ripple" "^13.0.0" + "@material/list" "^13.0.0" + "@material/menu" "^13.0.0" + "@material/menu-surface" "^13.0.0" + "@material/notched-outline" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/shape@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/shape/-/shape-13.0.0.tgz" + integrity sha512-exk96+iCjzCujk3aSrvIMhmW773s1Tc0h+MbQKbt6Iv3nHJCyLSiRbxclCHXWHrVwG/9KZRkrt/g2qk7P3VRBg== + dependencies: + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/shape@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/shape/-/shape-14.0.0.tgz" + integrity sha512-o0mJB0+feOv473KckI8gFnUo8IQAaEA6ynXzw3VIYFjPi48pJwrxa0mZcJP/OoTXrCbDzDeFJfDPXEmRioBb9A== + dependencies: + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/snackbar@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/snackbar/-/snackbar-13.0.0.tgz" + integrity sha512-z59aYCeMWWEbsUU04QDZN4CxzCCOp3OIc5tzrdqnY3qRq4wwApxncf7RKKKSU2K6WTEWfdHHOc7aNX8kqlDmUg== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/button" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/icon-button" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/switch@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/switch/-/switch-14.0.0.tgz" + integrity sha512-vHVKzbvHVKGSrkMB1lZAl8z3eJ8sPRnSR+DWn+IhqHcTsDdDyly2NNj4i2vTSrEA39CztGqkx0OnKM4vkpiZHw== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/density" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/focus-ring" "^14.0.0" + "@material/ripple" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/shape" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/tokens" "^14.0.0" + tslib "^2.1.0" + +"@material/tab-bar@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-14.0.0.tgz" + integrity sha512-G/UYEOIcljCHlkj3iCRGIz4zE9RVcsdC9wuOR6LE2rla6EGyT0x2psNlL0pIMROjXoB0HGda/gB90ovzKcbURA== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/density" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/tab" "^14.0.0" + "@material/tab-indicator" "^14.0.0" + "@material/tab-scroller" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/tab-indicator@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-14.0.0.tgz" + integrity sha512-wfq136fsJGqtCIW8x1wFQHgRr7dIQ9SWqp6WG4FQGHpSzliNDA23/bdBUjh3lX2U+mfbdsFmZWEPy06jg2uc5g== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@material/tab-scroller@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-14.0.0.tgz" + integrity sha512-wadETsRM7vT4mRjXedaPXxI/WFSSgqHRNI//dORJ6627hoiJfLb5ixwUKTYk9zTz6gNwAlRTrKh98Dr9T7n7Kw== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/tab" "^14.0.0" + tslib "^2.1.0" + +"@material/tab@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tab/-/tab-14.0.0.tgz" + integrity sha512-jGSQdp6BvZOVnvGbv0DvNDJL2lHYVFtKGehV0gSZ7FrjHK6gZnKZjWOVwt1NPu9ig9zy85vPRFpvFTeje1KZpg== + dependencies: + "@material/base" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/focus-ring" "^14.0.0" + "@material/ripple" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/tab-indicator" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/textfield@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/textfield/-/textfield-13.0.0.tgz" + integrity sha512-CzodrOqx8wzj2AQngMpISURJID4jVOHf4CtiPoj32LG8bWLn5ZfAAX2aA2rO6NPyDYsFm0aEnlfMhnDwQyPoYw== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/density" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/floating-label" "^13.0.0" + "@material/line-ripple" "^13.0.0" + "@material/notched-outline" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/theme@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/theme/-/theme-13.0.0.tgz" + integrity sha512-KAe1s0MvvfCGAwJliDVTvgAKuD3ESwhl7F7br4Iam4IPdqME2rWl8NPhKHFfaWqTG7PyCgMMngYEYuA8cLNTsA== + dependencies: + "@material/feature-targeting" "^13.0.0" + tslib "^2.1.0" + +"@material/theme@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/theme/-/theme-14.0.0.tgz" + integrity sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA== + dependencies: + "@material/feature-targeting" "^14.0.0" + tslib "^2.1.0" + +"@material/tokens@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/tokens/-/tokens-13.0.0.tgz" + integrity sha512-t55CKVeAjABdSQCKjsvYvqrA6Z4f5varLpLloai8ZQU0giSl7qbUczV1i8y2pSOzpRTswD5JKM7a19qfsl/TCA== + dependencies: + "@material/elevation" "^13.0.0" + +"@material/tokens@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0.tgz" + integrity sha512-SXgB9VwsKW4DFkHmJfDIS0x0cGdMWC1D06m6z/WQQ5P5j6/m0pKrbHVlrLzXcRjau+mFhXGvj/KyPo9Pp/Rc8Q== + dependencies: + "@material/elevation" "^14.0.0" + +"@material/tooltip@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/tooltip/-/tooltip-14.0.0.tgz" + integrity sha512-rp7sOuVE1hmg4VgBJMnSvtDbSzctL42X7y1yv8ukuu40Sli+H5FT0Zbn351EfjJgQWg/AlXA6+reVXkXje8JzQ== + dependencies: + "@material/animation" "^14.0.0" + "@material/base" "^14.0.0" + "@material/dom" "^14.0.0" + "@material/elevation" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + "@material/shape" "^14.0.0" + "@material/theme" "^14.0.0" + "@material/typography" "^14.0.0" + tslib "^2.1.0" + +"@material/touch-target@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/touch-target/-/touch-target-13.0.0.tgz" + integrity sha512-2BMjj+nwKIYG7cZZGcNuRSKo53knqDu9ksv9wLidxjLgzqXBd1v9gdXsqMRQXepoOqftWGmYMaRYI0xMnxt6lA== + dependencies: + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + tslib "^2.1.0" + +"@material/touch-target@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0.tgz" + integrity sha512-o3kvxmS4HkmZoQTvtzLJrqSG+ezYXkyINm3Uiwio1PTg67pDgK5FRwInkz0VNaWPcw9+5jqjUQGjuZMtjQMq8w== + dependencies: + "@material/base" "^14.0.0" + "@material/feature-targeting" "^14.0.0" + "@material/rtl" "^14.0.0" + tslib "^2.1.0" + +"@material/typography@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/typography/-/typography-13.0.0.tgz" + integrity sha512-UfaK4vT3LmGiiySf2RVIrf7fJZa6EJadFwo4YUMJx9bvUMRlBm1oI8Vo9fYpKdLfuSTeA+2BlgbwYVObj3laFw== + dependencies: + "@material/feature-targeting" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/typography@^14.0.0": + version "14.0.0" + resolved "https://registry.npmjs.org/@material/typography/-/typography-14.0.0.tgz" + integrity sha512-/QtHBYiTR+TPMryM/CT386B2WlAQf/Ae32V324Z7P40gHLKY/YBXx7FDutAWZFeOerq/two4Nd2aAHBcMM2wMw== + dependencies: + "@material/feature-targeting" "^14.0.0" + "@material/theme" "^14.0.0" + tslib "^2.1.0" + +"@node-ipc/js-queue@2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz" + integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw== + dependencies: + easy-stack "1.0.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + +"@soda/friendly-errors-webpack-plugin@^1.8.0": + version "1.8.1" + resolved "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz" + integrity sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg== + dependencies: + chalk "^3.0.0" + error-stack-parser "^2.0.6" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +"@soda/get-current-script@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz" + integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/accepts@^1.3.5": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + +"@types/body-parser@*", "@types/body-parser@1.19.2": + version "1.19.2" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/cors@2.8.12": + version "2.8.12" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + +"@types/ejs@^3.0.6": + version "3.1.1" + resolved "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.1.tgz" + integrity sha512-RQul5wEfY7BjWm0sYY86cmUN/pcXWGyVxWX93DFFJvcrxax5zKlieLwA3T77xJGwNcZW0YW6CYG70p1m8xPFmA== + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": + version "8.4.5" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz" + integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@4.17.29": + version "4.17.29" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13", "@types/express@4.17.13": + version "4.17.13" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/inquirer@^8.1.3": + version "8.2.1" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.1.tgz" + integrity sha512-wKW3SKIUMmltbykg4I5JzCVzUhkuD9trD6efAmYgN2MrSntY0SMRQzEnD3mkyJ/rv9NLbTC7g3hKKE86YwEDLw== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + +"@types/jscodeshift@^0.7.1": + version "0.7.2" + resolved "https://registry.npmjs.org/@types/jscodeshift/-/jscodeshift-0.7.2.tgz" + integrity sha512-k4ih8ayQ65e26vhCxeMTKtZ808DzC0RFQ4unBvPEy9bcFhS4aPm3oXgWWZNmZ4u+H2WzHQDCNrRC5iNX+afiZw== + dependencies: + ast-types "0.12.1" + recast "0.17.2" + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/long@^4.0.0": + version "4.0.2" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/node@*": + version "18.6.1" + resolved "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz" + integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== + +"@types/node@^10.1.0": + version "10.17.60" + resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.13.10" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/through@*": + version "0.0.30" + resolved "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@vue/babel-helper-vue-jsx-merge-props@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz" + integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA== + +"@vue/babel-helper-vue-transform-on@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz" + integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA== + +"@vue/babel-plugin-jsx@^1.0.3": + version "1.1.1" + resolved "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz" + integrity sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + "@vue/babel-helper-vue-transform-on" "^1.0.2" + camelcase "^6.0.0" + html-tags "^3.1.0" + svg-tags "^1.0.0" + +"@vue/babel-plugin-transform-vue-jsx@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz" + integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz" + integrity sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg== + dependencies: + "@babel/core" "^7.12.16" + "@babel/helper-compilation-targets" "^7.12.16" + "@babel/helper-module-imports" "^7.12.13" + "@babel/plugin-proposal-class-properties" "^7.12.13" + "@babel/plugin-proposal-decorators" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/plugin-transform-runtime" "^7.12.15" + "@babel/preset-env" "^7.12.16" + "@babel/runtime" "^7.12.13" + "@vue/babel-plugin-jsx" "^1.0.3" + "@vue/babel-preset-jsx" "^1.1.2" + babel-plugin-dynamic-import-node "^2.3.3" + core-js "^3.8.3" + core-js-compat "^3.8.3" + semver "^7.3.4" + +"@vue/babel-preset-jsx@^1.1.2": + version "1.3.1" + resolved "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.3.1.tgz" + integrity sha512-ml+nqcSKp8uAqFZLNc7OWLMzR7xDBsUfkomF98DtiIBlLqlq4jCQoLINARhgqRIyKdB+mk/94NWpIb4pL6D3xw== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + "@vue/babel-sugar-composition-api-inject-h" "^1.3.0" + "@vue/babel-sugar-composition-api-render-instance" "^1.3.0" + "@vue/babel-sugar-functional-vue" "^1.2.2" + "@vue/babel-sugar-inject-h" "^1.2.2" + "@vue/babel-sugar-v-model" "^1.3.0" + "@vue/babel-sugar-v-on" "^1.3.0" + +"@vue/babel-sugar-composition-api-inject-h@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.3.0.tgz" + integrity sha512-pIDOutEpqbURdVw7xhgxmuDW8Tl+lTgzJZC5jdlUu0lY2+izT9kz3Umd/Tbu0U5cpCJ2Yhu87BZFBzWpS0Xemg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-composition-api-render-instance@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.3.0.tgz" + integrity sha512-NYNnU2r7wkJLMV5p9Zj4pswmCs037O/N2+/Fs6SyX7aRFzXJRP1/2CZh5cIwQxWQajHXuCUd5mTb7DxoBVWyTg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-functional-vue@^1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz" + integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz" + integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.3.0.tgz" + integrity sha512-zcsabmdX48JmxTObn3xmrvvdbEy8oo63DphVyA3WRYGp4SEvJRpu/IvZCVPl/dXLuob2xO/QRuncqPgHvZPzpA== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.3.0.tgz" + integrity sha512-8VZgrS0G5bh7+Prj7oJkzg9GvhSPnuW5YT6MNaVAEy4uwxRLJ8GqHenaStfllChTao4XZ3EZkNtHB4Xbr/ePdA== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + +"@vue/cli-overlay@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz" + integrity sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ== + +"@vue/cli-plugin-babel@~5.0.0": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz" + integrity sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ== + dependencies: + "@babel/core" "^7.12.16" + "@vue/babel-preset-app" "^5.0.8" + "@vue/cli-shared-utils" "^5.0.8" + babel-loader "^8.2.2" + thread-loader "^3.0.0" + webpack "^5.54.0" + +"@vue/cli-plugin-eslint@~5.0.0": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz" + integrity sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg== + dependencies: + "@vue/cli-shared-utils" "^5.0.8" + eslint-webpack-plugin "^3.1.0" + globby "^11.0.2" + webpack "^5.54.0" + yorkie "^2.0.0" + +"@vue/cli-plugin-router@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz" + integrity sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg== + dependencies: + "@vue/cli-shared-utils" "^5.0.8" + +"@vue/cli-plugin-vuex@^5.0.8", "@vue/cli-plugin-vuex@~5.0.0": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz" + integrity sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA== + +"@vue/cli-service@^3.0.0 || ^4.0.0 || ^5.0.0-0", "@vue/cli-service@~5.0.0": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz" + integrity sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw== + dependencies: + "@babel/helper-compilation-targets" "^7.12.16" + "@soda/friendly-errors-webpack-plugin" "^1.8.0" + "@soda/get-current-script" "^1.0.2" + "@types/minimist" "^1.2.0" + "@vue/cli-overlay" "^5.0.8" + "@vue/cli-plugin-router" "^5.0.8" + "@vue/cli-plugin-vuex" "^5.0.8" + "@vue/cli-shared-utils" "^5.0.8" + "@vue/component-compiler-utils" "^3.3.0" + "@vue/vue-loader-v15" "npm:vue-loader@^15.9.7" + "@vue/web-component-wrapper" "^1.3.0" + acorn "^8.0.5" + acorn-walk "^8.0.2" + address "^1.1.2" + autoprefixer "^10.2.4" + browserslist "^4.16.3" + case-sensitive-paths-webpack-plugin "^2.3.0" + cli-highlight "^2.1.10" + clipboardy "^2.3.0" + cliui "^7.0.4" + copy-webpack-plugin "^9.0.1" + css-loader "^6.5.0" + css-minimizer-webpack-plugin "^3.0.2" + cssnano "^5.0.0" + debug "^4.1.1" + default-gateway "^6.0.3" + dotenv "^10.0.0" + dotenv-expand "^5.1.0" + fs-extra "^9.1.0" + globby "^11.0.2" + hash-sum "^2.0.0" + html-webpack-plugin "^5.1.0" + is-file-esm "^1.0.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.1" + lodash.mapvalues "^4.6.0" + mini-css-extract-plugin "^2.5.3" + minimist "^1.2.5" + module-alias "^2.2.2" + portfinder "^1.0.26" + postcss "^8.2.6" + postcss-loader "^6.1.1" + progress-webpack-plugin "^1.0.12" + ssri "^8.0.1" + terser-webpack-plugin "^5.1.1" + thread-loader "^3.0.0" + vue-loader "^17.0.0" + vue-style-loader "^4.1.3" + webpack "^5.54.0" + webpack-bundle-analyzer "^4.4.0" + webpack-chain "^6.5.1" + webpack-dev-server "^4.7.3" + webpack-merge "^5.7.3" + webpack-virtual-modules "^0.4.2" + whatwg-fetch "^3.6.2" + +"@vue/cli-shared-utils@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz" + integrity sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ== + dependencies: + "@achrinza/node-ipc" "^9.2.5" + chalk "^4.1.2" + execa "^1.0.0" + joi "^17.4.0" + launch-editor "^2.2.1" + lru-cache "^6.0.0" + node-fetch "^2.6.7" + open "^8.0.2" + ora "^5.3.0" + read-pkg "^5.1.1" + semver "^7.3.4" + strip-ansi "^6.0.0" + +"@vue/cli-ui-addon-webpack@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-ui-addon-webpack/-/cli-ui-addon-webpack-5.0.8.tgz" + integrity sha512-sg+3a9vHGzpFRrv7MVZRQ9oDztFN9Mvx0MleidKyPIAWMSOskSQT8zTngy8bEyXjXwNv6mCn2jvUR/tgbldyow== + +"@vue/cli-ui-addon-widgets@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-ui-addon-widgets/-/cli-ui-addon-widgets-5.0.8.tgz" + integrity sha512-jNYQ+3z7HDZ3IR3Z3Dlo3yOPbHexpygkn2IJ7sjA62oGolnNWeF7kvpLwni18l8N5InhS66m9w31an1Fs5pCZA== + +"@vue/cli-ui@^5.0.8": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli-ui/-/cli-ui-5.0.8.tgz" + integrity sha512-1eyL1h1T3LVejYplDqERO8TK03sjR3QTOTHa01ABreCdqFTZItiUVud34uEcuoZ6Gi69xdl+LSx6Hvo4t9tfrA== + dependencies: + "@achrinza/node-ipc" "^9.2.5" + "@akryum/winattr" "^3.0.0" + "@graphql-tools/schema" "^8.5.0" + "@vue/cli-shared-utils" "^5.0.8" + apollo-server-express "^3.9.0" + clone "^2.1.1" + deepmerge "^4.2.2" + express "^4.17.1" + express-history-api-fallback "^2.2.1" + fkill "^7.1.0" + fs-extra "^9.1.0" + globby "^11.0.2" + graphql "^15.5.0" + graphql-subscriptions "^1.2.0" + graphql-tag "^2.10.3" + graphql-type-json "^0.3.1" + javascript-stringify "^2.0.1" + js-yaml "^4.0.0" + lodash.merge "^4.6.1" + lowdb "^1.0.0" + lru-cache "^6.0.0" + node-notifier "^10.0.0" + parse-git-config "^3.0.0" + portfinder "^1.0.26" + prismjs "^1.23.0" + rss-parser "^3.11.0" + shortid "^2.2.15" + subscriptions-transport-ws "^0.11.0" + typescript "~4.5.5" + +"@vue/cli@^5.0.4": + version "5.0.8" + resolved "https://registry.npmjs.org/@vue/cli/-/cli-5.0.8.tgz" + integrity sha512-c/QKPdC09bYkW22m/boXkLaiz10z0Z2WHZO7zEeNdfSduqyWINZhKc6hVQU3Vk0NXW7BJAd7zWmcUrC8L9TuAA== + dependencies: + "@types/ejs" "^3.0.6" + "@types/inquirer" "^8.1.3" + "@vue/cli-shared-utils" "^5.0.8" + "@vue/cli-ui" "^5.0.8" + "@vue/cli-ui-addon-webpack" "^5.0.8" + "@vue/cli-ui-addon-widgets" "^5.0.8" + boxen "^5.0.0" + commander "^7.1.0" + debug "^4.1.0" + deepmerge "^4.2.2" + download-git-repo "^3.0.2" + ejs "^3.1.6" + envinfo "^7.7.4" + fs-extra "^9.1.0" + globby "^11.0.2" + import-global "^0.1.0" + ini "^2.0.0" + inquirer "^8.0.0" + isbinaryfile "^4.0.6" + javascript-stringify "^2.0.1" + js-yaml "^4.0.0" + leven "^3.1.0" + lodash.clonedeep "^4.5.0" + lru-cache "^6.0.0" + minimist "^1.2.5" + pkg-dir "^5.0.0" + recast "^0.20.3" + resolve "^1.20.0" + shortid "^2.2.15" + slash "^3.0.0" + strip-ansi "^6.0.0" + validate-npm-package-name "^3.0.0" + vue "^2.6.14" + vue-codemod "^0.0.5" + yaml-front-matter "^4.1.0" + +"@vue/compiler-core@^3.0.5", "@vue/compiler-core@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.32.tgz" + integrity sha512-8tCVWkkLe/QCWIsrIvExUGnhYCAOroUs5dzhSoKL5w4MJS8uIYiou+pOPSVIOALOQ80B0jBs+Ri+kd5+MBnCDw== + dependencies: + "@babel/parser" "^7.24.7" + "@vue/shared" "3.4.32" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@^3.0.5", "@vue/compiler-dom@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.32.tgz" + integrity sha512-PbSgt9KuYo4fyb90dynuPc0XFTfFPs3sCTbPLOLlo+PrUESW1gn/NjSsUvhR+mI2AmmEzexwYMxbHDldxSOr2A== + dependencies: + "@vue/compiler-core" "3.4.32" + "@vue/shared" "3.4.32" + +"@vue/compiler-sfc@^3.4.32", "@vue/compiler-sfc@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.32.tgz" + integrity sha512-STy9im/WHfaguJnfKjjVpMHukxHUrOKjm2vVCxiojQJyo3Sb6Os8SMXBr/MI+ekpstEGkDONfqAQoSbZhspLYw== + dependencies: + "@babel/parser" "^7.24.7" + "@vue/compiler-core" "3.4.32" + "@vue/compiler-dom" "3.4.32" + "@vue/compiler-ssr" "3.4.32" + "@vue/shared" "3.4.32" + estree-walker "^2.0.2" + magic-string "^0.30.10" + postcss "^8.4.39" + source-map-js "^1.2.0" + +"@vue/compiler-sfc@2.7.14": + version "2.7.14" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz" + integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== + dependencies: + "@babel/parser" "^7.18.4" + postcss "^8.4.14" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.32.tgz" + integrity sha512-nyu/txTecF6DrxLrpLcI34xutrvZPtHPBj9yRoPxstIquxeeyywXpYZrQMsIeDfBhlw1abJb9CbbyZvDw2kjdg== + dependencies: + "@vue/compiler-dom" "3.4.32" + "@vue/shared" "3.4.32" + +"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0": + version "3.3.0" + resolved "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz" + integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.36" + postcss-selector-parser "^6.0.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + optionalDependencies: + prettier "^1.18.2 || ^2.0.0" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.1": + version "6.6.3" + resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz" + integrity sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw== + +"@vue/reactivity@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.32.tgz" + integrity sha512-1P7QvghAzhSIWmiNmh4MNkLVjr2QTNDcFv2sKmytEWhR6t7BZzNicgm5ENER4uU++wbWxgRh/pSEYgdI3MDcvg== + dependencies: + "@vue/shared" "3.4.32" + +"@vue/runtime-core@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.32.tgz" + integrity sha512-FxT2dTHUs1Hki8Ui/B1Hu339mx4H5kRJooqrNM32tGUHBPStJxwMzLIRbeGO/B1NMplU4Pg9fwOqrJtrOzkdfA== + dependencies: + "@vue/reactivity" "3.4.32" + "@vue/shared" "3.4.32" + +"@vue/runtime-dom@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.32.tgz" + integrity sha512-Xz9G+ZViRyPFQtRBCPFkhMzKn454ihCPMKUiacNaUhuTIXvyfkAq8l89IZ/kegFVyw/7KkJGRGqYdEZrf27Xsg== + dependencies: + "@vue/reactivity" "3.4.32" + "@vue/runtime-core" "3.4.32" + "@vue/shared" "3.4.32" + csstype "^3.1.3" + +"@vue/server-renderer@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.32.tgz" + integrity sha512-3c4rd0522Ao8hKjzgmUAbcjv2mBnvnw0Ld2f8HOMCuWJZjYie/p8cpIoYJbeP0VV2JYmrJJMwGQDO5RH4iQ30A== + dependencies: + "@vue/compiler-ssr" "3.4.32" + "@vue/shared" "3.4.32" + +"@vue/shared@3.4.32": + version "3.4.32" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.32.tgz" + integrity sha512-ep4mF1IVnX/pYaNwxwOpJHyBtOMKWoKZMbnUyd+z0udqIxLUh7YCCd/JfDna8aUrmnG9SFORyIq2HzEATRrQsg== + +"@vue/vue-loader-v15@npm:vue-loader@^15.9.7": + version "15.10.0" + resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz" + integrity sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg== + dependencies: + "@vue/component-compiler-utils" "^3.1.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +"@vue/web-component-wrapper@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz" + integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== + +"@vuelidate/core@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.3.tgz" + integrity sha512-AN6l7KF7+mEfyWG0doT96z+47ljwPpZfi9/JrNMkOGLFv27XVZvKzRLXlmDPQjPl/wOB1GNnHuc54jlCLRNqGA== + dependencies: + vue-demi "^0.13.11" + +"@vuelidate/validators@^2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.4.tgz" + integrity sha512-odTxtUZ2JpwwiQ10t0QWYJkkYrfd0SyFYhdHH44QQ1jDatlZgTh/KRzrWVmn/ib9Gq7H4hFD4e8ahoo5YlUlDw== + dependencies: + vue-demi "^0.13.11" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.0, acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.0.5, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/address/-/address-1.2.0.tgz" + integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + +aggregate-error@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.8.0, ajv@^8.8.2: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-env "^4.2.1" + +apollo-reporting-protobuf@^3.3.1, apollo-reporting-protobuf@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.2.tgz" + integrity sha512-j1tx9tmkVdsLt1UPzBrvz90PdjAeKW157WxGn+aXlnnGfVjZLIRXX3x5t1NWtXvB7rVaAsLLILLtDHW382TSoQ== + dependencies: + "@apollo/protobufjs" "1.2.4" + +apollo-server-core@^3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.10.0.tgz" + integrity sha512-ln5drIk3oW/ycYhcYL9TvM7vRf7OZwJrgHWlnjnMakozBQIBSumdMi4pN001DhU9mVBWTfnmBv3CdcxJdGXIvA== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + "@apollo/utils.usagereporting" "^1.0.0" + "@apollographql/apollo-tools" "^0.5.3" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@josephg/resolvable" "^1.0.0" + apollo-datasource "^3.3.2" + apollo-reporting-protobuf "^3.3.2" + apollo-server-env "^4.2.1" + apollo-server-errors "^3.3.1" + apollo-server-plugin-base "^3.6.2" + apollo-server-types "^3.6.2" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.1.0" + graphql-tag "^2.11.0" + loglevel "^1.6.8" + lru-cache "^6.0.0" + sha.js "^2.4.11" + uuid "^8.0.0" + whatwg-mimetype "^3.0.0" + +apollo-server-env@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz" + integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== + dependencies: + node-fetch "^2.6.7" + +apollo-server-errors@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz" + integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== + +apollo-server-express@^3.9.0: + version "3.10.0" + resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.10.0.tgz" + integrity sha512-ww3tZq9I/x3Oxtux8xlHAZcSB0NNQ17lRlY6yCLk1F+jCzdcjuj0x8XNg0GdTrMowt5v43o786bU9VYKD5OVnA== + dependencies: + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.13" + "@types/express-serve-static-core" "4.17.29" + accepts "^1.3.5" + apollo-server-core "^3.10.0" + apollo-server-types "^3.6.2" + body-parser "^1.19.0" + cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.2.tgz" + integrity sha512-erWXjLOO1u7fxQkbxJ2cwSO7p0tYzNied91I1SJ9tikXZ/2eZUyDyvrpI+4g70kOdEi+AmJ5Fo8ahEXKJ75zdg== + dependencies: + apollo-server-types "^3.6.2" + +apollo-server-types@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.2.tgz" + integrity sha512-9Z54S7NB+qW1VV+kmiqwU2Q6jxWfX89HlSGCGOo3zrkrperh85LrzABgN9S92+qyeHYd72noMDg2aI039sF3dg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + apollo-reporting-protobuf "^3.3.2" + apollo-server-env "^4.2.1" + +arch@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== + dependencies: + file-type "^4.2.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +ast-types@0.12.1: + version "0.12.1" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.12.1.tgz" + integrity sha512-H2izJAyT2xwew4TxShpmxe6f9R5hHgJQy1QloLiUC2yrJMtyraBWNJL7903rpeCY9keNUipORR/zIUC2XcYKng== + +ast-types@0.14.2: + version "0.14.2" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-retry@^1.2.1: + version "1.3.3" + resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@^2.6.2: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atoa@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/atoa/-/atoa-1.0.0.tgz" + integrity sha512-VVE1H6cc4ai+ZXo/CRWoJiHXrA1qfA31DPnx6D20+kSI547hQN5Greh51LQ1baMRMfxO5K5M4ImMtZbZt2DODQ== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^10.2.4: + version "10.4.7" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz" + integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== + dependencies: + browserslist "^4.20.3" + caniuse-lite "^1.0.30001335" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-loader@^8.2.2: + version "8.2.5" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.1.1: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@^1.19.0, body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.16.6, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.2, "browserslist@>= 4.21.0": + version "4.21.3" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.2.1, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +bullseye@1.4.6: + version "1.4.6" + resolved "https://registry.npmjs.org/bullseye/-/bullseye-1.4.6.tgz" + integrity sha512-7Y69O3EPzT5g9D3J6zcVKyufX2g5HvzdDgcuebvmAXgcD7FvAOvRsEMcPBqI/oOEJOj4FSdBxRu0PoyIuHcmAw== + dependencies: + crossvent "^1.3.1" + seleccion "2.0.0" + sell "^1.0.0" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001370: + version "1.0.30001370" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz" + integrity sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g== + +case-sensitive-paths-webpack-plugin@^2.3.0: + version "2.4.0" + resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chalk@^2.0.0, chalk@^2.1.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^5.2.2: + version "5.3.1" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz" + integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.10: + version "2.1.11" + resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^7.0.2, cliui@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^2.8.1: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.1.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +content-disposition@^0.5.2, content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +contra@^1.9.4: + version "1.9.4" + resolved "https://registry.npmjs.org/contra/-/contra-1.9.4.tgz" + integrity sha512-N9ArHAqwR/lhPq4OdIAwH4e1btn6EIZMAz4TazjnzCiVECcWUPTma+dRAM38ERImEJBh8NiCCpjoQruSZ+agYg== + dependencies: + atoa "1.0.0" + ticky "1.0.1" + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +copy-webpack-plugin@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz" + integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== + dependencies: + fast-glob "^3.2.7" + glob-parent "^6.0.1" + globby "^11.0.3" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + +core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.8.3: + version "3.24.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.0.tgz" + integrity sha512-F+2E63X3ff/nj8uIrf8Rf24UDGIz7p838+xjEp+Bx3y8OWXj+VTPPZNCtdqovPaS9o7Tka5mCH01Zn5vOd6UQg== + dependencies: + browserslist "^4.21.2" + semver "7.0.0" + +core-js@^3.8.3: + version "3.36.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz" + integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crossvent@^1.3.1, crossvent@1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/crossvent/-/crossvent-1.5.0.tgz" + integrity sha512-jt1QxLWytu7YGx3rPFm3K34/NJ55ryj6D50GloC8j+m9djy5rAUSG7Z/cavtMODXKMJunQb5sl809A3vCC7tkA== + dependencies: + custom-event "1.0.0" + +css-declaration-sorter@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + +css-loader@*, css-loader@^6.5.0: + version "6.7.1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.7" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^3.0.2: + version "3.4.1" + resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + +cssnano-preset-default@^5.2.12: + version "5.2.12" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz" + integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== + dependencies: + css-declaration-sorter "^6.3.0" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.6" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.0, cssnano@^5.0.6: + version "5.1.12" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz" + integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== + dependencies: + cssnano-preset-default "^5.2.12" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.1.0, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +custom-event@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/custom-event/-/custom-event-1.0.0.tgz" + integrity sha512-6nOXX3UitrmdvSJWoVR2dlzhbX5bEUqmqsMUyx1ypCLZkHHkcuYtdpW3p94RGvcFkTV7DkLo+Ilbwnlwi8L+jw== + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +download-git-repo@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/download-git-repo/-/download-git-repo-3.0.2.tgz" + integrity sha512-N8hWXD4hXqmEcNoR8TBYFntaOcYvEQ7Bz90mgm3bZRTuteGQqwT32VDMnTyD0KTEvb8BWrMc1tVmzuV9u/WrAg== + dependencies: + download "^7.1.0" + git-clone "^0.1.0" + rimraf "^3.0.0" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +easy-stack@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz" + integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.8" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.202: + version "1.4.202" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.202.tgz" + integrity sha512-JYsK2ex9lmQD27kj19fhXYxzFJ/phLAkLKHv49A5UY6kMRV2xED3qMMLg/voW/+0AR6wMiI+VxlmK9NDtdxlPA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0, entities@^2.0.3: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-vue@^8.0.3: + version "8.7.1" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz" + integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg== + dependencies: + eslint-utils "^3.0.0" + natural-compare "^1.4.0" + nth-check "^2.0.1" + postcss-selector-parser "^6.0.9" + semver "^7.3.5" + vue-eslint-parser "^8.0.1" + +eslint-scope@^5.1.1, eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-webpack-plugin@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz" + integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== + dependencies: + "@types/eslint" "^7.29.0 || ^8.4.1" + jest-worker "^28.0.2" + micromatch "^4.0.5" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + +"eslint@^6.2.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^7.32.0, "eslint@^7.5.0 || ^8.0.0", eslint@>=5, eslint@>=6.0.0, eslint@>=7.5.0: + version "7.32.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +espree@^9.0.0: + version "9.3.2" + resolved "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== + dependencies: + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz" + integrity sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express-history-api-fallback@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/express-history-api-fallback/-/express-history-api-fallback-2.2.1.tgz" + integrity sha512-swxwm3aP8vrOOvlzOdZvHlSZtJGwHKaY94J6AkrAgCTmcbko3IRwbkhLv2wKV1WeZhjxX58aLMpP3atDBnKuZg== + +express@^4.17.1, express@^4.17.3: + version "4.18.1" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +fkill@^7.1.0: + version "7.2.1" + resolved "https://registry.npmjs.org/fkill/-/fkill-7.2.1.tgz" + integrity sha512-eN9cmsIlRdq06wu3m01OOEgQf5Xh/M7REm0jfZ4eL3V3XisjXzfRq3iyqtKS+FhO6wB36FvWRiRGdeSx5KpLAQ== + dependencies: + aggregate-error "^3.1.0" + arrify "^2.0.1" + execa "^5.0.0" + pid-port "^0.1.0" + process-exists "^4.0.0" + ps-list "^7.2.0" + taskkill "^3.1.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + +flow-parser@0.*: + version "0.183.0" + resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.183.0.tgz" + integrity sha512-2e/aIZIM7iJpHCBxpqdXetYYoO3YQEJzA7M8v5bhWhXCu+lIfkeSfOWycWW0rhlnJyjMftbmwn6B2eenKeGlag== + +follow-redirects@^1.0.0: + version "1.15.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fswin@^2.17.1227: + version "2.17.1227" + resolved "https://registry.npmjs.org/fswin/-/fswin-2.17.1227.tgz" + integrity sha512-xNDktvwzSsXT8Xqnpz59VbuFwGHhtn1w+dS7QQ+wAu5cbH0p3WMGKU9Duf7cPna+nubhR+5ZG1MTl6/V6xgRgw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^3.0.0, get-stream@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +git-clone@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/git-clone/-/git-clone-0.1.0.tgz" + integrity sha512-zs9rlfa7HyaJAKG9o+V7C6qfMzyc+tb1IIXdUFcOBcR1U7siKy/uPdauLlrH1mc0vOgUwIv4BF+QxPiiTYz3Rw== + +git-config-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz" + integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globals@^13.9.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.2, globby@^11.0.3: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graphql-subscriptions@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz" + integrity sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g== + dependencies: + iterall "^1.3.0" + +graphql-tag@^2.10.3, graphql-tag@^2.11.0: + version "2.12.6" + resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql-type-json@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz" + integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== + +"graphql@^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql@^14.2.1 || ^15.0.0 || ^16.0.0", "graphql@^15.3.0 || ^16.0.0", graphql@^15.5.0, "graphql@^15.7.2 || ^16.0.0", graphql@>=0.8.0, "graphql@14.x || 15.x || 16.x": + version "15.8.0" + resolved "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" + integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz" + integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +highlight.js@^10.7.1, highlight.js@^10.7.3: + version "10.7.3" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +highlight.js@^11.8.0: + version "11.9.0" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz" + integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz" + integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== + +html-tags@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + +html-webpack-plugin@^5.1.0: + version "5.5.0" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.4.24, iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-global@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/import-global/-/import-global-0.1.0.tgz" + integrity sha512-8+hPJLML+m1ym9NSeZXTXFkY5+ml0fYFAzO5yhZiaFQvk9kO0NkE7vd7e7kCVjkTmAxsDPbrWwLQACMwGTDgIg== + dependencies: + global-dirs "^0.1.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +inquirer@^7.0.3: + version "7.3.3" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +inquirer@^8.0.0: + version "8.2.4" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-file-esm@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz" + integrity sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA== + dependencies: + read-pkg-up "^7.0.1" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" + integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0, isarray@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^4.0.6: + version "4.0.10" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +iterall@^1.2.1, iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + +jest-worker@^27.0.2, jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^28.0.2: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.4.0: + version "17.6.0" + resolved "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +jquery@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-message@1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz" + integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jscodeshift@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz" + integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" + "@babel/plugin-proposal-optional-chaining" "^7.1.0" + "@babel/plugin-transform-modules-commonjs" "^7.1.0" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.20.3" + temp "^0.8.1" + write-file-atomic "^2.3.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klona@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +launch-editor-middleware@^2.2.1: + version "2.4.0" + resolved "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.4.0.tgz" + integrity sha512-/M7AX/6xktZY60KE7j71XLrj9U6H5TBoP+mJzhYB3fcdAq8rcazit/K0qWiu1jvytUPXP4lJRd1VJFwvdMQ/uw== + dependencies: + launch-editor "^2.4.0" + +launch-editor@^2.2.1, launch-editor@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.4.0.tgz" + integrity sha512-mZ0BHeSn/ohL+Ib+b+JnxC59vcNz6v5IR9d0CuM8f0x8ni8oK3IIG6G0vMkpxc0gFsmvINkztGOHiWTaX4BmAg== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.6.1" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libphonenumber-js@^1.10.12, libphonenumber-js@^1.10.59: + version "1.10.60" + resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.60.tgz" + integrity sha512-Ctgq2lXUpEJo5j1762NOzl2xo7z7pqmVWYai0p07LvAkQ32tbPv3wb+tcUeHEiXhKU5buM4H9MXsXo6OlM6C2g== + +lilconfig@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.1.0, loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz" + integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.1, lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@4: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz" + integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loglevel@^1.6.8: + version "1.8.0" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +lowdb@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz" + integrity sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ== + dependencies: + graceful-fs "^4.1.3" + is-promise "^2.1.0" + lodash "4" + pify "^3.0.0" + steno "^0.4.1" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" + integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.10.1: + version "7.13.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz" + integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== + +magic-string@^0.30.10: + version "0.30.10" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +material-colors@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.4.3: + version "3.4.7" + resolved "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@^1.28.0, "mime-db@>= 1.43.0 < 2", mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-css-extract-plugin@^2.5.3: + version "2.6.1" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass@^3.1.1: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== + +moment-timezone@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.6.0.tgz" + integrity sha512-ldA5lRNm3iJCWZcBCab4pnNL3HSZYXVb/3TYr75/1WCTWYuTqYUb5f/S384pncYjJ88lbO8Z4uPDvmoluHJc8Q== + dependencies: + moment "^2.29.4" + +moment@^2.29.4, moment@^2.8.2: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^2.1.0: + version "2.1.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-notifier@^10.0.0: + version "10.0.1" + resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz" + integrity sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.5" + shellwords "^0.1.1" + uuid "^8.3.2" + which "^2.0.2" + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz" + integrity sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.2, open@^8.0.9: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.3.0, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" + integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-git-config@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz" + integrity sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA== + dependencies: + git-config-path "^2.0.0" + ini "^1.3.5" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pid-port@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/pid-port/-/pid-port-0.1.1.tgz" + integrity sha512-boqPJtSgZC6KOgXKNPC+/XR3xwVtpOtaLa7JLcdf8jfVe0ZM2TwllBXxxLUO8GQbOLJ4/hEtf2+L1QCKbaoHUg== + dependencies: + execa "^5.0.0" + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-loader@^6.1.1: + version "6.2.1" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.5" + +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.39, postcss@^8.4.7: + version "8.4.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz" + integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +postcss@^7.0.36: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +"prettier@^1.18.2 || ^2.0.0": + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +prismjs@^1.23.0: + version "1.28.0" + resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== + +private@~0.1.5: + version "0.1.8" + resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-exists@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/process-exists/-/process-exists-4.1.0.tgz" + integrity sha512-BBJoiorUKoP2AuM5q/yKwIfT1YWRHsaxjW+Ayu9erLhqKOfnXzzVVML0XTYoQZuI1YvcWKmc1dh06DEy4+KzfA== + dependencies: + ps-list "^6.3.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress-webpack-plugin@^1.0.12: + version "1.0.16" + resolved "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz" + integrity sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA== + dependencies: + chalk "^2.1.0" + figures "^2.0.0" + log-update "^2.3.0" + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +ps-list@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz" + integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== + +ps-list@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz" + integrity sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@^6.10.3: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.1.1, read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recast@^0.20.3: + version "0.20.5" + resolved "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz" + integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== + dependencies: + ast-types "0.14.2" + esprima "~4.0.0" + source-map "~0.6.1" + tslib "^2.0.1" + +recast@0.17.2: + version "0.17.2" + resolved "https://registry.npmjs.org/recast/-/recast-0.17.2.tgz" + integrity sha512-YHFvn4rBXl8eIjALjUiOV/AP3xFpyGNGNHDw9mAncAWuIdgnBKjbZQ9+P3VlsKcNaNapRVFlTEX1dvDRlYwyxg== + dependencies: + ast-types "0.12.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.13.1, retry@0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rss-parser@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/rss-parser/-/rss-parser-3.12.0.tgz" + integrity sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A== + dependencies: + entities "^2.0.3" + xml2js "^0.4.19" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.2.0, rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@^14.2.1: + version "14.2.1" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz" + integrity sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ== + dependencies: + neo-async "^2.6.2" + +sass@^1.3.0, sass@^1.49.11: + version "1.54.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz" + integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +seek-bzip@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" + integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== + dependencies: + commander "^2.8.1" + +seleccion@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/seleccion/-/seleccion-2.0.0.tgz" + integrity sha512-PhrdUIWfCSpXujtwb2E+v/L4VgOo8KGn860V/Nep57IxL8Mz7vGCZ5yCCMU6IJVt4rE5XG9TRT1tpcXxXYqqcQ== + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +select2@^4.1.0-rc.0: + version "4.1.0-rc.0" + resolved "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz" + integrity sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A== + +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +sell@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/sell/-/sell-1.0.0.tgz" + integrity sha512-xd3i7H12FAVIfAT4FiWM07pxjqEZj2aPWEDREvF1Yb+gD0AUQvwrY/4/lT+Xb+eGWG2H0avvo963xQQ8ERWhIA== + +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.3" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +shortid@^2.2.15: + version "2.2.16" + resolved "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz" + integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g== + dependencies: + nanoid "^2.1.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-code-editor@^2.0.9: + version "2.0.9" + resolved "https://registry.npmjs.org/simple-code-editor/-/simple-code-editor-2.0.9.tgz" + integrity sha512-bDekCSgcaFn79kiB6N+S07/m9fLLfgHchVsKhMLyKsqZNaRC5GWxn2fpbMZPKmORDyWzUML3hy2mrN3XWyGSfA== + dependencies: + highlight.js "^11.8.0" + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slugify@^1.6.5: + version "1.6.5" + resolved "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz" + integrity sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sortablejs@1.14.0: + version "1.14.0" + resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz" + integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== + +source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0": + version "1.2.0" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +steno@^0.4.1: + version "0.4.4" + resolved "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz" + integrity sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w== + dependencies: + graceful-fs "^4.1.3" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" + integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + +subscriptions-transport-ws@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz" + integrity sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0 || ^6.0.0 || ^7.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table@^6.0.9: + version "6.8.0" + resolved "https://registry.npmjs.org/table/-/table-6.8.0.tgz" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +taskkill@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/taskkill/-/taskkill-3.1.0.tgz" + integrity sha512-5KcOFzPvd1nGFVrmB7H4+QAWVjYOf//+QTbOj0GpXbqtqbKGWVczG+rq6VhXAtdtlKLTs16NAmHRyF5vbggQ2w== + dependencies: + arrify "^2.0.1" + execa "^3.3.0" + +temp@^0.8.1: + version "0.8.4" + resolved "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + +terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: + version "5.3.3" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + +terser@^5.10.0, terser@^5.7.2: + version "5.14.2" + resolved "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +textarea-caret@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/textarea-caret/-/textarea-caret-3.1.0.tgz" + integrity sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-loader@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz" + integrity sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA== + dependencies: + json-parse-better-errors "^1.0.2" + loader-runner "^4.1.0" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +ticky@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ticky/-/ticky-1.0.1.tgz" + integrity sha512-RX35iq/D+lrsqhcPWIazM9ELkjOe30MSeoBHQHSsRwd1YuhJO5ui1K1/R0r7N3mFvbLBs33idw+eR6j+w6i/DA== + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@*, typescript@~4.5.5: + version "4.5.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" + integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.0.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vue-at@^3.0.0-alpha.2: + version "3.0.0-alpha.2" + resolved "https://registry.npmjs.org/vue-at/-/vue-at-3.0.0-alpha.2.tgz" + integrity sha512-ybFUA4SMxxG9WDkZczjMARu2Q8NeixRbzAk4izu9bUiXdDhDcYqyTDCU6X82SlW6/Dq4NZfw4zdpdKkoAkXdgw== + dependencies: + textarea-caret "^3.1.0" + +vue-codemod@^0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/vue-codemod/-/vue-codemod-0.0.5.tgz" + integrity sha512-DE+24W1d3oanGqq7yna4ddOKXmVzjECgku2ddMcm7OS9Bp9QOblMHT88PzKiCc7npGiHf5+mTfrEW1JVIBbA2A== + dependencies: + "@babel/core" "^7.10.3" + "@babel/preset-env" "^7.10.3" + "@babel/types" "^7.12.12" + "@types/jscodeshift" "^0.7.1" + "@vue/compiler-core" "^3.0.5" + "@vue/compiler-dom" "^3.0.5" + debug "^4.1.1" + globby "^11.0.2" + inquirer "^7.0.3" + jscodeshift "^0.11.0" + lru-cache "^6.0.0" + source-map "^0.6.1" + yargs "^16.2.0" + +vue-demi@^0.13.11: + version "0.13.11" + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz" + integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== + +vue-eslint-parser@^8.0.1: + version "8.3.0" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz" + integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== + dependencies: + debug "^4.3.2" + eslint-scope "^7.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.0.0" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.5" + +vue-hot-reload-api@^2.3.0: + version "2.3.4" + resolved "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz" + integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== + +vue-loader@^17.0.0: + version "17.0.0" + resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-17.0.0.tgz" + integrity sha512-OWSXjrzIvbF2LtOUmxT3HYgwwubbfFelN8PAP9R9dwpIkj48TVioHhWWSx7W7fk+iF5cgg3CBJRxwTdtLU4Ecg== + dependencies: + chalk "^4.1.0" + hash-sum "^2.0.0" + loader-utils "^2.0.0" + +vue-router@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.4.0.tgz" + integrity sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA== + dependencies: + "@vue/devtools-api" "^6.5.1" + +vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz" + integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-tel-input@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/vue-tel-input/-/vue-tel-input-6.0.5.tgz" + integrity sha512-7eTug2Yyo3bfLRlc//eSBu94YbXWB8PrBEe6/j48A0G51HUCUScZCJS0Kr4Sz5fV7jFtZ2jSCpGzb5fDZL7qYw== + dependencies: + libphonenumber-js "^1.10.12" + +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +vue@*, "vue@^2 || ^3.2.13", "vue@^2.0.0 || >=3.0.0", "vue@^3.0.0-0 || ^2.6.0", vue@^3.0.1, vue@^3.2.0, vue@^3.2.37, vue@^3.4.32, vue@3.4.32, vue@3.x: + version "3.4.32" + resolved "https://registry.npmjs.org/vue/-/vue-3.4.32.tgz" + integrity sha512-9mCGIAi/CAq7GtaLLLp2J92pEic+HArstG+pq6F+H7+/jB9a0Z7576n4Bh4k79/50L1cKMIhZC3MC0iGpl+1IA== + dependencies: + "@vue/compiler-dom" "3.4.32" + "@vue/compiler-sfc" "3.4.32" + "@vue/runtime-dom" "3.4.32" + "@vue/server-renderer" "3.4.32" + "@vue/shared" "3.4.32" + +vue@^2.6.14: + version "2.7.14" + resolved "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz" + integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== + dependencies: + "@vue/compiler-sfc" "2.7.14" + csstype "^3.1.0" + +vuedraggable@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz" + integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww== + dependencies: + sortablejs "1.14.0" + +vuex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.4.0: + version "4.5.0" + resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-chain@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz" + integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.7.3: + version "4.9.3" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@*, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.4.2: + version "0.4.4" + resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz" + integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== + +"webpack@^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.27.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.54.0, webpack@>=2: + version "5.74.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-fetch@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz" + integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.3.1: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.4.2: + version "8.8.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +xml2js@^0.4.19: + version "0.4.23" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xss@^1.0.8: + version "1.0.13" + resolved "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz" + integrity sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-front-matter@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/yaml-front-matter/-/yaml-front-matter-4.1.1.tgz" + integrity sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ== + dependencies: + commander "^6.2.0" + js-yaml "^3.14.1" + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.0.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/block-booking.css b/wp-content/plugins/simply-schedule-appointments/assets/css/block-booking.css new file mode 100644 index 0000000..4fdca9a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/block-booking.css @@ -0,0 +1,83 @@ +.wp-block[data-type="ssa/booking"] .ssa-block-container { + position: relative; +} + +.wp-block[data-type="ssa/booking"] .ssa-block-handler { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 2; +} + +.ssa-toggle-input-container, +.ssa-checkboxes-input-container { + display: flex; +} + +.ssa-toggle-input-container .components-base-control, +.ssa-checkboxes-input-container .components-base-control { + margin-bottom: calc(8px); +} + +.ssa-toggle-input-container [type="button"].ssa-block-booking-uncheck-all, +.ssa-checkboxes-input-container [type="button"].ssa-block-booking-uncheck-all { + box-shadow: none; + padding: 4px 9px; + margin: 5px 0 auto auto; + height: 100%; +} + +.ssa_first_available_control_wrapper { + display: flex; + gap: 2px; +} + +.ssa_first_available_control_wrapper .ssa_duration_unit { + min-width: 125px; + +} + +.ssa-bookingflow-tab-panel button:hover { + background-color: var(--ast-global-color-6, #e2e8f0); +} + +.ssa-bookingflow-tab-panel button[aria-selected="true"]::after { + height: 3px; +} + +.ssa-bookingflow-tab-panel div[role="tabpanel"] { + padding-top: 10px; +} + +.disabled-panel { + opacity: 0.5; +} + +.overlay-container { + position: relative; +} + +.panel-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.7); + z-index: 1; +} + +.message-box { + padding: 0 1rem 0 1rem; +} + +.message-box label::first-letter { + text-transform: uppercase; +} + +.message-box label { + font-size: 13px; + text-transform: lowercase; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/dashboard-upcoming-appointments-widget.css b/wp-content/plugins/simply-schedule-appointments/assets/css/dashboard-upcoming-appointments-widget.css new file mode 100644 index 0000000..664d912 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/dashboard-upcoming-appointments-widget.css @@ -0,0 +1,125 @@ +@import url('https://fonts.googleapis.com/icon?family=Material+Icons'); + +#ssa-dashboard-upcoming-appointments-widget div.inside { + margin: 0px; + padding: 0px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointments { + margin: 0px; + padding: 0px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment { + display: flex; + padding: 10px 0px; + margin: 0px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment:not(:last-child) { + border-bottom: 1px solid #ccc; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment h4 { + font-size: 16px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment i { + padding: 0px 10px; + font-size: 48px; + color: #8BC34A; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment .md-list-text-container>* { + margin: 0px; + gap: 0px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment .md-list-text-container p { + margin-right: 10px; +} + +#ssa-dashboard-upcoming-appointments-widget .ssa-upcoming-appointment-links a:not(:first-child) { + border-left: 2px solid lightgray; + padding-left: 4px; +} +#ssa-dashboard-upcoming-appointments-widget a .md-list-text-container:last-of-type { + margin: auto; +} + + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-red { + color: #f44336 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-pink { + color: #E91E63 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-purple { + color: #9C27B0 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-deep-purple { + color: #673AB7 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-indigo { + color: #3f51b5 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-blue { + color: #2196f3 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-light-blue { + color: #03a9f4 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-cyan { + color: #00bcd4 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-teal { + color: #009688 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-green { + color: #4caf50 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-light-green { + color: #8bc34a ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-lime { + color: #cddc39 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-yellow { + color: #ffeb3b ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-amber { + color: #ffc107 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-orange { + color: #ff9800 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-deep-orange { + color: #ff5722 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-brown { + color: #795548 ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-grey { + color: #9e9e9e ; +} + +#ssa-dashboard-upcoming-appointments-widget i.md-theme-blue-grey { + color: #607d8b ; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/iframe-inner.css b/wp-content/plugins/simply-schedule-appointments/assets/css/iframe-inner.css new file mode 100644 index 0000000..b62f186 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/iframe-inner.css @@ -0,0 +1,30 @@ +html[class], +html[id] { + margin-top: 0 !important; +} + +@media screen and (max-width: 782px) { + html[class], + html[id] { + margin-top: 0 !important; + } +} + +html, +html body { + margin: 0; + padding: 0; +} + +html body.md-theme-default { + background: white; + padding: 1rem; +} + +html #wpadminbar { + display: none !important; +} + +html #app { + padding: 0; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/material-icons.css b/wp-content/plugins/simply-schedule-appointments/assets/css/material-icons.css new file mode 100644 index 0000000..430460e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/material-icons.css @@ -0,0 +1,27 @@ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(../fonts/MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(../fonts/MaterialIcons-Regular.woff2) format('woff2'), + url(../fonts/MaterialIcons-Regular.woff) format('woff'), + url(../fonts/MaterialIcons-Regular.ttf) format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: 'liga'; + -webkit-font-smoothing: antialiased; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/roboto-font.css b/wp-content/plugins/simply-schedule-appointments/assets/css/roboto-font.css new file mode 100644 index 0000000..fa0c628 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/roboto-font.css @@ -0,0 +1,40 @@ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url('../fonts/roboto-italic-webfont.woff2') format('woff2'), + url('../fonts/roboto-italic-webfont.woff') format('woff'); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url('../fonts/roboto-light-webfont.woff2') format('woff2'), + url('../fonts/roboto-light-webfont.woff') format('woff'); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url('../fonts/roboto-regular-webfont.woff2') format('woff2'), + url('../fonts/roboto-regular-webfont.woff') format('woff'); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url('../fonts/roboto-medium-webfont.woff2') format('woff2'), + url('../fonts/roboto-medium-webfont.woff') format('woff'); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url('../fonts/roboto-bold-webfont.woff2') format('woff2'), + url('../fonts/roboto-bold-webfont.woff') format('woff'); + +} diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-gravity-forms-editor-styles.css b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-gravity-forms-editor-styles.css new file mode 100644 index 0000000..aa95011 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-gravity-forms-editor-styles.css @@ -0,0 +1,51 @@ + +/* used to hide custom tabs in gravity forms editor */ +.ssa-hidden { + display: none !important; +} + +#field_ssa_first_available_within_duration_inputs input, +#field_ssa_first_available_within_duration_inputs select { + min-height: 36px; + padding: 7px, 13px, 7px, 13px !important; +} + +#field_ssa_first_available_within_duration_inputs * { + width: 100%; +} + +#field_ssa_first_available_within_duration_inputs{ + display: flex; + gap: 12px; +} + +.ssa-tab-container { + display: flex; + border-bottom: 1px solid #DDDDDD; + margin-bottom:20px; + height: 52px; +} + +.ssa-tab { + flex: 1; + padding: 10px; + text-align: center; + cursor: pointer; + border: none; + background-color:unset; +} + +.ssa-tab-active { + border-bottom: 2px solid #3E7DA6; +} + +#field_ssa_booking_flow_date_view, +#field_ssa_booking_flow_time_view { + min-height: 36px; +} + +#date-view-tab-contents, +#time-view-tab-contents { + padding: 20px 0px; + min-height: 72px; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-account-styles.css b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-account-styles.css new file mode 100644 index 0000000..b91326a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-account-styles.css @@ -0,0 +1,114 @@ +.ssa-btn-raised { + border: 0 none; + border-radius: 2px; + cursor: pointer; + display: inline-block; + font-family: inherit; + font-size: inherit; + margin: 5px auto; + padding: 2px 6px; + line-height: unset; +} + +.ssa-btn-raised-bordered { + border: 1px solid; + cursor: pointer; + display: inline-block; + font-family: inherit; + font-size: inherit; + margin: 10px 0; + padding: 10px; +} + +#ssa_mepr_accountview_table_container .ssa-mepr_cell__appttype .ssa-mepr_cell__appttype-title { + font-size: large; +} + +#ssa_mepr_accountview_table_container table thead tr th { + text-align: center; +} + +.ssa-mepr_cell__upcoming-appts ul { + list-style: inside; + padding: 0px; + margin: 8px auto; + width: fit-content; +} + +.ssa-mepr_cell__upcoming-appts ul li { + display: flex; + justify-content: space-between; + gap: 11px; +} + +.ssa-mepr_grayed-out { + color: #777; +} + +#ssa-mepr-appointments-table-body .mepr-appointment-row td { + text-align: center !important; + padding: 13px; +} + +.ssa-loading-indicator { + position: relative; + overflow: hidden; + font-weight: 100; +} + +.ssa-loading-indicator::before { + content: ''; + position: absolute; + top: 0; + left: -200px; + width: 200px; + height: 100%; + background: linear-gradient(to right, rgba(255, 255, 255, 0) 47%, rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 1) 100%); + animation: ssaLoading 0.8s linear infinite; +} + +@keyframes ssaLoading { + from { + left: -200px; + } + to { + left: 100%; + } +} + +.ssa-mepr__past-appointments { + margin-top: 3rem; +} + +.ssa-mepr__past-appointments h2 { + font-size: larger; +} + +.ssa-mepr__past-appointments form { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 30px; + align-items: end; + margin-bottom: 30px; +} + +.ssa-mepr__past-appointments form select { + min-width: 200px; +} + +.ssa-past-table-empty { + text-align: center !important; + font-size: larger; + padding: 30px !important; +} + +#ssa-mepr-past-appointments-table-body td { + text-align: center; +} + +.ssa-mepr_pastAppointmentsCell a { + margin-left: 10px; +} + + diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-styles.css b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-styles.css new file mode 100644 index 0000000..9f6f2bd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-memberpress-styles.css @@ -0,0 +1,112 @@ +.ssa-memberpress-memberships-container { + padding: 10px; +} + +.ssa-memberpress-memberships-container .ssa-memberpress-helperText { + display: block; + color: #999; + font-size: 0.8rem; +} + +.ssa-memberpress-memberships-container .ssa-mepr-note { + font-size: 1.2em; + color: black; +} + +.ssa-memberpress-memberships-container .ssa-mepr_appt-title { + font-size: 1.2em; + font-weight: 500; +} + +.ssa-memberpress-memberships-container .ssa-mepr-flex { + display: flex; +} + +.ssa-memberpress-memberships-container .ssa-mepr-flex-column { + display: flex; + flex-direction: column; +} + +.ssa-memberpress-memberships-container .ssa-mepr-image-wrapper { + display: flex; + justify-content: flex-end; +} + +.ssa-memberpress-memberships-container .ssa-mepr-appointmnet-details { + min-height: 100px; + border: 1px solid; + border-top: none; +} + +.ssa-memberpress-memberships-container .ssa-mepr-appointmnet-details:first-of-type { + border: 1px solid; +} + + +.ssa-memberpress-memberships-container .ssa-mepr-flex-section { + border-right: 1px solid black; + box-sizing: border-box; + min-width: 50px; + display: flex; + justify-content: center; + align-items: center; + padding: 10px; + +} + + +.ssa-memberpress-memberships-container .ssa-mepr-flex-section-content-middle { + margin-left: 10px; + align-self: baseline; + line-height: 2; + display: flex; + flex-direction: column; + gap: 8px; +} + +.ssa-memberpress-memberships-container .ssa-mepr-flex-section:last-child { + border-right: none; + min-width: 80px; +} + +.ssa-memberpress-memberships-container button.ssa-mepr-remove-appointment-types { + border: none; + background: none; + cursor: pointer; + border-radius: 50%; +} + +.ssa-memberpress-memberships-container button.ssa-mepr-remove-appointment-types i::before { + font-size: 1.5rem; +} + +.ssa-memberpress-memberships-container button.ssa-mepr-remove-appointment-types:hover i { + color: #959595; +} + +.ssa-memberpress-memberships-empty-container { + display: flex; + flex-direction: column; + padding: 10px; +} + +.ssa-memberpress-memberships-empty-container p { + font-size: 1.2em; +} + +.ssa-memberpress-memberships-container input[type="number"] { + width: 4rem; +} + +.ssa-screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-styles.css b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-styles.css new file mode 100644 index 0000000..4001ee9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/ssa-styles.css @@ -0,0 +1,15 @@ +iframe.ssa_booking_iframe { + border: 0 none; + height: 600px; + max-height: none !important; /* Stop responsive iframe scripts from setting an aspect ratio */ + min-width: 100%; + width: 1px; +} + +.ssa-admin-warning { + background-color: #fff9c4; + border-left: 4px solid #fdd835; + color: #c6a700; + margin: 0; + padding: 16px; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/unsupported.css b/wp-content/plugins/simply-schedule-appointments/assets/css/unsupported.css new file mode 100644 index 0000000..8e3610d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/unsupported.css @@ -0,0 +1,42 @@ +.unsupported { + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + margin: 0 auto; + max-width: 420px; + padding: 36px; + position: relative; + text-align: center; +} + +.unsupported-container { + bottom: 0; + left: 0; + padding: 40px; + position: absolute; + right: 0; + top: 0; +} + +h1.unsupported-label { + font-size: 26px; + font-weight: 500; + line-height: 40px; +} + +p.unsupported-description { + font-size: 16px; + line-height: 24px; + margin: 1em 0; +} + +img.unsupported-icon { + height: auto; + margin: 0; + max-width: 100%; +} + +#ssa-unsupported { + display: none; +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/css/upcoming-appointments.css b/wp-content/plugins/simply-schedule-appointments/assets/css/upcoming-appointments.css new file mode 100644 index 0000000..55ef55b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/css/upcoming-appointments.css @@ -0,0 +1,180 @@ +.ssa-upcoming-appointments{ + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + gap: 1rem; + margin-bottom: 1rem; +} + +.ssa-upcoming-appointments .appointment-card{ + display: flex; + flex-direction: column; + color: #858585; + background-color: white; + border-radius: 4px; +} + +.ssa-upcoming-appointments .appointment-card-header{ + display: flex; + flex-wrap: wrap; + gap: 1rem; + padding: 1.5rem 1.5rem 0 1.5rem; +} + +.wp-container-core-group-layout-6 .ssa-upcoming-appointments .appointment-card-header{ + justify-content: center; +} + +.wp-container-core-columns-layout-1 .ssa-upcoming-appointments .appointment-card-header{ + justify-content: center; +} +.wp-container-core-columns-layout-2 .ssa-upcoming-appointments .appointment-card-header{ + justify-content: center; +} + +.wp-container-core-group-layout-6 .ssa-upcoming-appointments .appointment-card .appointment-card-header .member-avatar img{ + object-fit: contain; +} + +.wp-container-core-columns-layout-1 .ssa-upcoming-appointments .appointment-card .appointment-card-header .member-avatar img{ + object-fit: contain; +} +.wp-container-core-columns-layout-2 .ssa-upcoming-appointments .appointment-card .appointment-card-header .member-avatar img{ + object-fit: contain; +} + +.wp-container-core-group-layout-6 .ssa-upcoming-appointments .appointment-card .action-bar{ + display: flex; + justify-content: center; +} + +.wp-container-core-columns-layout-1 .ssa-upcoming-appointments .appointment-card .action-bar{ + display: flex; + justify-content: center; +} +.wp-container-core-columns-layout-2 .ssa-upcoming-appointments .appointment-card .action-bar{ + display: flex; + justify-content: center; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information{ + display: flex; + flex-direction: column; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-header { + display: flex; + flex-direction: column; + font-size: 20px; + font-weight: normal; + padding-top: 5px; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-header .appointment-staff { + color: #242424; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-header p:first-of-type{ + font-size: 22px; + font-weight: bold; + color: #636363; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-details ul { + padding-left: 18px; + margin: 11px 0 0 0; + font-size: 18px; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-details ul li { + list-style-type: none; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-details ul li a{ + color: #000000 !important; + text-decoration: underline !important; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .appointment-information .appointment-header p{ + margin: 0; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header img{ + width: 70px; + height: 70px; + border-radius: 120px; + object-fit: cover; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .staff-images-container{ + width: 70px; + height: 70px; + position: relative; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .staff-images-container img{ + width: 56px; + height: 56px; + position: absolute; + border-radius: 120px; + object-fit: cover; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .staff-images-container .secondary-image{ + top: 0; + left: 0; +} + +.ssa-upcoming-appointments .appointment-card .appointment-card-header .staff-images-container .primary-image{ + bottom: 0; + right: 0; +} + +.ssa-upcoming-appointments .appointment-card .action-bar{ + padding: 1rem; +} + +.ssa-upcoming-appointments .appointment-card .action-bar button{ + padding: 0.5rem 8px; + font-size: 18px; + background-color: transparent; + border: none; + color: #000000; + content: 'Edit Appointment'; + border-radius: 4px; +} + +.ssa-upcoming-appointments .appointment-card .action-bar button:hover{ + cursor: pointer; + background-color: #FAFDF8; +} + +@media screen and (min-width: 486px) and (max-width: 768px){ + .ssa-upcoming-appointments .appointment-card-header{ + justify-content: center; + } + .ssa-upcoming-appointments .appointment-card .appointment-card-header .member-avatar img { + object-fit: contain; + } + .ssa-upcoming-appointments .appointment-card .action-bar{ + display: flex; + justify-content: center; + } +} + +@media screen and (min-width: 600px) and (max-width: 768px) { + .wp-container-core-group-layout-6 .ssa-upcoming-appointments .appointment-card .action-bar{ + display:block; + justify-content: none; + } + + .wp-container-core-columns-layout-1 .ssa-upcoming-appointments .appointment-card .action-bar{ + display:block; + justify-content: none; + } + .wp-container-core-columns-layout-2 .ssa-upcoming-appointments .appointment-card .action-bar{ + display:block; + justify-content: none; + } + } \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.eot b/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..0b30dec08f5ceaba004d6e4ec71aea7e3fa802c9 GIT binary patch literal 147138 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

`CBknH+0X02l`Hq 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�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≦2Yu5QW8Dt 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ⅅ7GnUv8iM&Q~E&y3Bby@bu0V;S80-=RFiX8 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

t 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff b/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..88fdf4d026a999aa0e5bd310635f5c5a43e716a1 GIT binary patch literal 164912 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 z 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff2 b/wp-content/plugins/simply-schedule-appointments/assets/fonts/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5492a6e75937db19f9ba860cd2575744887fa26b GIT binary patch literal 128352 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

l*K8_>P7#5$l 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 Nf5znMH!#y?M*xg-c9sAD literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-bold-webfont.woff2 b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-bold-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64478a79b035c0d9c0133e03515a564018a724f9 GIT binary patch literal 19668 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..2a172d8b9ed1175cde8f468be179cdac3066f00c GIT binary patch literal 31052 zcmY(K1B@n5)b8K0ZF9%wj&0kvZQDEAvAtv4wr$(?%s2o0-Q46>`su3r<(yNUbfcs!{|7-vMMO0K-1^@v1`$KX6lZ$b2g_y92=nt#;>9hQZ z8(0X)SxjC|>4zNv01#~e0E#T|7Ic-El8PVz0G0d0@c;l|+^*@;KXOX+OaK6M&ySz- zkMvVqD)NkM4D0~_7}OuT*dLvN1VsXjT%8F40NBDG8_oZOK8~1UYHwx(0Kolpfogx^ znJ6{TmzWti{rJK+{6NV6D?~GE57Qsk0RR~M*w^R}RnCN&n-~}a0QNLLHf;Y1jAJU_ z{0IK99}Xb?5h(%&ShBf|v-=MV|A`+A0DzQb5V7N0+Zp}XIl=ynJMp8H{V{kN8w2;B zah+Fw{0RROFeFf*t$~fn4}1CF=L7Mi>j=KHw{vm^09-46*xgUeW5#R@NP9<-2L2zDCrv?93E%M zNDS2wDSImx47?T)2Pta>f&{XX_s6D0GjtBVz-HKW$Uhfd3zM26`KBKoO2R@)oXH;) zvWcQ`K~g3#zRaJ9ROH{pLv^O_RaeJBNJnsR)ANMecBh%!^yd9${qYsAM*=d7o)j88 zt=*Ef3Gc&8f*9+QmK46Pa5G=q4MY@+j6*|wnzwHU5cewr?bnxK5%=9qg2_N`r!u z3*zWJk#VRj@#~$S)<){xgH)v$Td8LCX*l*HLZkb7=XUvQ`4hbRwFkxrEZ_R{W6DeH zYx!qmE*N1RQr^XkP98TyPM3}&D2{=}1u{*=73D+c`1Io2j3PU5 zV8|$Tm7+bQJGSXEW#O!=ywhdo(JEAS!ezr%lUyTWOi9v-_omTzVUtKR#bPKmUUV&S zjNNy$V=dR_)-o(txwkyPG*FNM0@dIW$P-k~7h4lq) z1-i+g0M;7fFc(-kP$w5!IS9KZ%0A4*$ofivcSr;MP}azoO8VDt7h9<-8wKV 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff2 b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-italic-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..99d95462aad09bf5031d946c28a0e040069a3b23 GIT binary patch literal 23596 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 DT|~~$ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..ce6e3dddb741411167a1dd50cba4730ae03296b6 GIT binary patch literal 25812 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≥>>+NC#8I_^3u<@UF^m3*&~o? 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff2 b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-light-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aa19d46a7200788b98f1d010f4f210c741041193 GIT binary patch literal 19112 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-medium-webfont.woff b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-medium-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..cb0398e66bb31a4945f37b9c37260c0796c70a0c GIT binary patch literal 26432 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-regular-webfont.woff2 b/wp-content/plugins/simply-schedule-appointments/assets/fonts/roboto-regular-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3234b619a66ffcfedc96bef3e3c4b79910bc2eb2 GIT binary patch literal 19344 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 + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/plugins/simply-schedule-appointments/assets/js/block-booking.js b/wp-content/plugins/simply-schedule-appointments/assets/js/block-booking.js new file mode 100644 index 0000000..d5a92c3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/js/block-booking.js @@ -0,0 +1,360 @@ +var el = wp.element.createElement, + registerBlockType = wp.blocks.registerBlockType, + ServerSideRender = wp.ServerSideRender, + SelectControl = wp.components.SelectControl, + CheckboxControl = wp.components.CheckboxControl, + RangeControl = wp.components.RangeControl, + InspectorControls = wp.blockEditor.InspectorControls, + PanelColorSettings = wp.blockEditor.PanelColorSettings, + PanelBody = wp.components.PanelBody, + NumberControl = wp.components.__experimentalNumberControl, + Button = wp.components.Button, + TabPanel = wp.components.TabPanel; + +if ( typeof ssaAppointmentTypesViewOptions === 'undefined' ) { + ssaAppointmentTypesViewOptions = null; +} + +if ( typeof ssaBookingFlowOptions === 'undefined' ) { + ssaBookingFlowOptions = null +} + + +registerBlockType("ssa/booking", { + title: "Appointment Booking Form", + description: + "Displays an Appointment Booking Form. You can customize the appointment type and styles.", + icon: "calendar-alt", + category: "widgets", + example: {}, + + edit: function (props) { + + // For exsiting/old shortcodes before introducing the checkboxes; run Conversion + // Needed only for the selected type to be checked in UI + if(props.attributes.type){ + let type = props.attributes.type; + props.setAttributes({ types : [type] }); + props.setAttributes({ type : '' } ); + } + + var apptTypeOptions = + { + All: 'All', + }; + Object.keys(ssaAppointmentTypes).forEach(function (key) { + apptTypeOptions[key] = ssaAppointmentTypes[key] + }); + + function onCheckChange(isChecked) { + let element = this.valueOf() + if(isChecked){ + if(!props.attributes.types.includes(element)){ + if(element==='All'){ + props.setAttributes({ types: Object.keys(apptTypeOptions) }); + } else { + let selectedApptType = [...props.attributes.types] + selectedApptType.push(element) + props.setAttributes({ types: selectedApptType }); + } + } + } else { + if(props.attributes.types.includes(element)){ + if(element==='All'){ + let selectedAppTypes = Object.keys(apptTypeOptions) + index = selectedAppTypes.indexOf('All'); + selectedAppTypes.splice(index, 1); + props.setAttributes({ types: selectedAppTypes }); + } else { + let selectedApptType = [...props.attributes.types] + var index = selectedApptType.indexOf(element); + selectedApptType.splice(index, 1); + props.setAttributes({ types: selectedApptType }); + } + } + } + } + + var apptTypeCheckboxes = Object.keys(apptTypeOptions).filter((option) => { + if(props.attributes.types.includes('All')){ + return option === 'All' + } + return true + }).map(function(key) { + // Render the checkboxes elements inside a parent container + // Only render the uncheck all button besides the All checkbox + return el( + "div", + { className: "ssa-checkboxes-input-container" }, + el(CheckboxControl, { + onChange: onCheckChange.bind(key), + label: apptTypeOptions[key], + checked: props.attributes.types.includes(key) + }), + (key === 'All' && !props.attributes.types.includes('All') && props.attributes.types.length ) ? + el(Button, { + isSecondary: true, + className: "ssa-block-booking-uncheck-all", + onClick: function () { + props.setAttributes({ + types: [], + }); + } + }, 'Uncheck All') : + null, + ) + + }) + + var LabelsOptions = [ + { + value: "All", + label: "All", + }, + ]; + Object.keys(ssaAppointmentTypeLabels).forEach(function (key) { + LabelsOptions.push({ + value: key, + label: ssaAppointmentTypeLabels[key], + }); + }); + + /* BOOKING FLOW */ + let bookingFlowTabs = [ + { + name: 'date', + title: 'Date View', + className: 'tab-date-view', + }, + { + name: 'time', + title: 'Time View', + className: 'tab-time-view', + }, + ]; + + const displaybookingFlowTabs = () => { + if (props.attributes.flow === 'express') { + return bookingFlowTabs.filter(tab => tab.name !== 'date') + } else if (props.attributes.flow === 'first_available' && props.attributes.fallback_flow === 'express') { + return bookingFlowTabs.filter(tab => tab.name !== 'date') + } + return bookingFlowTabs; + } + /* END BOOKING FLOW */ + + return [ + el( + "div", + { className: "ssa-block-container" }, + el(ServerSideRender, { + block: "ssa/booking", + attributes: props.attributes, + }), + el("div", { + className: "ssa-block-handler", + }) + ), + el( + InspectorControls, + {}, + el( + PanelBody, + { title: "Select Appointment types", initialOpen: false }, + el(SelectControl, { + label: 'Filter by', + value: props.attributes.filter, + options: [ + { + value: "types", + label: "Appointment types", + }, + { + value: "label", + label: "Label", + }, + ], + onChange: function (value) { + props.setAttributes({ filter: value }); + }, + }), + props.attributes.filter === 'label' ? + el(SelectControl, { + label: "Labels", + value: props.attributes.label, + options: LabelsOptions, + onChange: function (value) { + props.setAttributes({ label: value }); + }, + }) : + el('div', null, apptTypeCheckboxes) + ), + + /* Appointment types view */ + ssaAppointmentTypesViewOptions && el( + PanelBody, + { title: "Appointment types view", initialOpen: false }, + el(SelectControl, { + label: "Appointment types view", + value: props.attributes.appointment_types_view, + options: ssaAppointmentTypesViewOptions, + onChange: function (value) { + props.setAttributes({ appointment_types_view: value }); + }, + }), + ), + /* End Appointment types view */ + + /* Booking flow */ + ssaBookingFlowOptions && el( + PanelBody, + { title: "Booking Flow", initialOpen: false }, + el(SelectControl, { + label: "Main Booking layout", + value: props.attributes.flow, + options: ssaBookingFlowOptions.main_booking_flow, + onChange: function (value) { + props.setAttributes({ flow: value }); + }, + }), + props.attributes.flow === 'first_available' && el( + 'PanelBody', + { title: "first_available", initialOpen: false }, + el('div', {}, 'First available within:'), + el( + 'div', + { className: "ssa_first_available_control_wrapper" }, + el(NumberControl, { + label:"Duration", + value: props.attributes.suggest_first_available_duration, + min:1, + onChange: function (value) { + props.setAttributes({ suggest_first_available_duration: value }); + }, + }), + el(SelectControl, { + label: "Duration Unit", + className: 'ssa_duration_unit', + value: props.attributes.suggest_first_available_duration_unit, + options: ssaBookingFlowOptions.suggest_first_available.duration_unit, + onChange: function (value) { + props.setAttributes({ suggest_first_available_duration_unit: value }); + }, + }), + ), + ), + props.attributes.flow === 'first_available' && el(SelectControl, { + label: "Fallback Flow", + value: props.attributes.fallback_flow, + options: ssaBookingFlowOptions.fallback_flow, + onChange: function (value) { + props.setAttributes({ fallback_flow: value }); + }, + }), + props.attributes.flow !== 'appt_type_settings' && el(TabPanel, { + className: 'ssa-bookingflow-tab-panel', + activeClass: 'active-tab', + tabs: displaybookingFlowTabs(), + orientation: 'horizontal', + // initialTabName: 'team_members', // the name of the tab that is selected by default + children: function(tab) { + switch (tab.name) { + case 'date': + return el(SelectControl, { + label: 'Date view', + value: props.attributes.date_view, + options: ssaBookingFlowOptions.date_view, + onChange: function (value) { + props.setAttributes({ date_view: value }); + }, + }); + case 'time': + return el(SelectControl, { + label: 'Time view', + value: props.attributes.time_view, + options: ssaBookingFlowOptions.time_view, + onChange: function (value) { + props.setAttributes({ time_view: value }); + }, + }); + } + }, + }), + ), + /* End Booking flow */ + + el(PanelColorSettings, { + title: "Colors", + colorSettings: [ + { + value: props.attributes.accent_color, + label: "Accent Color", + onChange: function (value) { + props.setAttributes({ + accent_color: value, + }); + }, + }, + { + value: props.attributes.background, + label: "Background Color", + onChange: function (value) { + props.setAttributes({ + background: value, + }); + }, + }, + ], + }), + el( + PanelBody, + { title: "Padding", initialOpen: true }, + el(RangeControl, { + initialPosition: 0, + value: props.attributes.padding, + onChange: function (value) { + props.setAttributes({ + padding: value, + }); + }, + min: 0, + max: 100, + }), + el(SelectControl, { + label: "Padding Unit", + value: props.attributes.padding_unit, + options: [ + { + value: "px", + label: "px", + }, + { + value: "em", + label: "em", + }, + { + value: "rem", + label: "rem", + }, + { + value: "vw", + label: "vw", + }, + { + value: "percent", + label: "%", + }, + ], + onChange: function (value) { + props.setAttributes({ padding_unit: value }); + }, + }) + ) + ), + ]; + }, + + save: function () { + return null; + }, +}); diff --git a/wp-content/plugins/simply-schedule-appointments/assets/js/block-upcoming-appointments.js b/wp-content/plugins/simply-schedule-appointments/assets/js/block-upcoming-appointments.js new file mode 100644 index 0000000..3d8a8cc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/js/block-upcoming-appointments.js @@ -0,0 +1,264 @@ +var el = wp.element.createElement, + registerBlockType = wp.blocks.registerBlockType, + ServerSideRender = wp.serverSideRender, + TextControl = wp.components.TextControl, + InspectorControls = wp.blockEditor.InspectorControls; + Button = wp.components.Button, + CheckboxControl = wp.components.CheckboxControl, + toggleControl = wp.components.ToggleControl, + __ = wp.i18n.__; + +registerBlockType("ssa/upcoming-appointments", { + title: "Upcoming Appointments", + description: + __('Displays Upcoming Appointments. You can select what to show in the appointment card.', 'simply-schedule-appointments'), + icon: "calendar-alt", + category: "widgets", + example: {}, + + edit: function (props) { + var options = [ + { + value: "No upcoming appointments", + label: + "Message to display if customer has no upcoming appointments", + }, + ]; + + var toggleElements = props.attributes.memberInfo.map((toggle, index) => { + if (toggle.value === 'Display Team Members') { + return el( + "div", + { className: "ssa-toggle-input-container" }, + el(CheckboxControl, { + onChange: function (isChecked) { + const updatedmembersInformation = props.attributes.memberInfo.map((item, idx) => { + if (idx === index) { + return { ...item, checked: isChecked ? true : false }; + } + return item; + }); + + props.setAttributes({ memberInfo: updatedmembersInformation }); + }, + label: toggle.label, + checked: toggle.checked, + }) + ); + } + + if (props.attributes.memberInfo.find(item => item.value === 'Display Team Members').checked) { + return null; + } + + return el( + "div", + { className: "ssa-toggle-input-container" }, + el(CheckboxControl, { + onChange: function (isChecked) { + const updatedmembersInformation = props.attributes.memberInfo.map((item, idx) => { + if (idx === index) { + return { ...item, checked: isChecked ? true : false }; + } + return item; + }); + + props.setAttributes({ memberInfo: updatedmembersInformation }); + }, + label: toggle.label, + checked: toggle.checked, + }) + ); + }); + + var toggledisplayOptions = props.attributes.appointmentDisplay + .filter(toggle => toggle.label === 'Appointment Types') + .map((toggle, index) => { + return el( + "div", + { className: "ssa-checkboxes-input-container" }, + el(CheckboxControl, { + onChange: function (isChecked) { + const updatedDisplayOptions = props.attributes.appointmentDisplay.map((item, idx) => { + if (idx === index) { + return { ...item, checked: isChecked ? true : false }; + } + return item; + }); + + props.setAttributes({ appointmentDisplay: updatedDisplayOptions }); + }, + label: toggle.label, + checked: toggle.checked, + }) + ); + }); + var toggleDisplayOptionsTwo = props.attributes.resourceOptions + .filter(toggle => toggle.label === 'Disable') + .map((toggle, index) => { + return el( + "div", + { className: "ssa-checkboxes-input-container" }, + el(CheckboxControl, { + onChange: function (isChecked) { + const updatedoptionsDisplays = props.attributes.resourceOptions.map((item, idx) => { + if (idx === index) { + return { ...item, checked: isChecked ? true : false }; + } + return item; + }); + + props.setAttributes({ resourceOptions: updatedoptionsDisplays }); + }, + label: toggle.label, + checked: toggle.checked, + }) + ); + }); + + if(props.attributes.type){ + let type = props.attributes.type; + props.setAttributes({ selectedResourceTypes : [type] }); + props.setAttributes({ type : '' } ); + } + + var rssTypeOptions = {}; + Object.keys(ssaResources.types).forEach(function (key) { + rssTypeOptions[key] = ssaResources.types[key] + }); + var disableResourceOption = props.attributes.resourceOptions.some(option => option.checked); + + if (!disableResourceOption) { + var toggleDisplayAllResourceType = props.attributes.allResourcesTypeOption + .filter(toggle => toggle.label === 'All') + .map((toggle, index) => { + return el( + "div", + { className: "ssa-checkboxes-input-container" }, + el(CheckboxControl, { + onChange: function (isChecked) { + const updatedOptionsDisplays = props.attributes.allResourcesTypeOption.map((item, idx) => { + if (idx === index) { + return { ...item, checked: isChecked ? true : false }; + } + return item; + }); + props.setAttributes({ allResourcesTypeOption: updatedOptionsDisplays }); + }, + label: toggle.label, + checked: toggle.checked, + }), + (props.attributes.selectedResourceTypes.length) ? + el(Button, { + isSecondary: true, + className: "ssa-block-booking-uncheck-all", + onClick: function () { + props.setAttributes({ + selectedResourceTypes: [], + }); + } + }, 'Uncheck All') : + null, + ); + }); + } + + + function onCheckChange(id, isChecked) { + const currentTypes = props.attributes.selectedResourceTypes; + + if (isChecked && !currentTypes.includes(id)) { + const updatedTypes = [...currentTypes, id]; + props.setAttributes({ selectedResourceTypes: updatedTypes }); + } else if (!isChecked && currentTypes.includes(id)) { + const updatedTypes = currentTypes.filter(type => type !== id); + props.setAttributes({ selectedResourceTypes: updatedTypes }); + } + } + + var allResourceOption = props.attributes.allResourcesTypeOption.some(option => option.checked); + + var apptTypeCheckboxes; + + if (!disableResourceOption) { + if (!allResourceOption) { + apptTypeCheckboxes = Object.keys(rssTypeOptions).map(function (key) { + return el( + "div", + { className: "ssa-toggle-input-container" }, + el(CheckboxControl, { + onChange: onCheckChange.bind(null, key), + label: rssTypeOptions[key], + checked: props.attributes.selectedResourceTypes.includes(key), + id: `checkbox_${key}` + }), + ) + }); + } + } + + let showTeamMemberBlock = null; + if (true == staff.enabled){ + showTeamMemberBlock = el( + PanelBody, + { + title: __('Display Team Member Information', 'simply-schedule-appointments'), + initialOpen: false, + }, + el('div', { className: 'panel-content' }, toggleElements), + ); + } + + let showResourcesBlock = null; + if (ssaResources.enabled && Object.keys(ssaResources.types).length > 0){ + showResourcesBlock = el( + PanelBody, + { + title: __('Display Resources', 'simply-schedule-appointments'), + initialOpen: false, + }, + el('div', { className: 'panel-content' }, toggleDisplayOptionsTwo,toggleDisplayAllResourceType, apptTypeCheckboxes), + ); + } + + return [ + el(ServerSideRender, { + block: "ssa/upcoming-appointments", + attributes: props.attributes, + }, + el("div", { + className: "ssa-block-handler", + }) + ), + el( + InspectorControls, + {}, + el(TextControl, { + label: + __('Message to display if customer has no upcoming appointments', 'simply-schedule-appointments'), + value: props.attributes.no_results_message, + onChange: (value) => { + props.setAttributes({ no_results_message: value }); + }, + onBlur: () => { + if (!props.attributes.no_results_message) { + props.setAttributes({ no_results_message: 'No upcoming appointments' }); + } + }, + className: "message-box" + }), + el( + PanelBody, + { title: __('Display Information', 'simply-schedule-appointments'), initialOpen: false }, + el('div', null, toggledisplayOptions) + ), + showBlock && showResourcesBlock, + showBlock && showTeamMemberBlock, + ), + ]; + }, + + save: function () { + return null; + }, +}); diff --git a/wp-content/plugins/simply-schedule-appointments/assets/js/iframe-inner.js b/wp-content/plugins/simply-schedule-appointments/assets/js/iframe-inner.js new file mode 100644 index 0000000..418a70c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/assets/js/iframe-inner.js @@ -0,0 +1,9 @@ +/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v4.3.2 - 2021-04-26 + * Desc: Include this file in any page being loaded into an iframe + * to force the iframe to resize to the content size. + * Requires: iframeResizer.min.js on host page. + * Copyright: (c) 2021 David J. Bradshaw - dave@bradshaw.net + * License: MIT + */ + +!function(c){if("undefined"!=typeof window){var i=!0,o=10,r="",a=0,u="",s=null,d="",l=!1,f={resize:1,click:1},m=128,h=!0,g=1,n="bodyOffset",p=n,v=!0,y="",w={},b=32,T=null,E=!1,O=!1,S="[iFrameSizer]",M=S.length,I="",N={max:1,min:1,bodyScroll:1,documentElementScroll:1},A="child",C=!0,z=window.parent,k="*",R=0,x=!1,e=null,L=16,F=1,t="scroll",P=t,D=window,j=function(){re("onMessage function not defined")},q=function(){},H=function(){},W={height:function(){return re("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return re("Custom width calculation function not defined"),document.body.scrollWidth}},B={},J=!1;try{var U=Object.create({},{passive:{get:function(){J=!0}}});window.addEventListener("test",ee,U),window.removeEventListener("test",ee,U)}catch(e){}var V,X,Y,K,Q,G,Z={bodyOffset:function(){return document.body.offsetHeight+pe("marginTop")+pe("marginBottom")},offset:function(){return Z.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return W.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,ye(Z))},min:function(){return Math.min.apply(null,ye(Z))},grow:function(){return Z.max()},lowestElement:function(){return Math.max(Z.bodyOffset()||Z.documentElementOffset(),ve("bottom",be()))},taggedElement:function(){return we("bottom","data-iframe-height")}},$={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return W.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max($.bodyScroll(),$.documentElementScroll())},max:function(){return Math.max.apply(null,ye($))},min:function(){return Math.min.apply(null,ye($))},rightMostElement:function(){return ve("right",be())},taggedElement:function(){return we("right","data-iframe-width")}},_=(V=Te,Q=null,G=0,function(){var e=Date.now(),t=L-(e-(G=G||e));return X=this,Y=arguments,t<=0||L max) { + size = max + log(iframeId, 'Set ' + dimension + ' to max value') + } + + messageData[dimension] = '' + size + } + + function isMessageFromIFrame() { + function checkAllowedOrigin() { + function checkList() { + var i = 0, + retCode = false + + log( + iframeId, + 'Checking connection is from allowed list of origins: ' + + checkOrigin + ) + + for (; i < checkOrigin.length; i++) { + if (checkOrigin[i] === origin) { + retCode = true + break + } + } + return retCode + } + + function checkSingle() { + var remoteHost = settings[iframeId] && settings[iframeId].remoteHost + log(iframeId, 'Checking connection is from: ' + remoteHost) + return origin === remoteHost + } + + return checkOrigin.constructor === Array ? checkList() : checkSingle() + } + + var origin = event.origin, + checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin + + if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) { + throw new Error( + 'Unexpected message received from: ' + + origin + + ' for ' + + messageData.iframe.id + + '. Message was: ' + + event.data + + '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.' + ) + } + + return true + } + + function isMessageForUs() { + return ( + msgId === ('' + msg).substr(0, msgIdLen) && + msg.substr(msgIdLen).split(':')[0] in settings + ) // ''+Protects against non-string msg + } + + function isMessageFromMetaParent() { + // Test if this message is from a parent above us. This is an ugly test, however, updating + // the message format would break backwards compatibility. + var retCode = messageData.type in { true: 1, false: 1, undefined: 1 } + + if (retCode) { + log(iframeId, 'Ignoring init message from meta parent page') + } + + return retCode + } + + function getMsgBody(offset) { + return msg.substr(msg.indexOf(':') + msgHeaderLen + offset) + } + + function forwardMsgFromIFrame(msgBody) { + log( + iframeId, + 'onMessage passed: {iframe: ' + + messageData.iframe.id + + ', message: ' + + msgBody + + '}' + ) + + on('onMessage', { + iframe: messageData.iframe, + message: JSON.parse(msgBody) + }) + + log(iframeId, '--') + } + + function getPageInfo() { + var bodyPosition = document.body.getBoundingClientRect(), + iFramePosition = messageData.iframe.getBoundingClientRect() + + return JSON.stringify({ + iframeHeight: iFramePosition.height, + iframeWidth: iFramePosition.width, + clientHeight: Math.max( + document.documentElement.clientHeight, + window.innerHeight || 0 + ), + clientWidth: Math.max( + document.documentElement.clientWidth, + window.innerWidth || 0 + ), + offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10), + offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10), + scrollTop: window.pageYOffset, + scrollLeft: window.pageXOffset, + documentHeight: document.documentElement.clientHeight, + documentWidth: document.documentElement.clientWidth, + windowHeight: window.innerHeight, + windowWidth: window.innerWidth + }) + } + + function sendPageInfoToIframe(iframe, iframeId) { + function debouncedTrigger() { + trigger('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId) + } + debounceFrameEvents(debouncedTrigger, 32, iframeId) + } + + function startPageInfoMonitor() { + function setListener(type, func) { + function sendPageInfo() { + if (settings[id]) { + sendPageInfoToIframe(settings[id].iframe, id) + } else { + stop() + } + } + + ;['scroll', 'resize'].forEach(function (evt) { + log(id, type + evt + ' listener for sendPageInfo') + func(window, evt, sendPageInfo) + }) + } + + function stop() { + setListener('Remove ', removeEventListener) + } + + function start() { + setListener('Add ', addEventListener) + } + + var id = iframeId // Create locally scoped copy of iFrame ID + + start() + + if (settings[id]) { + settings[id].stopPageInfo = stop + } + } + + function stopPageInfoMonitor() { + if (settings[iframeId] && settings[iframeId].stopPageInfo) { + settings[iframeId].stopPageInfo() + delete settings[iframeId].stopPageInfo + } + } + + function checkIFrameExists() { + var retBool = true + + if (null === messageData.iframe) { + warn(iframeId, 'IFrame (' + messageData.id + ') not found') + retBool = false + } + return retBool + } + + function getElementPosition(target) { + var iFramePosition = target.getBoundingClientRect() + + getPagePosition(iframeId) + + return { + x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)), + y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y)) + } + } + + function scrollRequestFromChild(addOffset) { + /* istanbul ignore next */ // Not testable in Karma + function reposition() { + pagePosition = newPosition + scrollTo() + log(iframeId, '--') + } + + function calcOffset() { + return { + x: Number(messageData.width) + offset.x, + y: Number(messageData.height) + offset.y + } + } + + function scrollParent() { + if (window.parentIFrame) { + window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')]( + newPosition.x, + newPosition.y + ) + } else { + warn( + iframeId, + 'Unable to scroll to requested position, window.parentIFrame not found' + ) + } + } + + var offset = addOffset + ? getElementPosition(messageData.iframe) + : { x: 0, y: 0 }, + newPosition = calcOffset() + + log( + iframeId, + 'Reposition requested from iFrame (offset x:' + + offset.x + + ' y:' + + offset.y + + ')' + ) + + if (window.top !== window.self) { + scrollParent() + } else { + reposition() + } + } + + function scrollTo() { + if (false !== on('onScroll', pagePosition)) { + setPagePosition(iframeId) + } else { + unsetPagePosition() + } + } + + function findTarget(location) { + function jumpToTarget() { + var jumpPosition = getElementPosition(target) + + log( + iframeId, + 'Moving to in page link (#' + + hash + + ') at x: ' + + jumpPosition.x + + ' y: ' + + jumpPosition.y + ) + pagePosition = { + x: jumpPosition.x, + y: jumpPosition.y + } + + scrollTo() + log(iframeId, '--') + } + + function jumpToParent() { + if (window.parentIFrame) { + window.parentIFrame.moveToAnchor(hash) + } else { + log( + iframeId, + 'In page link #' + + hash + + ' not found and window.parentIFrame not found' + ) + } + } + + var hash = location.split('#')[1] || '', + hashData = decodeURIComponent(hash), + target = + document.getElementById(hashData) || + document.getElementsByName(hashData)[0] + + if (target) { + jumpToTarget() + } else if (window.top !== window.self) { + jumpToParent() + } else { + log(iframeId, 'In page link #' + hash + ' not found') + } + } + + function onMouse(event) { + var mousePos = {} + + if (Number(messageData.width) === 0 && Number(messageData.height) === 0) { + var data = getMsgBody(9).split(':') + mousePos = { + x: data[1], + y: data[0] + } + } else { + mousePos = { + x: messageData.width, + y: messageData.height + } + } + + on(event, { + iframe: messageData.iframe, + screenX: Number(mousePos.x), + screenY: Number(mousePos.y), + type: messageData.type + }) + } + + function on(funcName, val) { + return chkEvent(iframeId, funcName, val) + } + + function actionMsg() { + if (settings[iframeId] && settings[iframeId].firstRun) firstRun() + + switch (messageData.type) { + case 'close': + closeIFrame(messageData.iframe) + break + + case 'message': + forwardMsgFromIFrame(getMsgBody(6)) + break + + case 'mouseenter': + onMouse('onMouseEnter') + break + + case 'mouseleave': + onMouse('onMouseLeave') + break + + case 'autoResize': + settings[iframeId].autoResize = JSON.parse(getMsgBody(9)) + break + + case 'scrollTo': + scrollRequestFromChild(false) + break + + case 'scrollToOffset': + scrollRequestFromChild(true) + break + + case 'pageInfo': + sendPageInfoToIframe( + settings[iframeId] && settings[iframeId].iframe, + iframeId + ) + startPageInfoMonitor() + break + + case 'pageInfoStop': + stopPageInfoMonitor() + break + + case 'inPageLink': + findTarget(getMsgBody(9)) + break + + case 'reset': + resetIFrame(messageData) + break + + case 'stripeModalOpened': + ssaDebouncedScroll(messageData) + + case 'init': + resizeIFrame() + on('onInit', messageData.iframe) + break + + default: + if ( + Number(messageData.width) === 0 && + Number(messageData.height) === 0 + ) { + warn( + 'Unsupported message received (' + + messageData.type + + '), this is likely due to the iframe containing a later ' + + 'version of iframe-resizer than the parent page' + ) + } else { + resizeIFrame() + } + } + } + + function hasSettings(iframeId) { + var retBool = true + + if (!settings[iframeId]) { + retBool = false + warn( + messageData.type + + ' No settings for ' + + iframeId + + '. Message was: ' + + msg + ) + } + + return retBool + } + + function iFrameReadyMsgReceived() { + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (var iframeId in settings) { + trigger( + 'iFrame requested init', + createOutgoingMsg(iframeId), + settings[iframeId].iframe, + iframeId + ) + } + } + + function firstRun() { + if (settings[iframeId]) { + settings[iframeId].firstRun = false + } + } + + var msg = event.data, + messageData = {}, + iframeId = null + + if ('[iFrameResizerChild]Ready' === msg) { + iFrameReadyMsgReceived() + } else if (isMessageForUs()) { + messageData = processMsg() + iframeId = messageData.id + if (settings[iframeId]) { + settings[iframeId].loaded = true + } + + if (!isMessageFromMetaParent() && hasSettings(iframeId)) { + log(iframeId, 'Received: ' + msg) + + if (checkIFrameExists() && isMessageFromIFrame()) { + actionMsg() + } + } + } else { + info(iframeId, 'Ignored: ' + msg) + } + } + + function chkEvent(iframeId, funcName, val) { + var func = null, + retVal = null + + if (settings[iframeId]) { + func = settings[iframeId][funcName] + + if ('function' === typeof func) { + retVal = func(val) + } else { + throw new TypeError( + funcName + ' on iFrame[' + iframeId + '] is not a function' + ) + } + } + + return retVal + } + + function removeIframeListeners(iframe) { + var iframeId = iframe.id + delete settings[iframeId] + } + + function closeIFrame(iframe) { + var iframeId = iframe.id + if (chkEvent(iframeId, 'onClose', iframeId) === false) { + log(iframeId, 'Close iframe cancelled by onClose event') + return + } + log(iframeId, 'Removing iFrame: ' + iframeId) + + try { + // Catch race condition error with React + if (iframe.parentNode) { + iframe.parentNode.removeChild(iframe) + } + } catch (error) { + warn(error) + } + + chkEvent(iframeId, 'onClosed', iframeId) + log(iframeId, '--') + removeIframeListeners(iframe) + } + + function getPagePosition(iframeId) { + if (null === pagePosition) { + pagePosition = { + x: + window.pageXOffset !== undefined + ? window.pageXOffset + : document.documentElement.scrollLeft, + y: + window.pageYOffset !== undefined + ? window.pageYOffset + : document.documentElement.scrollTop + } + log( + iframeId, + 'Get page position: ' + pagePosition.x + ',' + pagePosition.y + ) + } + } + + function setPagePosition(iframeId) { + if (null !== pagePosition) { + window.scrollTo(pagePosition.x, pagePosition.y) + log( + iframeId, + 'Set page position: ' + pagePosition.x + ',' + pagePosition.y + ) + unsetPagePosition() + } + } + + function unsetPagePosition() { + pagePosition = null + } + + function resetIFrame(messageData) { + function reset() { + setSize(messageData) + trigger('reset', 'reset', messageData.iframe, messageData.id) + } + + log( + messageData.id, + 'Size reset requested by ' + + ('init' === messageData.type ? 'host page' : 'iFrame') + ) + getPagePosition(messageData.id) + syncResize(reset, messageData, 'reset') + } + + function setSize(messageData) { + function setDimension(dimension) { + if (!messageData.id) { + log('undefined', 'messageData id not set') + return + } + messageData.iframe.style[dimension] = messageData[dimension] + 'px' + log( + messageData.id, + 'IFrame (' + + iframeId + + ') ' + + dimension + + ' set to ' + + messageData[dimension] + + 'px' + ) + } + + function chkZero(dimension) { + // FireFox sets dimension of hidden iFrames to zero. + // So if we detect that set up an event to check for + // when iFrame becomes visible. + + /* istanbul ignore next */ // Not testable in PhantomJS + if (!hiddenCheckEnabled && '0' === messageData[dimension]) { + hiddenCheckEnabled = true + log(iframeId, 'Hidden iFrame detected, creating visibility listener') + fixHiddenIFrames() + } + } + + function processDimension(dimension) { + setDimension(dimension) + chkZero(dimension) + } + + var iframeId = messageData.iframe.id + + if (settings[iframeId]) { + if (settings[iframeId].sizeHeight) { + processDimension('height') + } + if (settings[iframeId].sizeWidth) { + processDimension('width') + } + } + } + + function syncResize(func, messageData, doNotSync) { + /* istanbul ignore if */ // Not testable in PhantomJS + if ( + doNotSync !== messageData.type && + requestAnimationFrame && + // including check for jasmine because had trouble getting spy to work in unit test using requestAnimationFrame + !window.jasmine + ) { + log(messageData.id, 'Requesting animation frame') + requestAnimationFrame(func) + } else { + func() + } + } + + function trigger(calleeMsg, msg, iframe, id, noResponseWarning) { + function postMessageToIFrame() { + var target = settings[id] && settings[id].targetOrigin + log( + id, + '[' + + calleeMsg + + '] Sending msg to iframe[' + + id + + '] (' + + msg + + ') targetOrigin: ' + + target + ) + iframe.contentWindow.postMessage(msgId + msg, target) + } + + function iFrameNotFound() { + warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found') + } + + function chkAndSend() { + if ( + iframe && + 'contentWindow' in iframe && + null !== iframe.contentWindow + ) { + // Null test for PhantomJS + postMessageToIFrame() + } else { + iFrameNotFound() + } + } + + function warnOnNoResponse() { + function warning() { + if (settings[id] && !settings[id].loaded && !errorShown) { + errorShown = true + warn( + id, + 'IFrame has not responded within ' + + settings[id].warningTimeout / 1000 + + ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.' + ) + } + } + + if ( + !!noResponseWarning && + settings[id] && + !!settings[id].warningTimeout + ) { + settings[id].msgTimeout = setTimeout( + warning, + settings[id].warningTimeout + ) + } + } + + var errorShown = false + + id = id || iframe.id + + if (settings[id]) { + chkAndSend() + warnOnNoResponse() + } + } + + function createOutgoingMsg(iframeId) { + return ( + iframeId + + ':' + + settings[iframeId].bodyMarginV1 + + ':' + + settings[iframeId].sizeWidth + + ':' + + settings[iframeId].log + + ':' + + settings[iframeId].interval + + ':' + + settings[iframeId].enablePublicMethods + + ':' + + settings[iframeId].autoResize + + ':' + + settings[iframeId].bodyMargin + + ':' + + settings[iframeId].heightCalculationMethod + + ':' + + settings[iframeId].bodyBackground + + ':' + + settings[iframeId].bodyPadding + + ':' + + settings[iframeId].tolerance + + ':' + + settings[iframeId].inPageLinks + + ':' + + settings[iframeId].resizeFrom + + ':' + + settings[iframeId].widthCalculationMethod + + ':' + + settings[iframeId].mouseEvents + ) + } + + function isNumber(value) { + return typeof value === 'number' + } + + function setupIFrame(iframe, options) { + function setLimits() { + function addStyle(style) { + var styleValue = settings[iframeId][style] + if (Infinity !== styleValue && 0 !== styleValue) { + iframe.style[style] = isNumber(styleValue) + ? styleValue + 'px' + : styleValue + log(iframeId, 'Set ' + style + ' = ' + iframe.style[style]) + } + } + + function chkMinMax(dimension) { + if ( + settings[iframeId]['min' + dimension] > + settings[iframeId]['max' + dimension] + ) { + throw new Error( + 'Value for min' + + dimension + + ' can not be greater than max' + + dimension + ) + } + } + + chkMinMax('Height') + chkMinMax('Width') + + addStyle('maxHeight') + addStyle('minHeight') + addStyle('maxWidth') + addStyle('minWidth') + } + + function newId() { + var id = (options && options.id) || defaults.id + count++ + if (null !== document.getElementById(id)) { + id += count++ + } + return id + } + + function ensureHasId(iframeId) { + if ('' === iframeId) { + // eslint-disable-next-line no-multi-assign + iframe.id = iframeId = newId() + logEnabled = (options || {}).log + log( + iframeId, + 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')' + ) + } + + return iframeId + } + + function setScrolling() { + log( + iframeId, + 'IFrame scrolling ' + + (settings[iframeId] && settings[iframeId].scrolling + ? 'enabled' + : 'disabled') + + ' for ' + + iframeId + ) + iframe.style.overflow = + false === (settings[iframeId] && settings[iframeId].scrolling) + ? 'hidden' + : 'auto' + switch (settings[iframeId] && settings[iframeId].scrolling) { + case 'omit': + break + + case true: + iframe.scrolling = 'yes' + break + + case false: + iframe.scrolling = 'no' + break + + default: + iframe.scrolling = settings[iframeId] + ? settings[iframeId].scrolling + : 'no' + } + } + + // The V1 iFrame script expects an int, where as in V2 expects a CSS + // string value such as '1px 3em', so if we have an int for V2, set V1=V2 + // and then convert V2 to a string PX value. + function setupBodyMarginValues() { + if ( + 'number' === + typeof (settings[iframeId] && settings[iframeId].bodyMargin) || + '0' === (settings[iframeId] && settings[iframeId].bodyMargin) + ) { + settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin + settings[iframeId].bodyMargin = + '' + settings[iframeId].bodyMargin + 'px' + } + } + + function checkReset() { + // Reduce scope of firstRun to function, because IE8's JS execution + // context stack is borked and this value gets externally + // changed midway through running this function!!! + var firstRun = settings[iframeId] && settings[iframeId].firstRun, + resetRequertMethod = + settings[iframeId] && + settings[iframeId].heightCalculationMethod in resetRequiredMethods + + if (!firstRun && resetRequertMethod) { + resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' }) + } + } + + function setupIFrameObject() { + if (settings[iframeId]) { + settings[iframeId].iframe.iFrameResizer = { + close: closeIFrame.bind(null, settings[iframeId].iframe), + + removeListeners: removeIframeListeners.bind( + null, + settings[iframeId].iframe + ), + + resize: trigger.bind( + null, + 'Window resize', + 'resize', + settings[iframeId].iframe + ), + + moveToAnchor: function (anchor) { + trigger( + 'Move to anchor', + 'moveToAnchor:' + anchor, + settings[iframeId].iframe, + iframeId + ) + }, + + sendMessage: function (message) { + message = JSON.stringify(message) + trigger( + 'Send Message', + 'message:' + message, + settings[iframeId].iframe, + iframeId + ) + } + } + } + } + + // We have to call trigger twice, as we can not be sure if all + // iframes have completed loading when this code runs. The + // event listener also catches the page changing in the iFrame. + function init(msg) { + function iFrameLoaded() { + trigger('iFrame.onload', msg, iframe, undefined, true) + checkReset() + } + + function createDestroyObserver(MutationObserver) { + if (!iframe.parentNode) { + return + } + + var destroyObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + var removedNodes = Array.prototype.slice.call(mutation.removedNodes) // Transform NodeList into an Array + removedNodes.forEach(function (removedNode) { + if (removedNode === iframe) { + closeIFrame(iframe) + } + }) + }) + }) + destroyObserver.observe(iframe.parentNode, { + childList: true + }) + } + + var MutationObserver = getMutationObserver() + if (MutationObserver) { + createDestroyObserver(MutationObserver) + } + + addEventListener(iframe, 'load', iFrameLoaded) + trigger('init', msg, iframe, undefined, true) + } + + function checkOptions(options) { + if ('object' !== typeof options) { + throw new TypeError('Options is not an object') + } + } + + function copyOptions(options) { + // eslint-disable-next-line no-restricted-syntax + for (var option in defaults) { + if (Object.prototype.hasOwnProperty.call(defaults, option)) { + settings[iframeId][option] = Object.prototype.hasOwnProperty.call( + options, + option + ) + ? options[option] + : defaults[option] + } + } + } + + function getTargetOrigin(remoteHost) { + return '' === remoteHost || + null !== remoteHost.match(/^(about:blank|javascript:|file:\/\/)/) + ? '*' + : remoteHost + } + + function depricate(key) { + var splitName = key.split('Callback') + + if (splitName.length === 2) { + var name = + 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1) + this[name] = this[key] + delete this[key] + warn( + iframeId, + "Deprecated: '" + + key + + "' has been renamed '" + + name + + "'. The old method will be removed in the next major version." + ) + } + } + + function processOptions(options) { + options = options || {} + settings[iframeId] = { + firstRun: true, + iframe: iframe, + remoteHost: iframe.src && iframe.src.split('/').slice(0, 3).join('/') + } + + checkOptions(options) + Object.keys(options).forEach(depricate, options) + copyOptions(options) + + if (settings[iframeId]) { + settings[iframeId].targetOrigin = + true === settings[iframeId].checkOrigin + ? getTargetOrigin(settings[iframeId].remoteHost) + : '*' + } + } + + function beenHere() { + return iframeId in settings && 'iFrameResizer' in iframe + } + + var iframeId = ensureHasId(iframe.id) + + if (!beenHere()) { + processOptions(options) + setScrolling() + setLimits() + setupBodyMarginValues() + init(createOutgoingMsg(iframeId)) + setupIFrameObject() + } else { + warn(iframeId, 'Ignored iFrame, already setup.') + } + } + + function debouce(fn, time) { + if (null === timer) { + timer = setTimeout(function () { + timer = null + fn() + }, time) + } + } + + var frameTimer = {} + function debounceFrameEvents(fn, time, frameId) { + if (!frameTimer[frameId]) { + frameTimer[frameId] = setTimeout(function () { + frameTimer[frameId] = null + fn() + }, time) + } + } + + // Not testable in PhantomJS + /* istanbul ignore next */ + + function fixHiddenIFrames() { + function checkIFrames() { + function checkIFrame(settingId) { + function chkDimension(dimension) { + return ( + '0px' === + (settings[settingId] && settings[settingId].iframe.style[dimension]) + ) + } + + function isVisible(el) { + return null !== el.offsetParent + } + + if ( + settings[settingId] && + isVisible(settings[settingId].iframe) && + (chkDimension('height') || chkDimension('width')) + ) { + trigger( + 'Visibility change', + 'resize', + settings[settingId].iframe, + settingId + ) + } + } + + Object.keys(settings).forEach(function (key) { + checkIFrame(key) + }) + } + + function mutationObserved(mutations) { + // watch for changes in the inputs corresponding to the iframes + mutations.forEach(mut=>{ + // make sure this executes only on pages with a formidable form + if ( window.frmrules && mut.target.classList?.contains('ssa_appointment_form_field_appointment_id') && !mut.target.value){ + // scoped function to sync the iframe + let syncIframe = () => { + let src = jQuery(`#${mut.target.id}`).closest('div').find('iframe').attr('src') + jQuery(`#${mut.target.id}`).closest('div').find('iframe').attr( 'src', '' ) + debouce(()=>{ + jQuery(`#${mut.target.id}`).closest('div').find('iframe').attr( 'src', src ) + }, 100 ) + } + // debounce to space out the syncs and avoid crashing + debouce(syncIframe, 16) + } + }) + log( + 'window', + 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type + ) + debouce(checkIFrames, 16) + } + + function createMutationObserver() { + var target = document.querySelector('body'), + config = { + attributes: true, + attributeOldValue: false, + characterData: true, + characterDataOldValue: false, + childList: true, + subtree: true + }, + observer = new MutationObserver(mutationObserved) + + observer.observe(target, config) + } + + var MutationObserver = getMutationObserver() + if (MutationObserver) { + createMutationObserver() + } + } + + function resizeIFrames(event) { + function resize() { + sendTriggerMsg('Window ' + event, 'resize') + } + + log('window', 'Trigger event: ' + event) + debouce(resize, 16) + } + + // Not testable in PhantomJS + /* istanbul ignore next */ + function tabVisible() { + function resize() { + sendTriggerMsg('Tab Visible', 'resize') + } + + if ('hidden' !== document.visibilityState) { + log('document', 'Trigger event: Visibility change') + debouce(resize, 16) + } + } + + function sendTriggerMsg(eventName, event) { + function isIFrameResizeEnabled(iframeId) { + return ( + settings[iframeId] && + 'parent' === settings[iframeId].resizeFrom && + settings[iframeId].autoResize && + !settings[iframeId].firstRun + ) + } + + Object.keys(settings).forEach(function (iframeId) { + if (isIFrameResizeEnabled(iframeId)) { + trigger(eventName, event, settings[iframeId].iframe, iframeId) + } + }) + } + + function setupEventListeners() { + addEventListener(window, 'message', iFrameListener) + + addEventListener(window, 'resize', function () { + resizeIFrames('resize') + }) + + } + + function factory() { + function init(options, element) { + function chkType() { + if (!element.tagName) { + throw new TypeError('Object is not a valid DOM element') + } else if ('IFRAME' !== element.tagName.toUpperCase()) { + throw new TypeError( + 'Expected '; + } elseif ( true === $lazy_load_mode ) { + $iframe_src = ''; + } else { + $iframe_src = ''; + } + + return $iframe_src; + } + + public function ssa_admin_upcoming_appointments( $atts ) { + // sanitize - currently the shortcode is hardcoded but sanitize anyway + $atts = array_map( 'sanitize_text_field', $atts ); + $atts = shortcode_atts( + array( + 'recursive' => -1, // omit the unneeded details + 'status' => 'booked', + 'number' => 5, + 'orderby' => 'start_date', + 'order' => 'ASC', + 'customer_id' => '', + 'staff_ids_any' => current_user_can( 'ssa_manage_others_appointments' ) ? []: [ $this->plugin->staff_model->get_staff_id_for_user_id( get_current_user_id() ) ], + + 'no_results_message' => __( 'No upcoming appointments', 'simply-schedule-appointments' ), + 'logged_out_message' => '', + + 'start_date_min' => ssa_datetime()->sub( new DateInterval( 'PT1H' ) )->format( 'Y-m-d H:i:s' ), + 'details_link_displayed' => true, + 'details_link_label' => __( 'View Details', 'simply-schedule-appointments' ), + 'all_appointments_link_label' => __( 'View all upcoming appointments', 'simply-schedule-appointments' ), + 'web_meeting_link_label' => __( 'Open Web Meeting', 'simply-schedule-appointments' ), + + 'web_meeting_url' => true, + 'appointment_type_displayed' => false, + 'team_members_displayed' => true, + ), + $atts, + 'ssa_admin_upcoming_appointments' + ); + + ob_start(); + include $this->plugin->dir( 'templates/dashboard/dashboard-upcoming-appointments-widget.php' ); + $output = ob_get_clean(); + + return $output; + } + + + public function ssa_past_appointments( $atts ) { + $atts = array_map( 'sanitize_text_field', $atts ); + $atts = shortcode_atts( + array( + 'status' => 'booked', + 'number' => 10, + 'orderby' => 'start_date', + 'order' => 'DESC', + 'customer_id' => get_current_user_id(), + + 'no_results_message' => __( 'No past appointments', 'simply-schedule-appointments' ), + 'logged_out_message' => '', + + 'end_date_max' => ssa_datetime()->format( 'Y-m-d H:i:s' ), + 'details_link_displayed' => true, + 'details_link_label' => __( 'View Details', 'simply-schedule-appointments' ), + + 'web_meeting_url' => false, + 'appointment_type_displayed' => false, + ), + $atts, + 'ssa_upcoming_appointments' + ); + + ob_start(); + include $this->plugin->dir( 'templates/customer/past-appointments.php' ); + $output = ob_get_clean(); + + return $output; + } + + public function ssa_upcoming_appointments( $atts ) { + $atts = array_map( 'sanitize_text_field', $atts ); + $block_settings = isset($atts['block_settings']) ? $atts['block_settings'] : array(); + + $atts = shortcode_atts( + array( + 'status' => 'booked', + 'number' => -1, + 'orderby' => 'start_date', + 'order' => 'ASC', + 'customer_id' => get_current_user_id(), + 'customer_information' => wp_get_current_user()->user_email, + + 'no_results_message' => __( 'No upcoming appointments', 'simply-schedule-appointments' ), + 'logged_out_message' => '', + + 'start_date_min' => ssa_datetime()->sub( new DateInterval( 'PT1H' ) )->format( 'Y-m-d H:i:s' ), + 'details_link_displayed' => true, + 'details_link_label' => __( 'View Details', 'simply-schedule-appointments' ), + + 'web_meeting_url' => true, + 'appointment_type_displayed' => false, + 'block_settings' => $block_settings, + ), + $atts, + 'ssa_upcoming_appointments' + ); + + ob_start(); + include $this->plugin->dir( 'templates/customer/upcoming-appointments.php' ); + $output = ob_get_clean(); + + return $output; + } + + public function ssa_admin() { + if( ! is_user_logged_in() ) { + return; + } + + // If current user or visitor can't manage appointments, display a warning message. + if ( ! current_user_can( 'ssa_manage_appointments' ) ) { + return '

'; + } + + // Make sure we have the nonce for the admin page. + $nonce = wp_create_nonce( 'wp_rest' ); + + wp_localize_script( 'ssa-iframe-outer', 'ssa', $this->plugin->bootstrap->get_api_vars() ); + wp_enqueue_script( 'ssa-iframe-outer' ); + $api_vars = $this->plugin->bootstrap->get_api_vars(); + + $link = add_query_arg( + array( + '_wpnonce' => $nonce, + ), + $api_vars['api']['root'] . '/embed-inner-admin' + ); + + // Check if we have a 'ssa_state' url parameter on the current page. If so, we need to add it to the iframe src as a url hash. + $ssa_state = isset( $_GET['ssa_state'] ) ? sanitize_text_field( esc_attr( $_GET['ssa_state'] ) ) : ''; + if ( ! empty( $ssa_state ) ) { + // sanitize to avoid reflected xss + $link = $link . '#' . $ssa_state; + } + + $link = SSA_Bootstrap::maybe_fix_protocol( $link ); + + return ''; + } + + public function get_translations() { + include $this->plugin->dir( 'languages/booking-app-new-translations.php' ); + return $translations; + } + + /** + * Register the routes for the objects of the controller. + */ + public function register_rest_routes() { + $version = '1'; + $namespace = 'ssa/v' . $version; + $base = 'embed'; + register_rest_route( + $namespace, + '/' . $base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_embed_output' ), + 'permission_callback' => '__return_true', + 'args' => array(), + ), + ) + ); + + register_rest_route( + $namespace, + '/' . 'embed-inner', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_embed_inner_output' ), + 'permission_callback' => '__return_true', + 'args' => array(), + ), + ) + ); + + register_rest_route( + $namespace, + '/' . 'embed-inner-admin', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_embed_inner_admin_output' ), + 'permission_callback' => array( $this, 'current_user_can_manage_appointments' ), + 'args' => array(), + ), + ) + ); + } + + public function current_user_can_manage_appointments() { + return current_user_can( 'ssa_manage_appointments' ); + } + + /** + * Takes $_REQUEST params and returns the booking shortcode output. + * + * @since 3.7.6 + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function get_embed_output( WP_REST_Request $request ) { + $params = $request->get_params(); + + $args = array(); + + if ( ! empty( $params['appointment_type'] ) ) { + $args['type'] = esc_attr( $params['appointment_type'] ); + } + + if ( ! empty( $params['mepr_membership_id'] ) ) { + $args['mepr_membership_id'] = esc_attr( $params['mepr_membership_id'] ); + } + + if ( ! empty( $params['accent_color'] ) ) { + $args['accent_color'] = ltrim( esc_attr( $params['accent_color'] ), '#' ); + } + + if ( ! empty( $params['background_color'] ) ) { + $args['background'] = ltrim( esc_attr( $params['background_color'] ), '#' ); + } + + if ( ! empty( $params['font'] ) ) { + $args['font'] = esc_attr( $params['font'] ); + } + + if ( ! empty( $params['padding'] ) ) { + $args['padding'] = esc_attr( $params['padding'] ); + } + + $output = ssa()->shortcodes->ssa_booking( $args ); + + return new WP_REST_Response( $output, 200 ); + } + + /** + * Takes $_REQUEST params and returns the booking shortcode output. + * + * @since 3.7.6 + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function get_embed_inner_output( WP_REST_Request $request ) { + header( 'Content-Type: text/html' ); + // Include new booking app always + include $this->plugin->dir( 'booking-app-new/iframe-inner.php' ); + exit; + } + + /** + * Takes $_REQUEST params and returns the admin shortcode output. + * + * @since 3.7.6 + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function get_embed_inner_admin_output( WP_REST_Request $request ) { + $params = $request->get_params(); + + $args = array(); + + header( 'Content-Type: text/html' ); + include $this->plugin->dir( 'admin-app/iframe-inner.php' ); + // $output = ssa()->shortcodes->ssa_booking( $params, true ); + // echo $output; + exit; + + // return new WP_REST_Response( $output, 200 ); + } + + /** + * Convert label id or name to a string of appointment types ids separated by commas + * + * @param string|int $args + * @return string + */ + public function convert_label_to_appt_types_ids( $args ){ + + if ( $args == (string) (int) $args ) { + // integer ID provided + $label_id = (int) sanitize_text_field( $args ); + + } else { + // Label name provided + $label = $this->plugin->appointment_type_label_model->query( + array( + 'name' => sanitize_text_field( $args ), + ) + ); + + if( empty( $label ) ) { + return ''; + } + $label_id = $label['0']['id']; + } + + $appointment_types = $this->plugin->appointment_type_model->query( + array( + 'label_id' => $label_id, + 'status' => 'publish', + ) + ); + + if( empty( $appointment_types ) ) { + return ''; + } + + $ids = array_map( function($type){ + return $type['id']; + + }, $appointment_types); + + + $ids_to_str = implode(',', $ids); + + return $ids_to_str; + + } + + /** + * Validator to check for invalid params passed to atts['types'] + * If any of the slugs/ids is valid return true + * If all are invalid return false + * + * @param string $types + * @return boolean + */ + public function is_valid_types_attribute( $types ){ + + $appointment_types = $this->plugin->appointment_type_model->query( array( 'status' => 'publish' ) ); + + $ids = array_column($appointment_types, 'id'); + $slugs = array_column($appointment_types, 'slug'); + + $restricted_types = explode( ',', $types ); + + foreach ($restricted_types as $restricted_type) { + + if( in_array( $restricted_type, $ids ) || in_array( $restricted_type, $slugs ) ) { + return true; + } + } + return false; + } + + /** + * Override atts types/type/label if mepr_membership_id is set + * Handle any issue or error. + * + * @param array $atts + * @return array + */ + public function convert_mepr_membership_id_to_appt_types_ids( $atts ) { + + if ( empty( $atts['mepr_membership_id'] ) || empty( sanitize_text_field( esc_attr( $atts['mepr_membership_id'] ) ) ) ) { + return $atts; + } + + $membership_id = sanitize_text_field( esc_attr( $atts['mepr_membership_id'] ) ); + $is_admin = current_user_can( 'ssa_manage_site_settings' ); + $error_message = ''; + + // MemberPress is not installed or active + if ( ! class_exists( 'SSA_Memberpress') || ! $this->plugin->memberpress->is_ssa_mepr_integration_active() ) { + $error_message .= '

' . __('Sorry, no appointment types available, please check back later.', 'simply-schedule-appointments') . '

'; + if ( $is_admin ) { + $error_message .= '' . __('The MemberPress plugin is not available or not activated. Please ensure that the plugin is installed and activated.', 'simply-schedule-appointments') . ''; + $error_message .= '' . __('(this message is only viewable to site administrators)', 'simply-schedule-appointments') . ''; + } + $atts['error_message'] = $error_message; + return $atts; + } + + // Invalid input membership_id + if ( is_numeric( $membership_id ) ) { + $membership_id = (int) $membership_id; + } else { + $error_message .= '

' . __('Sorry, no appointment types available, please check back later.', 'simply-schedule-appointments') . '

'; + if ( $is_admin ) { + $error_message .= '' . __('The membership ID provided is not valid.', 'simply-schedule-appointments') . ''; + $error_message .= '' . __('(this message is only viewable to site administrators)', 'simply-schedule-appointments') . ''; + } + $atts['error_message'] = $error_message; + return $atts; + } + + $current_user = wp_get_current_user(); + + // We don't have a logged in user + if ( empty( $current_user ) || empty( $current_user->ID ) ) { + $must_login_err_msg = apply_filters( 'ssa/mepr/shortcode/must_login_msg', __( 'You must be logged in to schedule an appointment. Please log in or register.', 'simply-schedule-appointments' ) ); + $error_message .= ''; + $atts['error_message'] = $error_message; + return $atts; + } + + $user = new SSA_Mepr_User( $current_user->ID ); + $appointment_type_ids = $user->get_bookable_types_for_membership( $membership_id ); + + if ( empty( $appointment_type_ids ) ) { + $error_message .= '

' . __('Sorry, no appointment types available, please check back later.', 'simply-schedule-appointments') . '

'; + if ( $is_admin ) { + $error_message .= '' . __('The provided membership ID does not have any associated appointment types. Please ensure that the membership ID is correct and associated with valid appointment types.', 'simply-schedule-appointments') . ''; + $error_message .= '' . __('(this message is only viewable to site administrators)', 'simply-schedule-appointments') . ''; + } + $atts['error_message'] = $error_message; + return $atts; + } + + if ( empty( $atts['types'] ) && empty( $atts['type'] ) ) { + $atts['types'] = implode( ',', $appointment_type_ids ); + } + + return $atts; + + } + + /** + * MemberPress Integration + * The SSA - mepr shortcode wrapper [mepr_ssa_booking] + * + * @return string + */ + public function mepr_ssa_booking() { + + $is_admin = current_user_can( 'ssa_manage_site_settings' ); + $error_message = ''; + + if ( ! class_exists( 'SSA_Memberpress') || ! $this->plugin->memberpress->is_ssa_mepr_integration_active() ) { + $error_message .= '

' . __('Sorry, no appointment types available, please check back later.', 'simply-schedule-appointments') . '

'; + if ( $is_admin ) { + $error_message .= '' . __('The MemberPress plugin is not available or not activated. Please ensure that the plugin is installed and activated.', 'simply-schedule-appointments') . ''; + $error_message .= '' . __('(this message is only viewable to site administrators)', 'simply-schedule-appointments') . ''; + } + return $error_message; + } + + $current_user = wp_get_current_user(); + + // We don't have a logged in user + if ( empty( $current_user ) || empty( $current_user->ID ) ) { + $must_login_err_msg = apply_filters( 'ssa/mepr/shortcode/must_login_msg', __( 'You must be logged in to schedule an appointment. Please log in or register.', 'simply-schedule-appointments' ) ); + return ''; + } + + $user = new SSA_Mepr_User( $current_user->ID ); + $bookable_memberships = $user->get_bookable_memberships(); + + if ( empty( $bookable_memberships ) ) { + $no_bookable_err_msg = apply_filters( 'ssa/mepr/shortcode/no_bookable_err_msg', __( 'You do not have any memberships that allow booking.', 'simply-schedule-appointments' ) ); + return '

' . $no_bookable_err_msg . '

'; + } + + $output = ''; + if ( count( $bookable_memberships ) > 1 ) { + // Let add a title in this case so users can tell which iframe for which + $booking_title = apply_filters( 'ssa/mepr/shortcode/booking_title', __('Booking for %s Membership', 'simply-schedule-appointments' ) ); + foreach ($bookable_memberships as $membership) { + $output .= '

' . sprintf( $booking_title, $membership->get_title() ) . '

'; + $atts = array( + 'mepr_membership_id' => $membership->get_product_id() + ); + $output .= $this->ssa_booking( $atts ); + } + } elseif ( count( $bookable_memberships ) === 1 ) { + $atts = array( + 'mepr_membership_id' => $bookable_memberships[0]->get_product_id() + ); + $output .= $this->ssa_booking( $atts ); + } + + return $output; + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-staff-settings.php b/wp-content/plugins/simply-schedule-appointments/includes/class-staff-settings.php new file mode 100644 index 0000000..de675dc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-staff-settings.php @@ -0,0 +1,66 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + + } + + protected $slug = 'staff'; + + public function get_schema() { + if ( !empty( $this->schema ) ) { + return $this->schema; + } + + $this->schema = array( + 'version' => '2019-12-26.2', + 'fields' => array( + 'enabled' => array( + 'name' => 'enabled', + 'default_value' => '', + ), + ), + ); + + return $this->schema; + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-styles-settings.php b/wp-content/plugins/simply-schedule-appointments/includes/class-styles-settings.php new file mode 100644 index 0000000..faf0b77 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-styles-settings.php @@ -0,0 +1,95 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + } + + protected $slug = 'styles'; + + public function get_schema() { + if ( !empty( $this->schema ) ) { + return $this->schema; + } + + $this->schema = array( + 'version' => '2018-10-23', + 'fields' => array( + 'enabled' => array( + 'name' => 'enabled', + 'default_value' => true, + ), + + 'font' => array( + 'name' => 'font', + 'default_value' =>'Roboto', + ), + + 'accent_color' => array( + 'name' => 'accent_color', + 'default_value' =>'rgba(139, 195, 74, 1)', + ), + + 'background' => array( + 'name' => 'background', + 'default_value' =>'rgba(255, 255, 255, 1)', + ), + + 'padding' => array( + 'name' => 'padding', + 'default_value' =>'1rem', + ), + + 'contrast' => array( + 'name' => 'contrast', + 'default_value' => false, + ), + + 'css' => array( + 'name' => 'css', + 'default_value' => '', + ), + + ), + ); + + return $this->schema; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-styles.php b/wp-content/plugins/simply-schedule-appointments/includes/class-styles.php new file mode 100644 index 0000000..786b19d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-styles.php @@ -0,0 +1,152 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 1.5.2 + */ + public function hooks() { + + } + + public function get_transparency( $rgb_string){ + sscanf( $rgb_string, 'rgba(%d,%d,%d,%f)', $r, $g, $b, $a ); + return $a; + } + + function is_dark_background( $rgb_string ) { + sscanf( $rgb_string, 'rgba(%d,%d,%d,%f)', $r, $g, $b, $a ); + + // Calculate the relative luminance of the color + $L = 0.2126 * pow( $r / 255, 2.2 ) + + 0.7152 * pow( $g / 255, 2.2 ) + + 0.0722 * pow( $b / 255, 2.2 ); + + // Adjust the luminance for opacity + $L = $L / ( $a == 0 ? 0.00001 : $a ); + + // Check if the background is dark + return $L <= 0.5; + } + + public function get_contrast_ratio( $rgb_string ) { + sscanf( $rgb_string, 'rgba(%d,%d,%d,%f)', $r, $g, $b, $a ); + $L1 = 0.2126 * pow( $r / 255, 2.2 ) + + 0.7152 * pow( $g / 255, 2.2 ) + + 0.0722 * pow( $b / 255, 2.2 ); + $L2 = 0.2126 * pow( 0 / 255, 2.2 ) + + 0.7152 * pow( 0 / 255, 2.2 ) + + 0.0722 * pow( 0 / 255, 2.2 ); + + // avoid division by zero fatal error + $a = $a == 0 ? 0.00001 : $a; + + // Adjust value for opacity + $L1 = $L1 / $a; + $L2 = $L2 / $a; + $contrast_ratio = 0; + if ( $L1 > $L2 ) { + $contrast_ratio = (int)( ( $L1 + 0.05 ) / ( $L2 + 0.05 ) ); + } else { + $contrast_ratio = (int)( ( $L2 + 0.05 ) / ( $L1 + 0.05 ) ); + } + return $contrast_ratio; + } + + /** + * checks if a string is a valid hex color or rgba. + * + * @since 3.7.6 + * + * @param string $color + * @return string|boolean + */ + public function is_hex_or_rgba( $color ) { + if( strpos( $color, 'rgba' ) !== false ) { + return 'rgba'; + } + if( preg_match('/^#?(([a-f0-9]{3}){1,2})$/i', $color ) ) { + return 'hex'; + } + + return null; + } + + /** + * Transforms an hex color into rgba, necessary to calculate contrast. + * + * @since 3.7.6 + * + * @param string $hex_string + * @return string + */ + public function hex_to_rgba( $hex_string ) { + // remove hash sign if it's passed on the hex string + $hex_string = ltrim($hex_string, '#'); + $color_type = $this->is_hex_or_rgba( $hex_string ); + + // if not a valid hex or rgba color, return + if( ! $color_type ) { + return null; + } + + if( $color_type === 'rgba' ) { + return $hex_string; + } + + if( strlen( $hex_string ) === 6 ) { + sscanf($hex_string, "%02x%02x%02x", $r, $g, $b); + } else { + $r = hexdec(str_repeat($hex_string[0], 2)); + $g = hexdec(str_repeat($hex_string[1], 2)); + $b = hexdec(str_repeat($hex_string[2], 2)); + } + + return "rgba($r,$g,$b,1)"; + } + + public function get_style_atts_from_string( $string ) { + $values = preg_split('/(?<=[0-9])(?=[^0-9]+)/i', $string ); + $valid_units = array( 'cm', 'mm', 'in', 'px', 'pc', 'pt', 'em', 'ex', 'ch', 'rem', 'vw', 'vh', 'vmin', 'vmax', '%' ); + $unit = ( ! empty( $values[1] ) && in_array( $values[1], $valid_units ) ) ? $values[1] : 'px'; + $value = $values[0]; + + return array( + 'unit' => $unit, + 'value' => $value, + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-support-status-api.php b/wp-content/plugins/simply-schedule-appointments/includes/class-support-status-api.php new file mode 100644 index 0000000..c55ea6c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-support-status-api.php @@ -0,0 +1,607 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks + * + * @since 1.0.0 + * @return void + */ + public function hooks() { + $this->register_routes(); + } + + + /** + * Register the routes for the objects of the controller. + */ + public function register_routes() { + $version = '1'; + $namespace = 'ssa/v' . $version; + $base = 'support_status'; + register_rest_route( $namespace, '/' . $base, array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support_ticket', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'create_support_ticket' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support_debug/wp', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_wp_debug_log_content' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support_debug/wp/delete', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'empty_wp_debug_log_content' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + + register_rest_route( $namespace, '/' . 'support_debug/ssa', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_ssa_debug_log_content' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support_debug/ssa/delete', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'empty_ssa_debug_log_content' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support_debug/logs', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_debug_log_urls' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support/export', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_export_code' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( $namespace, '/' . 'support/import', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'import_data_api' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + ) ); + + register_rest_route( + $namespace, + '/fetch-guides', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_guides' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + ), + ) + ); + + register_rest_route( $namespace, '/user/check', array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'check_user_login_status' ), + 'permission_callback' => '__return_true', + ) ); + } + + public function check_user_login_status( $request ) { + + $data = array( + 'is_user_logged_in' => is_user_logged_in(), + ); + + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $data + ); + + return new WP_REST_Response( $response, 200 ); + } + + + public function create_support_ticket( $request ) { + // queue the minimal ticket sending here + $params = $request->get_params(); + $debug_logs_hash = SSA_Debug::get_site_unique_hash_for_debug_logs(); + ssa_schedule_single_action( time() + 30, 'ssa/support/send_minimal_support_ticket', array( 'params' => [...$params, 'export_code' => '{}', 'debug_logs_hash' => $debug_logs_hash] ) ); + + if ( ! empty( $params['include_active_plugins'] ) ) { + $params['active_plugins'] = array(); + $active_plugins = get_option( 'active_plugins' ); + sort( $active_plugins ); + foreach ($active_plugins as $active_plugin) { + if ( strpos( $active_plugin, '/' ) ) { + $active_plugin = substr( $active_plugin, 0, strpos( $active_plugin, '/' ) ); + } + $params['active_plugins'][] = $active_plugin; + } + unset( $params['include_active_plugins'] ); + } + + if ( ! empty( $params['include_settings'] ) ) { + $params['site_hash_for_debug_logs'] = $debug_logs_hash; + unset( $params['include_settings'] ); + } + + $result = self::ssa_send_support_ticket( $params, $debug_logs_hash ); + if ( !is_wp_error( $result ) ) { + // remove the queued ticket from the queue + ssa_unschedule_all_actions( 'ssa/support/send_minimal_support_ticket' ); + } + return $result; + } + public static function ssa_send_support_ticket($params = array(), $debug_logs_hash = '') { + $response = wp_remote_post( 'https://api.simplyscheduleappointments.com/support_ticket/', array( + 'sslverify' => false, + 'headers' => array( + 'content-type' => 'application/json', + ), + 'body' => json_encode( $params ), + ) ); + + $response_code = wp_remote_retrieve_response_code($response); + if( $response_code > 299 || $response_code < 200 ) { + ssa_debug_log( "Failed to submit support ticket - invalid response code - response: " .print_r ( $response, true), 100 ); //phpcs:ignore + return new WP_Error( 'failed_submission', __( 'Your support ticket failed to be sent, please send details to support@ssaplugin.com', 'simply-schedule-appointments' ), $debug_logs_hash ); + } + + $response = wp_remote_retrieve_body( $response ); + if ( empty( $response ) ) { + ssa_debug_log( "Failed to submit support ticket - response empty - response: " .print_r ( $response, true), 100 ); //phpcs:ignore + return new WP_Error( 'empty_response', __( 'No response', 'simply-schedule-appointments' ), $debug_logs_hash ); + } + $response = json_decode( $response, true ); + if ( ! is_array( $response ) ) { + $response = json_decode( $response, true ); + } + + if ($response['status'] != 'success' ) { + ssa_debug_log( "Failed to submit support ticket - status != success - response: " .print_r ( $response, true), 100 ); //phpcs:ignore + return new WP_Error( 'failed_submission', __( 'Your support ticket failed to be sent, please send details to support@ssaplugin.com', 'simply-schedule-appointments' ), $debug_logs_hash ); + } + return $response; + } + + public function get_items_permissions_check( $request ) { + return current_user_can( 'ssa_manage_site_settings' ); + } + + public function get_items( $request ) { + $params = $request->get_params(); + + return array( + 'response_code' => 200, + 'error' => '', + 'data' => array( + 'site_status' => $this->plugin->support_status->get_site_status(), + ), + ); + } + + /** + * Gets the default debug.log contents. + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function get_wp_debug_log_content( WP_REST_Request $request ) { + $developer_settings = $this->plugin->developer_settings->get(); + if( $developer_settings && isset( $developer_settings['debug_mode'] ) && $developer_settings['debug_mode'] ) { + $path = ini_get('error_log'); + // return $path; + if ( file_exists( $path ) && is_writeable( $path ) ) { + $content = file_get_contents( $path ); + + return new WP_REST_Response( $content, 200 ); + } + } + + return new WP_REST_Response( "", 200 ); + } + + + /** + * Deletes the default debug.log file. + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function empty_wp_debug_log_content( WP_REST_Request $request ) { + $path = ini_get('error_log'); + if ( file_exists( $path ) && is_writeable( $path ) ) { + unlink( $path ); + + return new WP_REST_Response( __( 'Debug Log file successfully cleared.' ), 200 ); + } else { + return new WP_REST_Response( __( 'Debug Log file not found.' ), 200 ); + } + } + + /** + * Gets the ssa_debug.log contents. + * + * @param WP_REST_Request $request + * @return WP_REST_Response + */ + public function get_ssa_debug_log_content( WP_REST_Request $request ) { + $developer_settings = $this->plugin->developer_settings->get(); + if( $developer_settings && isset( $developer_settings['ssa_debug_mode'] ) && $developer_settings['ssa_debug_mode'] ) { + $path = $this->plugin->support_status->get_log_file_path( 'debug' ); + if ( file_exists( $path ) && is_readable( $path ) ) { + $content = file_get_contents( $path ); + + return new WP_REST_Response( $content, 200 ); + } + } + + return new WP_REST_Response( "", 200 ); + } + + /** + * Deletes the ssa_debug.log file. + * + * @param WP_REST_Request $request + * @return void + */ + public function empty_ssa_debug_log_content( WP_REST_Request $request ) { + $path = $this->plugin->support_status->get_log_file_path( 'debug' ); + if ( file_exists( $path ) && is_writeable( $path ) ) { + unlink( $path ); + + return new WP_REST_Response( __( 'Debug Log file successfully cleared.' ), 200 ); + } else { + return new WP_REST_Response( __( 'Debug Log file not found or could not be removed.' ), 200 ); + } + + } + + + /** + * Returns the urls for all debug log files. + * + * @return WP_REST_Response + */ + public function get_debug_log_urls() { + $logs = array( + 'wp' => null, + 'ssa' => null, + ); + + $path = ini_get('error_log'); + if ( file_exists( $path ) && is_readable( $path ) ) { + $logs['wp'] = str_replace( + wp_normalize_path( untrailingslashit( ABSPATH ) ), + site_url(), + wp_normalize_path( $path ) + ); + } + + $ssa_path = $this->plugin->support_status->get_log_file_path( 'debug' ); + if ( file_exists( $ssa_path ) && is_readable( $ssa_path ) ) { + $logs['ssa'] = str_replace( + wp_normalize_path( untrailingslashit( ABSPATH ) ), + site_url(), + wp_normalize_path( $ssa_path ) + ); + } + + return new WP_REST_Response( $logs, 200 ); + } + + /** + * Pulls plugin settings, Appointment Types and Appointments and returns a JSON payload to be imported into another SSA plugin. + * + * @param WP_REST_Request $request the Request payload. + * @return WP_REST_Response + */ + public function get_export_code( WP_REST_Request $request ) { + $params = $request->get_params(); + + $payload = array(); + + if ( isset( $params['settings'] ) && 'true' === $params['settings'] ) { + $payload['settings'] = $this->plugin->settings->get(); + foreach ( $payload['settings']['notifications']['notifications'] as &$notification ) { + $subject = empty( $notification['subject'] ) ? null : $notification['subject']; + $notification['subject'] = wp_strip_all_tags( $subject ); + $notification['message'] = str_ireplace( + array( + '"', + ), + array( + '"', + ), + $notification['message'] + ); + // TODO if this happens again: use html entities functions instead. + } + } + + if ( isset( $params['appointment_types'] ) && 'true' === $params['appointment_types'] ) { + $payload['resource_groups'] = $this->plugin->resource_group_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['resources'] = $this->plugin->resource_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['resource_group_resources'] = $this->plugin->resource_group_resource_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['staff'] = $this->plugin->staff_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['appointment_types'] = $this->plugin->appointment_type_model->query( + array( + 'order' => 'ASC', // necessary for keeping integrity with the order of rows inserted on the database. + 'number' => -1, + ) + ); + + $payload['staff_appointment_types'] = $this->plugin->staff_appointment_type_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['resource_group_appointment_types'] = $this->plugin->resource_group_appointment_type_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['appointment_type_labels'] = $this->plugin->appointment_type_label_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + } + + if ( isset( $params['appointments'] ) && 'true' === $params['appointments'] ) { + $appointments = $this->plugin->appointment_model->query( + array( + 'order' => 'ASC', // necessary for keeping integrity with the order of rows inserted on the database. + 'number' => isset( $params['appointments_limit'] ) ? (int) $params['appointments_limit'] : -1, + 'start_date_min' => isset( $params['future_appointments_only'] ) && 'true' === $params['future_appointments_only'] ? gmdate( 'Y-m-d H:i:s' ) : null, + ) + ); + + if ( ! empty( $params['anonymize_customer_information'] ) && 'true' === $params['anonymize_customer_information'] ) { + foreach ( $appointments as &$appointment ) { + foreach ( $appointment['customer_information'] as $key => &$value ) { + switch ( $key ) { + case 'Phone': + $value = '123-456-7890'; + break; + case 'Email': + $value = substr( sha1( $value ), 0, 10 ) . '@mailinator.com'; + break; + default: + if ( is_array( $value ) ) { + $value = json_encode( $value ); + } + $value = substr( sha1( $value ), 0, 10 ); + break; + } + } + } + } + + $payload['appointments'] = $appointments; + // import meta data as well. + $payload['appointment_meta'] = $this->plugin->appointment_meta_model->query( + array( + 'order' => 'ASC', // necessary for keeping integrity with the order of rows inserted on the database. + 'number' => -1, + ) + ); + + $payload['staff_appointments'] = $this->plugin->staff_appointment_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + $payload['resource_appointments'] = $this->plugin->resource_appointment_model->query( + array( + 'number' => -1, + 'order' => 'ASC', + ) + ); + + } elseif ( isset( $params['appointment_types'] ) && 'true' === $params['appointment_types'] ) { + $payload['appointments'] = array(); + $payload['appointment_meta'] = array(); + $payload['staff_appointments'] = array(); + } + + // Backup export code. Conditional to avoid replacing a proper backup when generating export code to send to support. + if ( ! isset( $params['backup'] ) || 'false' !== $params['backup'] ) { + $this->plugin->support_status->save_export_backup( $payload ); + } + + return new WP_REST_Response( $payload, 200 ); + } + + /** + * Receives a JSON formatted string via POST on our REST API endpoint, and runs the import process. + * + * @param WP_REST_Request $request the request object. + * @return WP_REST_Response + */ + public function import_data_api( WP_REST_Request $request ) { + $json = $request->get_param( 'content' ); + + // verify if JSON data is valid. + $decoded = json_decode( $json, true ); + + if ( ! is_object( $decoded ) && ! is_array( $decoded ) ) { + return new WP_REST_Response( __( 'Invalid data format.'), 500 ); + } + + if ( json_last_error() !== JSON_ERROR_NONE ) { + return new WP_REST_Response( __( 'Invalid data format.'), 500 ); + } + + $import = $this->plugin->support_status->import_data( $decoded ); + + // if any error happens while trying to import appointment type data, return. + if ( is_wp_error( $import ) ) { + return new WP_REST_Response( $import->get_error_messages(), 500 ); + } + + // everything was successfully imported. + return new WP_REST_Response( __( 'Data successfully imported!' ), 200 ); + } + + /** + * Checks transients to see if a request to ssa.com/guides is cached. If not, calls the API and caches the response. + * + * @since 5.4.0 + * + * @param WP_REST_Request $request the request object. + * @return WP_REST_Response + */ + public function get_guides( WP_REST_Request $request ) { + $params = $request->get_params(); + + // $build a string to use as a transient key. + $transient_key = array(); + foreach ( $params as $key => $value ) { + $transient_key[] .= $key . ':' . $value; + } + $transient_key = implode( '|', $transient_key ); + $transient_name = 'ssa_guides_' . $transient_key; + + $cached_response = get_transient( $transient_name ); + + if ( false === $cached_response ) { + $response = wp_safe_remote_get( + 'https://simplyscheduleappointments.com/wp-json/ssa/v1/guides', + array( + 'body' => $params, + ) + ); + + if ( is_wp_error( $response ) ) { + return new WP_REST_Response( $response->get_error_messages(), 500 ); + } + + // check if the response is valid. + if ( strpos( $response['body'], 'rest_forbidden' ) !== false ) { + return new WP_REST_Response( __( 'Invalid data format.' ), 500 ); + } + + $cached_response = json_decode( $response['body'], true ); + + set_transient( $transient_name, $cached_response, WEEK_IN_SECONDS ); + } + + return new WP_REST_Response( $cached_response, 200 ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-support-status.php b/wp-content/plugins/simply-schedule-appointments/includes/class-support-status.php new file mode 100644 index 0000000..5b109d8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-support-status.php @@ -0,0 +1,596 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 2.1.6 + */ + public function hooks() { + add_action( 'admin_init', array( $this, 'validate_directory_name' ), 0 ); + + } + + /** + * Get file path + * + * @param string $filename Filename + * + * @return string + */ + public function get_log_file_path($filename = 'debug') + { + $path = SSA_Filesystem::get_uploads_dir_path(); + if (empty($path)) { + return false; + } + + $path .= '/logs'; + if (!wp_mkdir_p($path)) { + return false; + } + + if (!file_exists($path . '/index.html')) { + $handle = @fopen($path . '/index.html', 'w'); + @fwrite($handle, ''); + @fclose($handle); + } + + if ( defined('AUTH_KEY') ) { + $filename .= '-' . substr(sha1(AUTH_KEY), 0, 10); + } + + return $path . '/' . sanitize_title($filename) . '.log'; + } + + + /** + * Performs a list o site and plugin status checks and return the results. + * + * @return array + */ + public function get_site_status() { + $site_status = new TD_Health_Check_Site_Status(); + + $status = array( + 'plugin_version' => $site_status->test_ssa_plugin_version(), + 'php_version' => $site_status->test_php_version(), + 'wordpress_version' => $site_status->test_wordpress_version(), + 'sql_server' => $site_status->test_sql_server(), + 'json_extension' => $site_status->test_json_extension(), + 'utf8mb4_support' => $site_status->test_utf8mb4_support(), + 'dotorg_communication' => $site_status->test_dotorg_communication(), + 'https_status' => $site_status->test_https_status(), + 'ssl_support' => $site_status->test_ssl_support(), + 'scheduled_events' => $site_status->test_scheduled_events(), + 'php_timezone' => $site_status->test_php_default_timezone() + ); + + // If Paid edition, test site license + if ( $this->plugin->settings_installed->is_installed( 'license' ) ) { + $status = array_merge( array( 'ssa_license' => $this->test_site_license() ), $status ); + } + // if google calendar is installed and enabled + if ( $this->plugin->settings_installed->is_enabled( 'google_calendar' ) ) { + + $google_calendar_settings = ssa()->google_calendar_settings->get(); + // if google calendar has ssa_quick_connect_gcal_mode set to true + if( true === $google_calendar_settings[ "quick_connect_gcal_mode" ] ){ + $status = array_merge( $status, array( 'ssa_quick_connect_status'=> $site_status->test_ssa_quick_connect_status() ) ); + } + } + + if( current_user_can( 'ssa_manage_site_settings' ) ) { + $status = array_merge( + $status, + array( + 'support_pin' => $this->get_site_support_pin() + ) + ); + } + + return $status; + } + + /** + * Receives a JSON formatted string, parses into import data, and runs all the import process. + * + * @param array $decoded the JSON import data, decoded into an associative array format. + * @return boolean|WP_Error true if import process was successful, WP_Error if something bad happens. + */ + public function import_data( $decoded ) { + + // If settings data is available, disable all settings (so we don't trigger hooks for notifications, webhooks, etc). + // The settings will get overwritten again at the end of this import process. + if ( isset( $decoded['settings'] ) ) { + $old_settings = $this->plugin->settings->get(); + foreach ( $old_settings as $key => &$old_setting ) { + if ( empty( $old_setting ) || ! is_array( $old_setting ) ) { + continue; + } + + $old_setting['enabled'] = false; + } + + // disable settings before import. + $update = $this->plugin->settings->update( $old_settings ); + + // staff. + $delete = $this->plugin->staff_model->truncate(); + $this->plugin->staff_model->create_table(); + if( !empty( $decoded['staff'] ) && is_array( $decoded['staff'] ) ){ + foreach ( $decoded['staff'] as $staff ) { + // Remove user IDs from export code since it sometimes assign staff members to the wrong WP users. + $staff['user_id'] = 0; + $include = $this->plugin->staff_model->raw_insert( $staff ); + // if any error happens while trying to staff data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // resource group. + $delete = $this->plugin->resource_group_model->truncate(); + $this->plugin->resource_group_model->create_table(); + if ( isset( $decoded['resource_groups'] ) && ! empty( $decoded['resource_groups'] ) ) { + foreach ( $decoded['resource_groups'] as $resource_group ) { + $include = $this->plugin->resource_group_model->raw_insert( $resource_group ); + + // if any error happens while trying to import resource group data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // resources. + $delete = $this->plugin->resource_model->truncate(); + $this->plugin->resource_model->create_table(); + if ( isset( $decoded['resources'] ) && ! empty( $decoded['resources'] ) ) { + foreach ( $decoded['resources'] as $resource ) { + $include = $this->plugin->resource_model->raw_insert( $resource ); + + // if any error happens while trying to import resource data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // resource groups resource relation. + $delete = $this->plugin->resource_group_resource_model->truncate(); + $this->plugin->resource_group_resource_model->create_table(); + if ( isset( $decoded['resource_group_resources'] ) && ! empty( $decoded['resource_group_resources'] ) ) { + foreach ( $decoded['resource_group_resources'] as $resource_group_resource ) { + $include = $this->plugin->resource_group_resource_model->raw_insert( $resource_group_resource ); + + // if any error happens while trying to import resource group/resource data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + } + + // if appointment types data is available, update. + if ( isset( $decoded['appointment_types'] ) ) { + $delete = $this->plugin->appointment_type_model->truncate(); + $this->plugin->appointment_type_model->create_table(); + + foreach ( $decoded['appointment_types'] as $appointment_type ) { + $include = $this->plugin->appointment_type_model->raw_insert( $appointment_type ); + + // If any error happens while trying to import appointment type data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + + $delete = $this->plugin->staff_appointment_type_model->truncate(); + $this->plugin->staff_appointment_type_model->create_table(); + if( !empty( $decoded['staff_appointment_types'] ) && is_array( $decoded['staff_appointment_types'] ) ) { + foreach ( $decoded['staff_appointment_types'] as $staff_appointment_type ) { + $include = $this->plugin->staff_appointment_type_model->raw_insert( $staff_appointment_type ); + + // If any error happens while trying to import staff appointment type data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + $delete = $this->plugin->resource_group_appointment_type_model->truncate(); + $this->plugin->resource_group_appointment_type_model->create_table(); + if ( isset( $decoded['resource_group_appointment_types'] ) && ! empty( $decoded['resource_group_appointment_types'] ) ) { + foreach ( $decoded['resource_group_appointment_types'] as $resource_group_appointment_type ) { + $include = $this->plugin->resource_group_appointment_type_model->raw_insert( $resource_group_appointment_type ); + + // If any error happens while trying to import resource group appointment type data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // If $decoded contains 'appointment_type_labels' -> the exported site has the migration run & all was set for the labels -> just import labels + if ( isset( $decoded['appointment_type_labels'] ) && ! empty( $decoded['appointment_type_labels'] ) ) { + + $delete = $this->plugin->appointment_type_label_model->truncate(); + $this->plugin->appointment_type_label_model->create_table(); + + foreach ( $decoded['appointment_type_labels'] as $appointment_type_label ) { + $include = $this->plugin->appointment_type_label_model->raw_insert( $appointment_type_label ); + + if ( is_wp_error( $include ) ) { + return $include; + } + } + } else { + // We need to call the migration for the appt type labels to be set + $this->plugin->upgrade->migrate_appointment_type_labels(); + $this->plugin->upgrade->maybe_fix_appointment_type_label_id_equal_to_zero(); + } + + } + + // If appointments data is available, update. + if ( isset( $decoded['appointments'] ) ) { + $delete = $this->plugin->appointment_model->truncate(); + $this->plugin->appointment_model->create_table(); + + foreach ( $decoded['appointments'] as $appointment ) { + $include = $this->plugin->appointment_model->raw_insert( $appointment ); + + // If any error happens while trying to import appointment data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + + // staff + $delete = $this->plugin->staff_appointment_model->truncate(); + $this->plugin->staff_appointment_model->create_table(); + + if ( ! empty( $decoded['staff_appointments'] ) ) { + foreach ( $decoded['staff_appointments'] as $staff_appointment ) { + $include = $this->plugin->staff_appointment_model->raw_insert( $staff_appointment ); + + // If any error happens while trying to import staff_appointment data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // resource + $delete = $this->plugin->resource_appointment_model->truncate(); + $this->plugin->resource_appointment_model->create_table(); + + if ( ! empty( $decoded['resource_appointments'] ) ) { + foreach ( $decoded['resource_appointments'] as $resource_appointment ) { + $include = $this->plugin->resource_appointment_model->raw_insert( $resource_appointment ); + + // If any error happens while trying to import resource_appointment data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + } + + // If appointments meta data is available, update. + if ( isset( $decoded['appointment_meta'] ) ) { + $delete = $this->plugin->appointment_meta_model->truncate(); + + foreach ( $decoded['appointment_meta'] as $appointment_meta ) { + $include = $this->plugin->appointment_meta_model->raw_insert( $appointment_meta ); + + // If any error happens while trying to import appointment data, return. + if ( is_wp_error( $include ) ) { + return $include; + } + } + } + + // If settings data is available, update. + if ( isset( $decoded['settings'] ) ) { + $update = $this->plugin->settings->update( $decoded['settings'] ); + } + + $delete_revison_meta = $this->plugin->revision_meta_model->truncate(); + $delete_revision = $this->plugin->revision_model->truncate(); + $delete = $this->plugin->availability_model->truncate(); + $this->plugin->availability_cache_invalidation->increment_cache_version(); + $this->plugin->google_calendar->increment_google_cache_version(); + + $this->plugin->upgrade->migrate_free_to_paid_customer_info(); + $this->plugin->upgrade->migrate_paid_to_free_customer_info(); + // Everything was successfully imported. + return true; + } + + /** + * Save JSON export backups into the database. + * + * @param string $code + * @return bool|WP_Error true if backup was successfully saved. WP_Error if something wrong happens. + */ + public function save_export_backup( $code = null ) { + if( ! $code ) { + return false; + } + + $date = date('Y-m-d H:i:s'); + $encoded = json_encode($code); + + $backups = get_option( 'ssa_export_backups' ); + + if( ! $backups ) { + $backups = array(); + } + + // if there is already 3 backups, remove the oldest one + if( count($backups) >= 3 ) { + array_pop($backups); + } + + // insert the newest one at the beginning of the array + array_unshift( + $backups, + array( + 'date' => $date, + 'content' => $encoded + ) + ); + + $update = update_option( 'ssa_export_backups', $backups, false ); + + if( ! $update ) { + return new WP_Error( 'ssa-export-backup-not-saved', __( 'An error occurred while trying to save a backup.', 'simply-schedule-appointments' ) ); + } + + return $update; + } + + /** + * Checks if there is a backup export file stored and, if it does, then decode the JSON into an associative array. + * + * @return boolean|array false if we can't find the file, or an associative array if we find it and it has a valid format. + */ + public function get_export_backup() { + $backups = $this->get_export_backup_list(); + + if( is_wp_error($backups) ) { + return $backups; + } + + $json = $backups[0]['content']; + + // verify if JSON data is valid + $decoded = json_decode( $json, true ); + + if ( ! is_object( $decoded ) && ! is_array( $decoded ) ) { + return new WP_Error( 'export-code-invalid-format', __( 'Invalid data format.', 'simply-schedule-appointments')); + } + + if ( json_last_error() !== JSON_ERROR_NONE ) { + return new WP_Error( 'export-code-invalid-format', __( 'Invalid data format.', 'simply-schedule-appointments')); + } + + if( $decoded ) { + return $decoded; + } + + return false; + } + + /** + * Checks if there is an export backup stored and returns a list if any. + * + * @return array|WP_Error An associative array if we find backups. WP_Error if we can't find anything. + */ + public function get_export_backup_list() { + $backups = get_option('ssa_export_backups'); + + if( ! $backups || empty($backups) ) { + return new WP_Error( 'ssa-export-backups-not-found', __( 'Could not find any export backups.', 'simply-schedule-appointments' ) ); + } + + return $backups; + } + + /** + * Searches for latest export backup and, if found, recover the data by running the import logic. + * + * @return boolean|WP_Error + */ + public function restore_settings_backup() { + $backup = $this->get_export_backup(); + + if( ! $backup || is_wp_error( $backup ) ) { + return new WP_Error( 'ssa-export-file-not-found', __( 'No backup files were found.', 'simply-schedule-appointments' ) ); + } + + $import = $this->import_data( $backup ); + + if( is_wp_error( $import ) ) { + return $import; + } + + return true; + } + + /** + * Checks the current status of the plugin license. + * + * @return array + */ + public function test_site_license() { + $expiration_date = $this->get_license_expiration_date(); + $settings = $this->plugin->settings->get(); + $license = $settings['license']; + + + $login_url = 'https://simplyscheduleappointments.com/your-account/'; + $pricing_url = 'https://simplyscheduleappointments.com/pricing/'; + + + if ( ! $this->plugin->settings_installed->is_installed( 'license' ) || 'empty' === $license['license_status'] || 'inactive' === $license['license_status'] ) { + return array( + // translators: %s is the URL to the login page. + 'notices' => array( sprintf( __( '
Get your license key and add it to this site\'s settings to enable automatic updates.', 'simply-schedule-appointments' ), $login_url ) ), + 'status' => 'warning', + 'value' => false, + ); + } + + if ( 'disabled' === $license['license_status'] ) { + return array( + // translators: %s is the URL to the login page. + 'notices' => array( sprintf( __( 'Your license is disabled. Purchase a new license key to enable automatic updates and support.', 'simply-schedule-appointments' ), $pricing_url ) ), + 'status' => 'warning', + 'value' => false, + ); + } + + if ( 'expired' === $license['license_status'] ) { + return array( + // translators: %s is the URL to the login page. + 'notices' => array( + sprintf( + __( 'Your license expired on %1$s. Renew your license to enable automatic updates, bug fixes and support.', 'simply-schedule-appointments' ), + $expiration_date, + $license['license_renewal_link'] + ), + ), + 'status' => 'warning', + 'value' => false, + ); + } + + if ( 'active' === $license['license_status'] || 'valid' === $license['license_status'] ) { + if ( 'lifetime' === $license['license_expiration_date'] ) { + $notice = __( 'Your license is active. You have lifetime access.', 'simply-schedule-appointments' ); + } else { + $notice = sprintf( + __( 'Your license is up-to-date. Next renewal is due on %s.', 'simply-schedule-appointments' ), + $expiration_date + ); + } + return array( + 'notices' => array( $notice ), + 'status' => 'good', + 'value' => true, + ); + } + + // if there isn't any other information, then we assume that the license is invalid. + return array( + // translators: %s is the URL to the login page. + 'notices' => array( sprintf( __( 'Get your license key and add it to this site\'s settings to enable automatic updates.', 'simply-schedule-appointments' ), $login_url ) ), + 'status' => 'warning', + 'value' => false, + ); + } + + /** + * get the expiration date for expired license + * + */ + public function get_license_expiration_date() { + + $license = $this->plugin->license->check(); + + if ( ! empty( $license['license_expiration_date'] ) && 'lifetime' !== $license['license_expiration_date'] ) { + + $formatted_date = date_i18n( get_option( 'date_format' ), strtotime( $license['license_expiration_date'] ) ); + + return $formatted_date; + } + } + + /** + * Check if the main directory is named correctly + * + * @return void + */ + public function validate_directory_name() { + + global $pagenow; + if ( 'plugins.php' !== $pagenow ) { + return; + } + + $directory = $this->plugin->dir(); + $pattern = '/(.*)(\/|\\\)simply\-schedule\-appointments(\/|\\\)$/'; + $matching = preg_match( $pattern, $directory ); + + if( ! $matching ) { + add_action( 'after_plugin_row_' . $this->plugin->basename, array( $this, 'display_wrong_dir_name_error' ), 10 ); + } + } + + /** + * Display warning message to users in plugins.php screen + * + * @return void + */ + public function display_wrong_dir_name_error () { + + echo ''; + echo ''; + echo '
'; + echo '

' . __( 'Error: Invalid directory name. Please rename this plugin\'s directory to simply-schedule-appointments to avoid errors when updating.', 'simply-schedule-appointments' ) . '

'; + echo '
'; + echo ''; + echo ''; + } + + public function get_site_support_pin() { + $status = 'good'; + $value = true; + $notices = array( + SSA_Debug::get_site_unique_hash_for_debug_logs() + ); + + return compact( + 'status', + 'value', + 'notices' + ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-support.php b/wp-content/plugins/simply-schedule-appointments/includes/class-support.php new file mode 100644 index 0000000..9cbc65f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-support.php @@ -0,0 +1,1034 @@ + 'fix_appointment_durations', + 'title' => 'Fix appointment durations', + 'details' => 'Pass 1 as a parameter to update the end date of all appointments to match the duration of the appointment type.', + 'param' => 'ssa-fix-appointment-durations', + 'param_default_value' => '1' + ), + array( + 'callback' => 'fix_appointment_group_ids', + 'title' => 'Fix appointment group ids', + 'details' => 'Pass 1 as a parameter to update the group id of all appointments to match the group id of the first appointment in the group.', + 'param' => 'ssa-fix-appointment-group-ids', + 'param_default_value' => '1' + ), + array( + 'callback' => 'fix_db_datetime_schema', + 'title' => 'Fix database datetime schema', + 'details' => 'Pass 1 as a parameter to update the datetime schema of all appointments and appointment types.', + 'param' => 'ssa-fix-db-datetime-schema', + 'param_default_value' => '1' + ), + array( + 'callback' => 'fix_db_availability_schema', + 'title' => 'Fix database availability schema', + 'details' => 'Pass 1 as a parameter to drop and recreate the availability table.', + 'param' => 'ssa-fix-db-availability-schema', + 'param_default_value' => '1' + ), + array( + 'callback' => 'fix_appointment_types', + 'title' => 'Fix appointment types', + 'details' => 'Pass 1 as a parameter to update the custom customer information and customer information fields of all appointment types', + 'param' => 'ssa-fix-appointment-types', + 'param_default_value' => '1' + ), + array( + 'callback' => 'fix_missing_appointment_types', + 'title' => 'Fix missing appointment types', + 'details' => 'Pass 1 as a parameter to update appointments with appointment types replacing the deleted ones.', + 'param' => 'ssa-fix-missing-appointment-types', + 'param_default_value' => '1' + ), + array( + 'callback' => 'purge_abandoned_appointments', + 'title' => 'Purge abandoned appointments', + 'details' => 'Pass 1 as a parameter to delete all appointments with a status of "abandoned" from the database.', + 'param' => 'ssa-purge-abandoned-appointments', + 'param_default_value' => '1' + ), + array( + 'callback' => 'ssa_factory_reset', + 'title' => 'Factory reset SSA', + 'details' => 'Pass 1 as a parameter to delete all SSA settings from the database and truncate all SSA database tables.', + 'param' => 'ssa-factory-reset', + 'param_default_value' => '1' + ), + array( + 'callback' => 'rebuild_db', + 'title' => 'Rebuild SSA database', + 'details' => 'Pass 1 as a parameter to recreate all SSA database tables.', + 'param' => 'ssa-rebuild-db', + 'param_default_value' => '1' + ), + array( + 'callback' => 'clear_google_cache', + 'title' => 'Clear Google cache', + 'details' => 'Pass 1 as a parameter to clear the Google Calendar cache.', + 'param' => 'ssa-clear-google-cache', + 'param_default_value' => '1' + ), + array( + 'callback' => 'set_google_query_limit', + 'title' => 'Set Google Calendar query limit', + 'details' => 'Pass a new limit to use for Google Calendar events. SSA defaults to 500.', + 'param' => 'ssa-set-google-query-limit', + 'param_default_value' => '500' + ), + array( + 'callback' => 'clear_all_cache', + 'title' => 'Clear all cache', + 'details' => 'Pass 1 as a parameter to clear all cache.', + 'param' => 'ssa-clear-all-cache', + 'param_default_value' => '1' + ), + array( + 'callback' => 'populate_cache', + 'title' => 'Populate cache', + 'details' => 'Pass 1 as a parameter to populate the cache.', + 'param' => 'ssa-populate-cache', + 'param_default_value' => '1' + ), + array( + 'callback' => 'restore_plugin_backup', + 'title' => 'Restore plugin backup', + 'details' => 'Pass 1 as a parameter to restore the last backup of the plugin settings.', + 'param' => 'ssa-restore-backup', + 'param_default_value' => '1' + ), + array( + 'callback' => 'bulk_send_notifications', + 'title' => 'Bulk send notifications', + 'details' => 'Pass 1 as a parameter to send notifications for all future booked appointments.', + 'param' => 'ssa-resend-booked-notifications', + 'param_default_value' => '1' + ), + array( + 'callback' => 'set_display_capacity_available', + 'title' => 'Set display capacity available', + 'details' => 'Pass 1 as a parameter to set the display capacity available setting to true. Pass 0 as a parameter to set the display capacity available setting to false.', + 'param' => 'ssa-set-display-capacity-available', + 'param_default_value' => '1' + ), + array( + 'callback' => 'ssa_set_license', + 'title' => 'Set license', + 'details' => 'Pass the license key as a parameter to activate it.', + 'param' => 'ssa-set-license', + 'param_default_value' => '1' + ), + array( + 'callback' => 'ssa_set_debug_level', + 'title' => 'Set debug level', + 'details' => 'Pass the debug level as a parameter to set the ssa_debug_level option.', + 'param' => 'ssa-set-debug-level', + 'param_default_value' => '10' + ), + array( + 'callback' => 'ssa_cleanup_excluded_calendars', + 'title' => 'Clean up excluded calendars for main calendar and staff profiles', + 'details' => 'Will remove any excluded calendars that are not accessible by SSA. Both from the main calendar and staff profiles.', + 'param' => 'ssa-cleanup-excluded-calendars', + 'param_default_value' => '1' + ), + array( + 'callback' => 'ssa_remove_all_appointments', + 'title' => 'Removes all appointments and their associated data', + 'details' => 'Will totally remove all appointments and their associated data from the database. This cannot be undone!', + 'param' => 'ssa-remove-all-appointments', + 'param_default_value' => '1' + ), + ); + /** + * Constructor. + * + * @since 2.1.6 + * + * @param Simply_Schedule_Appointments $plugin Main plugin object. + */ + public function __construct( $plugin ) { + $this->plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 2.1.6 + */ + public function hooks() { + foreach( $this->secret_urls as $secret_url ) { + if ( ! method_exists( $this, $secret_url['callback'] ) ) { + // if method does not exist on this class + // throw an exception here to catch the problems in the CI/CD pipeline + throw new Exception( 'Method does not exist on this class: ' . $secret_url['callback'] ); + } + add_action( 'admin_init', array( $this, $secret_url['callback'] ) ); + } + // maybe render support page + add_action( 'admin_init', array( $this, 'render_secret_support_page' ), 0 ); + } + + /** + * Render support page. + * Called from wp-admin/admin.php + */ + public function render_secret_support_page() { + + if ( empty( $_GET['ssa-support-admin'] ) || $_GET['ssa-support-admin'] !== '1') { + return; + } + + if( !current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + header( 'Content-Type: text/html' ); + ?> +
+ +
+

+

You are on the SSA secret support page

+

This is available to site administrators only, and should only be used for debugging and support purposes.

+
+
+

Actions

+
+ secret_urls as $secret_url ) { + $nonce = wp_create_nonce( $secret_url['param'] ); + $link = admin_url() . '?ssa_nonce=' . $nonce . '&' . $secret_url['param'] . '=' . $secret_url['param_default_value']; + echo $this->generateSupportUrl($secret_url, $link); + } + ?> +
+
+ +

' . $secret_url['title'] . '

' . + ( empty($secret_url['details']) ? '' : '

' . $secret_url['details'] .'

' ) . + '' . $link . ' + + '; + } + + /** + * Remove all appointments and their associated data. Keeping SSA settings and appointment types intact. + * + * @return void + */ + public function ssa_remove_all_appointments () { + if ( empty( $_GET['ssa-remove-all-appointments'] ) ) { + return; + } + + if (!current_user_can('ssa_manage_site_settings')) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-remove-all-appointments' ) === false ) { + return; + } + + $appointments_to_delete = $this->plugin->appointment_model->query( array( + 'number' => -1, + ) ); + + $appointments_to_delete_ids = wp_list_pluck( $appointments_to_delete, 'id' ); + + $revisions_to_delete = $this->plugin->revision_model->query( array( + 'number' => -1, + 'appointment_id' => $appointments_to_delete_ids, + ) ); + + $revisions_to_delete_ids = wp_list_pluck( $revisions_to_delete, 'id' ); + + $revision_meta_to_delete = $this->plugin->revision_meta_model->query( array( + 'number' => -1, + 'revision_id' => $revisions_to_delete_ids, + ) ); + + // remove all appointment async actions + $this->plugin->async_action_model->bulk_delete( array( + 'number' => -1, + 'object_type' => 'appointment', + ) ); + + $this->plugin->revision_meta_model->bulk_delete( wp_list_pluck( $revision_meta_to_delete, 'id' ) ); + $this->plugin->revision_model->bulk_delete( wp_list_pluck( $revisions_to_delete, 'id' ) ); + $this->plugin->resource_appointment_model->truncate(); + $this->plugin->payment_model->truncate(); + $this->plugin->appointment_meta_model->truncate(); + $this->plugin->appointment_model->truncate(); + } + + /** + * Removes GCAL excluded calendars that the user removed their subscription to. Both from the main calendar and staff profiles. + * + */ + public function ssa_cleanup_excluded_calendars () { + if ( empty( $_GET['ssa-cleanup-excluded-calendars'] ) ) { + return; + } + + if (!current_user_can('ssa_manage_site_settings')) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-cleanup-excluded-calendars' ) === false ) { + return; + } + + // cleanup main excluded calendars + $this->plugin->appointment_type_model->cleanup_main_excluded_calendars(); + + $this->plugin->staff_model->cleanup_staff_excluded_calendars(); + + + wp_redirect( remove_query_arg( 'ssa-cleanup-excluded-calendars' ) ); + exit; + } + + /** + * Set the debug level. + * Used to write logs of levels lower than 10. + * + */ + public function ssa_set_debug_level() { + if ( empty( $_GET['ssa-set-debug-level'] ) ) { + return; + } + + if (!current_user_can('ssa_manage_site_settings')) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-set-debug-level' ) === false ) { + return; + } + + $debug_level = (int) sanitize_text_field( $_GET['ssa-set-debug-level'] ); + + update_option( 'ssa_debug_level', $debug_level ); + + wp_redirect( remove_query_arg( 'ssa-set-debug-level' ) ); + exit; + } + + public function ssa_set_license() { + if ( empty( $_GET['ssa-set-license'] )) { + return; + } + + if (!current_user_can('ssa_manage_site_settings')) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-set-license' ) === false ) { + return; + } + + $license_key = sanitize_text_field( $_GET['ssa-set-license'] ); + $this->plugin->license->activate( $license_key ); + + wp_redirect( remove_query_arg( 'ssa-set-license' ) ); + exit; + } + + public function populate_cache() { + if ( empty( $_GET['ssa-populate-cache'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-populate-cache' ) === false ) { + return; + } + + $this->plugin->availability_cache->populate_cache(); + + wp_redirect( remove_query_arg( 'ssa-populate-cache' ) ); + exit; + } + + public function clear_google_cache() { + if ( empty( $_GET['ssa-clear-google-cache'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-clear-google-cache' ) === false ) { + return; + } + + $this->plugin->availability_external_model->bulk_delete( array( + 'service' => 'google', + ) ); + $this->plugin->google_calendar->increment_google_cache_version(); + + wp_redirect( remove_query_arg( 'ssa-clear-google-cache' ) ); + exit; + } + + public function set_google_query_limit() { + if ( empty( $_GET['ssa-set-google-query-limit'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-set-google-query-limit' ) === false ) { + return; + } + + $set_google_query_limit = (int)esc_attr( $_GET['ssa-set-google-query-limit'] ); + if ( empty( $set_google_query_limit ) ) { + return; + } + + $this->plugin->google_calendar_settings->update( array( + 'query_limit' => $set_google_query_limit, + ) ); + + $this->plugin->google_calendar->increment_google_cache_version(); + + wp_redirect( remove_query_arg( 'ssa-set-google-query-limit' ) ); + exit; + } + + public function set_display_capacity_available() { + if ( ! isset ( $_GET['ssa-set-display-capacity-available'] ) ) { + return; + } + + if (!current_user_can('ssa_manage_site_settings')) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-set-display-capacity-available' ) === false ) { + return; + } + // if ( ! is_user_logged_in() ) { + // return; + // } + $new_value = (bool) $_GET['ssa-set-display-capacity-available']; + $developer_settings = $this->plugin->developer_settings->get(); + $developer_settings['display_capacity_available'] = $new_value; + $this->plugin->developer_settings->update( $developer_settings ); + $this->plugin->availability_cache_invalidation->increment_cache_version(); + + wp_redirect( remove_query_arg( 'ssa-set-display-capacity-available' ) ); + exit; + } + + public function clear_all_cache() { + if ( empty( $_GET['ssa-clear-all-cache'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-clear-all-cache' ) === false ) { + return; + } + + $this->plugin->availability_external_model->bulk_delete( array( + 'service' => 'google', + ) ); + $this->plugin->google_calendar->increment_google_cache_version(); + $this->plugin->availability_cache_invalidation->increment_cache_version(); + + wp_redirect( remove_query_arg( 'ssa-clear-all-cache' ) ); + exit; + } + + public function fix_appointment_durations() { + if ( empty( $_GET['ssa-fix-appointment-durations'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-appointment-durations' ) === false ) { + return; + } + + $appointments = $this->plugin->appointment_model->query( array( + 'number' => -1, + ) ); + $now = new DateTimeImmutable(); + + foreach ($appointments as $key => $appointment) { + if ( empty( $appointment['appointment_type_id'] ) ) { + continue; // likely an abandoned appointment from a form integration (where an appointment type was never selected) + } + $appointment_type = new SSA_Appointment_Type_Object( $appointment['appointment_type_id'] ); + $duration = $appointment_type->duration; + $start_date = new DateTimeImmutable( $appointment['start_date'] ); + + $end_date = $start_date->add( new DateInterval( 'PT' .$duration. 'M' ) ); + if ( $end_date->format( 'Y-m-d H:i:s' ) != $appointment['end_date'] ) { + echo '
'.print_r($appointment, true).'
'; // phpcs:ignore + $appointment['end_date'] = $end_date->format( 'Y-m-d H:i:s' ); + + $this->plugin->appointment_model->update( $appointment['id'], $appointment ); + } + } + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function purge_abandoned_appointments() { + if ( empty( $_GET['ssa-purge-abandoned-appointments'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-purge-abandoned-appointments' ) === false ) { + return; + } + + $this->plugin->appointment_model->delete_abandoned(); + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function fix_db_availability_schema() { + if ( empty( $_GET['ssa-fix-db-availability-schema'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-db-availability-schema' ) === false ) { + return; + } + + $this->plugin->availability_model->drop(); + $this->plugin->availability_model->create_table(); + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function fix_appointment_types() { + if ( empty( $_GET['ssa-fix-appointment-types'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-appointment-types' ) === false ) { + return; + } + + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + foreach ($appointment_types as $appointment_type) { + if ( empty( $appointment_type['custom_customer_information'] ) ) { + $appointment_type['custom_customer_information'] = array( + array( + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'face', + 'values' => '', + ), + array( + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'email', + 'values' => '', + ), + ); + } + + if ( empty( $appointment_type['customer_information'] ) ) { + $appointment_type['customer_information'] = array( + array( + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'face', + 'values' => '', + ), + array( + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'email', + 'values' => '', + ), + ); + } + + $appointment_type['custom_customer_information'] = array_values( (array) $appointment_type['custom_customer_information'] ); + $appointment_type['customer_information'] = array_values( (array) $appointment_type['customer_information'] ); + + $appointment_types = $this->plugin->appointment_type_model->update( + $appointment_type['id'], + $appointment_type + ); + } + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function fix_missing_appointment_types() { + if ( empty( $_GET['ssa-fix-missing-appointment-types'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-missing-appointment-types' ) === false ) { + return; + } + + $this->plugin->upgrade->maybe_fix_deleted_appointment_types(); + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + public function fix_db_datetime_schema() { + if ( empty( $_GET['ssa-fix-db-datetime-schema'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-db-datetime-schema' ) === false ) { + return; + } + + global $wpdb; + + $now = gmdate( 'Y-m-d H:i:s' ); + + $before_queries = array( + /* Appointment Types */ + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `booking_start_date`='".SSA_Constants::EPOCH_START_DATE."' WHERE `booking_start_date`=0", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `booking_end_date`='".SSA_Constants::EPOCH_END_DATE."' WHERE `booking_end_date`=0", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `availability_start_date`='".SSA_Constants::EPOCH_START_DATE."' WHERE `availability_start_date`=0", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `availability_end_date`='".SSA_Constants::EPOCH_END_DATE."' WHERE `availability_end_date`=0", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `date_created`='1970-01-01' where `date_created`=0", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `date_modified`='1970-01-01' where `date_modified`=0", + + /* Appointments */ + "UPDATE {$this->plugin->appointment_model->get_table_name()} SET `start_date`='1970-01-01' where `start_date`=0", + + "UPDATE {$this->plugin->appointment_model->get_table_name()} SET `end_date`='1970-01-01' where `end_date`=0", + + "UPDATE {$this->plugin->appointment_model->get_table_name()} SET `date_created`='1970-01-01' where `date_created`=0", + + "UPDATE {$this->plugin->appointment_model->get_table_name()} SET `date_modified`='1970-01-01' where `date_modified`=0", + + ); + + $after_queries = array( + /* Appointment Types */ + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `booking_start_date`=NULL where `booking_start_date`='".SSA_Constants::EPOCH_START_DATE."'", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `booking_end_date`=NULL where `booking_end_date`='".SSA_Constants::EPOCH_END_DATE."'", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `availability_start_date`=NULL where `availability_start_date`='".SSA_Constants::EPOCH_START_DATE."'", + + "UPDATE {$this->plugin->appointment_type_model->get_table_name()} SET `availability_end_date`=NULL where `availability_end_date`='".SSA_Constants::EPOCH_END_DATE."'", + ); + + $has_failed = false; + foreach ($before_queries as $query) { + $result = $wpdb->query( $query ); + if ( false === $result ) { + $has_failed = true; + } + } + + $this->plugin->appointment_type_model->create_table(); + $this->plugin->appointment_model->create_table(); + + foreach ($after_queries as $query) { + $result = $wpdb->query( $query ); + if ( false === $result ) { + $has_failed = true; + } + } + + $this->fix_appointment_group_ids( true ); + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function fix_appointment_group_ids( $force = false ) { + if ( empty( $force ) && empty( $_GET['ssa-fix-appointment-group-ids'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-fix-appointment-group-ids' ) === false ) { + return; + } + + $appointments = $this->plugin->appointment_model->query( array( + 'number' => -1, + ) ); + $now = new DateTimeImmutable(); + + foreach ($appointments as $key => $appointment) { + if ( ! empty( $appointment['group_id'] ) ) { + continue; + } + + $appointment_type = new SSA_Appointment_Type_Object( $appointment['appointment_type_id'] ); + $capacity_type = $appointment_type->capacity_type; + if ( empty( $capacity_type ) || $capacity_type !== 'group' ) { + continue; + } + + $start_date = new DateTimeImmutable( $appointment['start_date'] ); + + $args = array( + 'number' => -1, + 'orderby' => 'id', + 'order' => 'ASC', + 'appointment_type_id' => $appointment['appointment_type_id'], + 'start_date' => $appointment['start_date'], + 'exclude_ids' => $appointment['id'], + ); + + $new_group_id = 0; + $appointment_arrays = $this->plugin->appointment_model->query( $args ); + foreach ($appointment_arrays as $appointment_array) { + if ( ! empty( $appointment_array['group_id'] ) ) { + $new_group_id = $appointment_array['group_id']; + } + } + + if ( empty( $new_group_id ) && empty( $appointment_arrays[0]['id'] ) ) { + continue; + } + + $new_group_id = $appointment_arrays[0]['id']; + + $this->plugin->appointment_model->update( $appointment['id'], array( + 'group_id' => $new_group_id + ) ); + + foreach ($appointment_arrays as $appointment_array) { + $this->plugin->appointment_model->update( $appointment_array['id'], array( + 'group_id' => $new_group_id + ) ); + } + } + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + /** + * Deletes all ssa related options from wp_options table and truncate all ssa database tables. + * + * @since 5.4.3 + * + * @return void + */ + public function ssa_factory_reset() { + if ( empty( $_GET['ssa-factory-reset'] ) ) { // phpcs:ignore + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-factory-reset' ) === false ) { + return; + } + + // Finds and delete all rows from the wp_options table that contains "ssa_" in the option_name column. + global $wpdb; + + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'ssa\_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery + + // Truncate all ssa database tables. + $this->plugin->appointment_model->truncate(); + $this->plugin->appointment_meta_model->truncate(); + $this->plugin->appointment_type_model->truncate(); + $this->plugin->availability_model->truncate(); + $this->plugin->availability_external_model->truncate(); + $this->plugin->async_action_model->truncate(); + $this->plugin->payment_model->truncate(); + $this->plugin->staff_model->truncate(); + $this->plugin->staff_appointment_model->truncate(); + $this->plugin->staff_appointment_type_model->truncate(); + $this->plugin->resource_model->truncate(); + $this->plugin->resource_group_model->truncate(); + $this->plugin->resource_group_resource_model->truncate(); + $this->plugin->resource_group_appointment_type_model->truncate(); + $this->plugin->resource_appointment_model->truncate(); + $this->plugin->revision_model->truncate(); + $this->plugin->revision_meta_model->truncate(); + + wp_safe_redirect( $this->plugin->wp_admin->url(), $status = 302 ); + exit; + } + + public function rebuild_db() { + if ( empty( $_GET['ssa-rebuild-db'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-rebuild-db' ) === false ) { + return; + } + + $this->plugin->appointment_model->create_table(); + $this->plugin->appointment_meta_model->create_table(); + $this->plugin->appointment_type_model->create_table(); + $this->plugin->appointment_type_label_model->create_table(); + $this->plugin->availability_model->create_table(); + $this->plugin->availability_external_model->create_table(); + $this->plugin->async_action_model->create_table(); + $this->plugin->payment_model->create_table(); + $this->plugin->revision_model->create_table(); + $this->plugin->revision_meta_model->create_table(); + $this->plugin->resource_appointment_model->create_table(); + $this->plugin->resource_group_appointment_type_model->create_table(); + $this->plugin->resource_model->create_table(); + $this->plugin->resource_group_model->create_table(); + $this->plugin->resource_group_resource_model->create_table(); + $this->plugin->staff_model->create_table(); + $this->plugin->staff_appointment_model->create_table(); + $this->plugin->staff_appointment_type_model->create_table(); + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + public function restore_plugin_backup() { + if ( empty( $_GET['ssa-restore-backup'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-restore-backup' ) === false ) { + return; + } + + // restore previous backup file + $restore = $this->plugin->support_status->restore_settings_backup(); + + // if something happens, print the errors + if( is_wp_error( $restore ) ) { + $string = implode("\n", $restore->get_error_messages()); + wp_die($string); + } + + wp_redirect( $this->plugin->wp_admin->url(), $status = 302); + exit; + } + + /** + * Given a GET parameter on the url, get a list of future booked appointments and schedule notifications for the ones that are valid. + * + * @since 4.8.8 + * + * @return void + */ + public function bulk_send_notifications() { + if ( empty( $_GET['ssa-resend-booked-notifications'] ) ) { + return; + } + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + if ( wp_verify_nonce( $_GET['ssa_nonce'], 'ssa-resend-booked-notifications' ) === false ) { + return; + } + + // Get list of booked appointments. + $appointments = $this->plugin->appointment_model->query( + array( + 'status' => SSA_Appointment_Model::get_booked_statuses(), + 'start_date_min' => gmdate( 'Y-m-d H:i:s' ), + 'number' => -1, + ) + ); + + $notifications = $this->plugin->notifications_settings->get_notifications(); + + if ( empty( $notifications ) ) { + wp_safe_redirect( $this->plugin->wp_admin->url(), $status = 302 ); + exit; + } + + // filter list of notifications to return only the one to be sent to the customer. + $customer_booked_notifications = array_values( + array_filter( + $notifications, + function( $notification ) { + return ( + ( !isset( $notification['active'] ) || true == $notification['active'] ) && + 'appointment_booked' === $notification['trigger'] && + strpos( implode( ';', $notification['sent_to'] ), 'customer_email' ) !== false + ); + } + ) + ); + + // If notification is found, then send list of appointments to validate the notification and possibly send them. + if ( ! empty( $customer_booked_notifications ) ) { + foreach ( $customer_booked_notifications as $customer_booked_notification ) { + $this->plugin->action_scheduler->bulk_schedule_notifications( $customer_booked_notification, $appointments ); + } + } + + wp_safe_redirect( $this->plugin->wp_admin->url(), $status = 302 ); + exit(); + } + + public static function should_display_support_tab() { + // hide support tab via wp-config + if( defined( 'SSA_DISPLAY_SUPPORT_TAB' ) && false === SSA_DISPLAY_SUPPORT_TAB ) { + return false; + } + if( is_multisite() && ! current_user_can('manage_network') ) { + return false; + } + return true; + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-templates-api.php b/wp-content/plugins/simply-schedule-appointments/includes/class-templates-api.php new file mode 100644 index 0000000..df6ec85 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-templates-api.php @@ -0,0 +1,136 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks + * + * @since 1.0.0 + * @return void + */ + public function hooks() { + $this->register_routes(); + } + + + /** + * Register the routes for the objects of the controller. + */ + public function register_routes() { + $version = '1'; + $namespace = 'ssa/v' . $version; + $base = 'templates'; + + register_rest_route( + $namespace, + '/' . $base . '/validate', + array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'validate_twig_template' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + 'message' => array( + 'required' => true, + 'type' => 'string', + ), + ), + ), + ) + ); + } + + /** + * Check if a given request has access to get items + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function get_items_permissions_check( $request ) { + return TD_API_Model::nonce_permissions_check( $request ); + } + + /** + * Given a message, verify if it's a valid Twig string or if it contain errors while parsing it. + * + * @since 5.2.0 + * + * @param WP_REST_Request $request Full data about the request. + * + * @return WP_REST_Response $response The response data. + */ + public function validate_twig_template( WP_REST_Request $request ) { + $template_string = $request->get_param( 'message' ); + + // if string includes any js or event handlers, return an error + if ( preg_match( '/ on\w+=.*\(/', $template_string ) || preg_match( '/]*>(.*?)<\/script>/is', $template_string ) ) { + return new WP_REST_Response( + array( + 'success' => false, + 'error' => 'JavaScript is not allowed in Twig templates.', + ), + 200 + ); + } + + $template_string = $this->plugin->templates->cleanup_variables_in_string( $template_string ); + $template_string = $this->plugin->notifications->prepare_notification_template( $template_string ); + + $loader = new Twig\Loader\ArrayLoader( + array( + 'template' => $template_string, + ) + ); + + $twig = new Twig\Environment( $loader ); + + $twig->addExtension( $this->plugin->templates->getCustomTwigSandboxExtension() ); + + $twig->addExtension( new SSA_Twig_Extension() ); + $twig->getExtension( \Twig\Extension\CoreExtension::class )->setTimezone( 'UTC' ); + + try { + $render = $twig->render( 'template' ); + } catch ( Exception $e ) { + return new WP_REST_Response( + array( + 'success' => false, + 'error' => "Error: {$e->getMessage()}", + ), + 200 + ); + } + + return new WP_REST_Response( array( 'success' => true ) ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-templates.php b/wp-content/plugins/simply-schedule-appointments/includes/class-templates.php new file mode 100644 index 0000000..3878e53 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-templates.php @@ -0,0 +1,844 @@ +plugin = $plugin; + + SSA_Utils::define( 'SSA_TEMPLATE_DEBUG_MODE', false ); + + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 2.0.3 + */ + public function hooks() { + add_filter( 'ssa/templates/get_template_vars', array( $this, 'add_global_template_vars' ), 5, 2 ); + add_filter( 'ssa/templates/get_template_vars', array( $this, 'add_appointment_template_vars' ), 5, 2 ); + add_filter( 'ssa/templates/get_template_vars', array( $this, 'add_appointment_calendar_link_vars' ), 5, 2 ); + add_filter( 'ssa/templates/get_template_vars', array( $this, 'add_example_appointment_type_template_vars' ), 5, 2 ); + add_filter( 'ssa/templates/get_template_vars', array( $this, 'ssa_get_tec_vars' ), 10, 2 ); + + } + + public function get_template_vars( $template, $vars = array() ) { + // Batch-mode caching is opt-in and disabled by default. + // Only active when a caller (e.g. ICS exporter) explicitly calls enable_batch_mode(). + // All regular code paths are completely unaffected. + if ( $this->batch_mode_enabled && isset( $vars['appointment_id'] ) ) { + $cache_key = (int) $vars['appointment_id']; + if ( isset( $this->batch_vars_cache[ $cache_key ] ) ) { + return $this->batch_vars_cache[ $cache_key ]; + } + } + + $vars = apply_filters( 'ssa/templates/get_template_vars', $vars, $template ); + + if ( $this->batch_mode_enabled && isset( $cache_key ) ) { + $this->batch_vars_cache[ $cache_key ] = $vars; + } + + return $vars; + } + + /** + * Enable per-appointment vars caching for batch rendering. + * + * Call before processing a collection of appointments (e.g. ICS feed generation) + * to prevent the template-var filter chain from re-running for each Twig property + * (title, description, location) on the same appointment. + * Always pair with a disable_batch_mode() call afterwards. + */ + public function enable_batch_mode() { + $this->batch_mode_enabled = true; + $this->batch_vars_cache = array(); + } + + /** + * Disable batch-mode caching and clear the vars cache. + */ + public function disable_batch_mode() { + $this->batch_mode_enabled = false; + $this->batch_vars_cache = array(); + } + + public function add_global_template_vars( $vars, $template ) { + if ( empty( $vars['Global'] ) ) { + $vars['Global'] = array(); + } + + $global_settings = $this->plugin->settings->get()['global']; + $vars['Global'] = array_merge( $vars['Global'], array( + 'site_url' => site_url(), + 'home_url' => home_url(), + 'company_name' => get_bloginfo('name') + ), $global_settings ); + + return $vars; + } + + /** + * Add appointment template vars. + * + * @since 5.5.3 + * + * @param array $vars Template vars. + * @param string $template Template name. + * + * @return array + */ + public function add_appointment_calendar_link_vars( $vars, $template ) { + if ( empty( $vars['appointment_id'] ) ) { + return $vars; + } + + if ( empty( $vars['Appointment'] ) ) { + $vars['Appointment'] = array(); + } + remove_filter( 'ssa/templates/get_template_vars', array( ssa()->templates, 'add_appointment_calendar_link_vars' ), 5, 2 ); + $appointment_obj = new SSA_Appointment_Object( (int) $vars['appointment_id'] ); + // Add to calendar link. + $vars['add_to_calendar_link'] = array(); + $vars['add_to_calendar_link']['ics'] = $appointment_obj->get_ics_download_url( 'customer' ); + $vars['add_to_calendar_link']['gcal'] = $appointment_obj->get_gcal_add_link( 'customer' ); + + // Get public token for ics download. + $public_token = ssa()->appointment_model->get_id_token( $vars['appointment_id'] ); + + $vars['add_to_calendar_link']['ics'] = add_query_arg( + array( + 'token' => $public_token, + ), + $vars['add_to_calendar_link']['ics'] + ); + + add_filter( 'ssa/templates/get_template_vars', array( ssa()->templates, 'add_appointment_calendar_link_vars' ), 5, 2 ); + + return $vars; + } + + public function add_example_appointment_type_template_vars( $vars, $template ) { + if ( empty( $vars['example_appointment_type_id'] ) ) { + return $vars; + } + + if ( empty( $vars['Appointment'] ) ) { + $vars['Appointment'] = array(); + } + + $settings = $this->plugin->settings->get(); + $appointment_type_object = new SSA_Appointment_Type_Object( (int)$vars['example_appointment_type_id'] ); + + $vars['Appointment']['AppointmentType'] = $appointment_type_object->data; + if ( isset( $vars['Appointment']['AppointmentType']['availability'] ) ) { + unset( $vars['Appointment']['AppointmentType']['availability'] ); + } + if ( isset( $vars['Appointment']['AppointmentType']['notifications'] ) ) { + unset( $vars['Appointment']['AppointmentType']['notifications'] ); + } + if ( isset( $vars['Appointment']['AppointmentType']['google_calendars_availability'] ) ) { + unset( $vars['Appointment']['AppointmentType']['google_calendars_availability'] ); + } + if ( !empty( $vars['Appointment']['AppointmentType']['custom_customer_information'] ) ) { + $vars['Appointment']['AppointmentType']['customer_information'] = $vars['Appointment']['AppointmentType']['custom_customer_information']; + } + if ( isset( $vars['Appointment']['AppointmentType']['custom_customer_information'] ) ) { + unset( $vars['Appointment']['AppointmentType']['custom_customer_information'] ); + } + if ( isset( $vars['Author'] ) ) { + $vars['Customer'] = $vars['Author']; + unset( $vars['Author'] ); + } + + $vars['Appointment']['customer_information'] = array(); + $vars['Appointment']['customer_information_strings'] = array(); + foreach ($vars['Appointment']['AppointmentType']['customer_information'] as $key => $value) { + $vars['Appointment']['customer_information'][$value['field']] = __( '[customer info will go here...]', 'simply-schedule-appointments' ); + $vars['Appointment']['customer_information_strings'][$value['field']] = __( '[customer info will go here...]', 'simply-schedule-appointments' ); + } + $vars['Appointment']['start_date'] = gmdate( 'Y-m-d H:i:s' ); + $vars['Appointment']['end_date'] = gmdate( 'Y-m-d H:i:s' ); + $vars['Appointment']['status'] = 'booked'; + $vars['Appointment']['customer_id'] = 0; + $vars['Appointment']['customer_timezone'] = 'UTC'; + $vars['Appointment']['appointment_type_id'] = $vars['example_appointment_type_id']; + + $vars['admin_email'] = $settings['global']['admin_email']; + $vars['customer_email'] = $vars['Appointment']['customer_information']['Email']; + $vars['customer_name'] = $vars['Appointment']['customer_information']['Name']; + $vars['attendees_list'] = __( '[List of attendees will go here...]', 'simply-schedule-appointments' ); + $vars['instructions'] = $vars['Appointment']['AppointmentType']['instructions']; + $vars['location'] = __( '[Event location info will go here...]', 'simply-schedule-appointments' ); + + // Refund policy + $vars['refund_policy'] = __('[Refund Policy will go here...]', 'simply-schedule-appointments'); + + // Add to calendar link. + $vars['add_to_calendar_link'] = array( + 'ics' => __( '[Link to save .ics file will go here...]', 'simply-schedule-appointments' ), + 'gcal' => __( '[Link to add to calendar will go here...]', 'simply-schedule-appointments' ), + ); + + return $vars; + } + + public function add_appointment_template_vars( $vars, $template ) { + if ( empty( $vars['appointment_id'] ) ) { + return $vars; + } + + if ( empty( $vars['Appointment'] ) ) { + $vars['Appointment'] = array(); + } + + $settings = $this->plugin->settings->get(); + $appointment_obj = new SSA_Appointment_Object( (int)$vars['appointment_id'] ); + + $eol = "\r\n"; + + $vars['Appointment'] = array_merge( $vars['Appointment'], $appointment_obj->get_data( 1 ) ); + $vars['Appointment']['customer_information_strings'] = array(); + foreach ( $vars['Appointment']['customer_information'] as $key => $value ) { + if (is_array($value)) { + $string_value = implode(', ', $value); + $vars['Appointment']['customer_information_strings'][$key] = htmlspecialchars($string_value); + $vars['Appointment']['customer_information'][$key] = array_map('htmlspecialchars', $value); + } else { + $value = htmlspecialchars($value); + $vars['Appointment']['customer_information'][$key] = $value; + $vars['Appointment']['customer_information_strings'][$key] = $value; + } + } + + if ( isset( $vars['Appointment']['AppointmentType']['availability'] ) ) { + unset( $vars['Appointment']['AppointmentType']['availability'] ); + } + if ( isset( $vars['Appointment']['AppointmentType']['notifications'] ) ) { + unset( $vars['Appointment']['AppointmentType']['notifications'] ); + } + if ( isset( $vars['Appointment']['AppointmentType']['google_calendars_availability'] ) ) { + unset( $vars['Appointment']['AppointmentType']['google_calendars_availability'] ); + } + if ( !empty( $vars['Appointment']['AppointmentType']['custom_customer_information'] ) ) { + $vars['Appointment']['AppointmentType']['customer_information'] = $vars['Appointment']['AppointmentType']['custom_customer_information']; + } + if ( isset( $vars['Appointment']['AppointmentType']['custom_customer_information'] ) ) { + unset( $vars['Appointment']['AppointmentType']['custom_customer_information'] ); + } + + if ( isset( $vars['Author'] ) ) { + $vars['Customer'] = $vars['Author']; + unset( $vars['Author'] ); + } + + $vars['admin_email'] = $settings['global']['admin_email']; + $vars['customer_email'] = isset ( $vars['Appointment']['customer_information']['Email'] ) ? $vars['Appointment']['customer_information']['Email'] : ''; + $vars['customer_name'] = isset ( $vars['Appointment']['customer_information']['Name'] ) ? $vars['Appointment']['customer_information']['Name'] : ''; + + + // ================================================================================================= + // important: get meta data early on + // ================================================================================================= + $meta = $this->plugin->appointment_model->get_metas( (int)$vars['appointment_id'], array( 'booking_url', 'booking_post_id', 'booking_title', 'cancelation_note', 'canceled_by_user_id', 'rescheduling_note', 'rescheduled_by_user_id', 'rescheduled_from_start_dates' ) ); + + + /* BEGIN customer_start_date */ + if ( ! empty( $vars['Appointment']['customer_locale'] ) ) { + $this->plugin->translation->set_programmatic_locale( esc_attr( $vars['Appointment']['customer_locale'] ) ); + } + $format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; + + if ( empty( $vars['Appointment']['customer_timezone'] ) ) { + $customer_timezone = $appointment_obj->get_date_timezone(); + $vars['Appointment']['customer_timezone'] = $customer_timezone->getName(); + } else if ( false !== strpos( $vars['Appointment']['customer_timezone'], 'Etc/' ) ) { + $customer_timezone = $appointment_obj->get_date_timezone(); + $vars['Appointment']['customer_timezone'] = $customer_timezone->getName(); + } else { + // Use safe timezone helper to handle PHP 8.3+ deprecated timezone names + $customer_timezone = SSA_Utils::safe_timezone( + $vars['Appointment']['customer_timezone'], + $appointment_obj->get_date_timezone() // Fallback to appointment's default timezone + ); + $vars['Appointment']['customer_timezone'] = $customer_timezone->getName(); + } + + $vars['Appointment']['customer_start_date'] = ssa_datetime( $vars['Appointment']['start_date'] )->setTimezone( $customer_timezone )->format( $format ); + $vars['Appointment']['customer_start_date'] = SSA_Utils::translate_formatted_date( $vars['Appointment']['customer_start_date'] ); + /* END customer_start_date */ + + /* Start customer_prev_start_dates - rescheduling history */ + if( ! empty( $meta['rescheduled_from_start_dates'] ) ) { + $customer_prev_start_dates = array_map( function( $date ) use ( $format, $vars, $customer_timezone ) { + $value = ssa_datetime( $date )->setTimezone( $customer_timezone )->format( $format ); + $value = SSA_Utils::translate_formatted_date( $value ); + return $value; + }, array_reverse( $meta['rescheduled_from_start_dates'] ) ); + // in business timezone + $vars['Appointment']['customer_prev_start_dates'] = implode(",\n", $customer_prev_start_dates ); + $vars['Appointment']['customer_prev_start_date'] = array_shift( $customer_prev_start_dates ); + } else { + $vars['Appointment']['customer_prev_start_dates'] = null; + $vars['Appointment']['customer_prev_start_date'] = null; + } + /* End customer_prev_start_dates - rescheduling history */ + + // ================================================================================================= + // important: reset the locale to the default locale before proceeding to the business timezone + // ================================================================================================= + $this->plugin->translation->set_programmatic_locale( null ); + + /* BEGIN business_start_date */ + $format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; + $vars['Appointment']['business_start_date'] = ssa_datetime( $vars['Appointment']['start_date'] ); + + $vars['Appointment']['business_start_date'] = $this->plugin->utils->get_datetime_as_local_datetime( $vars['Appointment']['business_start_date'], $vars['Appointment']['appointment_type_id'] )->format( $format ); + $vars['Appointment']['business_start_date'] = SSA_Utils::translate_formatted_date( $vars['Appointment']['business_start_date'] ); + /* END business_start_date */ + + /* Start business_prev_start_dates - rescheduling history */ + if( ! empty( $meta['rescheduled_from_start_dates'] ) ) { + $business_prev_start_dates = array_map( function( $date ) use ( $format, $vars ) { + $value = ssa_datetime( $date ); + $value = $this->plugin->utils->get_datetime_as_local_datetime( $value, $vars['Appointment']['appointment_type_id'] )->format( $format ); + $value = SSA_Utils::translate_formatted_date( $value ); + return $value; + }, array_reverse( $meta['rescheduled_from_start_dates'] ) ); + // in business timezone + $vars['Appointment']['business_prev_start_dates'] = implode(",\n", $business_prev_start_dates ); + $vars['Appointment']['business_prev_start_date'] = array_shift( $business_prev_start_dates ); + } else { + $vars['Appointment']['business_prev_start_dates'] = null; + $vars['Appointment']['business_prev_start_date'] = null; + } + /* End business_prev_start_dates - rescheduling history */ + + if ( empty( $vars['Appointment']['customer_timezone'] ) || false !== strpos( $vars['Appointment']['customer_timezone'], 'Etc/' ) ) { + $vars['Appointment']['customer_timezone'] = $vars['Appointment']['date_timezone']; + } + + // If Appointment date_timezone is a DateTimeZone object, get the name. + if ( is_object( $vars['Appointment']['date_timezone'] ) ) { + $vars['Appointment']['date_timezone'] = $vars['Appointment']['date_timezone']->getName(); + } + + // Include booking page variables + $meta = $this->plugin->appointment_model->get_metas( (int)$vars['appointment_id'], array( 'booking_url', 'booking_post_id', 'booking_title', 'cancelation_note', 'canceled_by_user_id', 'rescheduling_note', 'rescheduled_by_user_id', 'mepr_membership_id' ) ); + + $vars['booking_url'] = isset( $meta['booking_url'] ) ? $meta['booking_url'] : null; + $vars['booking_post_id'] = isset( $meta['booking_post_id'] ) ? $meta['booking_post_id'] : null; + $vars['booking_title'] = isset( $meta['booking_title'] ) ? $meta['booking_title'] : null; + $vars['cancelation_note'] = isset( $meta['cancelation_note'] ) ? $meta['cancelation_note'] : null; + $vars['canceled_by_name'] = isset( $meta['canceled_by_user_id'] ) ? $this->get_user_name_from_user_id( $meta['canceled_by_user_id'] ) : null; + $vars['rescheduling_note'] = isset( $meta['rescheduling_note'] ) ? $meta['rescheduling_note'] : null; + $vars['rescheduled_by_name'] = isset( $meta['rescheduled_by_user_id'] ) ? $this->get_user_name_from_user_id( $meta['rescheduled_by_user_id'] ) : null; + $vars['location'] = isset($vars['Appointment']['web_meeting_url'] ) ? $vars['Appointment']['web_meeting_url'] : ''; + $vars['mepr_membership_title'] = isset( $meta['mepr_membership_id'] ) ? $this->get_mepr_membership_title( $meta['mepr_membership_id'] ) : null; + + // List of attendees + $vars['attendees_list'] = ''; + $appointments = $appointment_obj->query_group_appointments(); + if( $appointments ) { + $appointments_count = count( $appointments ); + foreach ($appointments as $index => $appointment) { + $separator = $index < $appointments_count - 1 ? ', ' : ''; + if ( ! $appointment->is_booked() ) { + continue; + } + + $vars['attendees_list'] .= $appointment->get_customer_name() . $separator . $eol; + } + } + + if ( empty( $vars['instructions'] ) ) { + $vars['instructions'] = ''; + } + $vars['instructions'] .= $vars['Appointment']['AppointmentType']['instructions'] ?? ''; + + // Refund policy + $vars['refund_policy'] = isset($vars['Appointment']['AppointmentType']['payments']) && isset($vars['Appointment']['AppointmentType']['payments']['refund_policy']) ? $vars['Appointment']['AppointmentType']['payments']['refund_policy'] : ''; + + // adding empty values for {{team_member_name}}, {{team_member_email}}, {{team_member_phone}} in case they're used without the business edition + $team_member_keys = array( 'name', 'email', 'phone' ); + foreach ($team_member_keys as $key) { + $vars['team_member_'.$key] = ''; + } + + return $vars; + } + + + public function render_template_string( $template_string, $vars ) { + + $loader = new Twig\Loader\ArrayLoader( + array( + 'template' => $template_string, + 'autoescape' => false, + ) + ); + + $twig = new Twig\Environment( $loader ); + + // enable sandbox mode + $twig->addExtension( $this->getCustomTwigSandboxExtension() ); + + $twig->addExtension( new SSA_Twig_Extension() ); + $twig->getExtension( \Twig\Extension\CoreExtension::class )->setTimezone( 'UTC' ); + try { + $rendered_template = $twig->render( 'template', $vars ); + } catch ( Exception $e ) { + return $this->generate_twig_error_summary($e, $template_string); + } + + // need to unescape the html so PHP can process it in wp_kses_post + // was escaped in the frontend + $rendered_template = html_entity_decode($rendered_template); + + return wp_kses_post($rendered_template); + } + + protected function get_template_line_at_error( $line = null, $template_string = null ) { + if( empty( $line ) || empty( $template_string ) ) { + return; + } + $line = (int) $line - 1; // Convert to 0-indexed + $lines = explode("\n", $template_string); + return isset($lines[ $line ]) ? $lines[ $line ] : null; + } + + protected function generate_twig_error_summary(Exception $e, $template_string) { + $msg = '

Error on Line: ' . $e->getTemplateLine() . "

"; + $msg .= "

" . $e->getRawMessage() . "

"; + $affected_line = $this->get_template_line_at_error( $e->getTemplateLine(), $template_string ); + if( $affected_line ) { + $msg .= "

Check this part of your template:

" . $affected_line . "
"; + } + return $msg; + } + + + /** + * Initialize sandbox extension with custom policy to prevent template-injections + * + * @return \Twig\Extension\SandboxExtension + */ + public function getCustomTwigSandboxExtension() + { + $tags = array('if', 'else', 'elseif', 'endif', 'include', 'import', 'block', 'set', 'for'); + $filters = array( 'internationalize', 'trim', 'join', 'number_format', 'date', 'escape', 'trans', 'split', 'length', 'slice', 'lower', 'raw', 'filter', 'date', 'upper', 'link', 'nl2br', 'replace'); + $methods = array(); + $properties = array(); + $functions = array('include', 'path', 'absolute_url', 'asset', 'is_granted', 'attribute'); + + $policy = new \Twig\Sandbox\SecurityPolicy($tags, $filters, $methods, $properties, $functions); + return new \Twig\Extension\SandboxExtension( $policy, true ); + } + + + + /** + * Get template part. + * + * SSA_TEMPLATE_DEBUG_MODE will prevent overrides in themes from taking priority. + * + * @access public + * @param mixed $slug Template slug. + * @param string $name Template name (default: ''). + * @param boolean $echo Should echo $output to screen. (default: false). + * + * @return string + */ + function get_template_part( $slug, $name = '', $echo = false ) { + ob_start(); + $template = ''; + + // Look in yourtheme/slug-name.php and yourtheme/ssa/slug-name.php. + if ( $name && ! SSA_TEMPLATE_DEBUG_MODE ) { + $template = locate_template( array( "{$slug}-{$name}.php", $this->plugin->template_subdirectory() . "{$slug}-{$name}.php" ) ); + } + + // Get default slug-name.php. + if ( ! $template && $name && file_exists( $this->plugin->dir() . "templates/{$slug}-{$name}.php" ) ) { + $template = $this->plugin->dir() . "templates/{$slug}-{$name}.php"; + } + + // If template file doesn't exist, look in yourtheme/slug.php and yourtheme/ssa/slug.php. + if ( ! $template && ! SSA_TEMPLATE_DEBUG_MODE ) { + $template = locate_template( array( "{$slug}.php", $this->plugin->template_subdirectory() . "{$slug}.php" ) ); + } + + // Allow 3rd party plugins to filter template file from their plugin. + $template = apply_filters( 'ssa/templates/get_template_part', $template, $slug, $name ); + + if ( $template ) { + load_template( $template, false ); + } + + $output = ob_get_clean(); + if ( !empty( $echo ) ) { + echo $output; + } + + return $output; + } + + /** + * Get other templates passing attributes and including the file. + * + * @access public + * @param string $template_name Template name. + * @param array $args Arguments. (default: array). + * @param string $template_path Template path. (default: ''). + * @param string $default_path Default path. (default: ''). + * @param boolean $echo Should echo $output to screen. (default: false). + * + * @return string + */ + function get_template( $template_name, $args = array(), $template_path = '', $default_path = '', $echo = false ) { + ob_start(); + + if ( ! empty( $args ) && is_array( $args ) ) { + extract( $args ); // @codingStandardsIgnoreLine + } + + $located = $this->locate_template( $template_name, $template_path, $default_path ); + + if ( ! file_exists( $located ) ) { + return; + } + + // Allow 3rd party plugin filter template file from their plugin. + $located = apply_filters( 'ssa/templates/get_template', $located, $template_name, $args, $template_path, $default_path ); + + do_action( 'ssa_before_template_part', $template_name, $template_path, $located, $args ); + + include $located; + + do_action( 'ssa_after_template_part', $template_name, $template_path, $located, $args ); + + $output = ob_get_clean(); + if ( !empty( $echo ) ) { + echo $output; + } + + return $output; + } + + public function get_template_rendered( $template, $template_vars = array() ) { + $template_string = $this->get_template( $template ); + $template_vars = $this->get_template_vars( $template, $template_vars ); + if ( empty( $template_string ) ) { + return false; + } + + $rendered_template_string = $this->render_template_string( $template_string, $template_vars ); + + return $rendered_template_string; + } + + + /** + * Like get_template, but returns the HTML instead of outputting. + * + * @see get_template_html + * @since 2.5.0 + * @param string $template_name Template name. + * @param array $args Arguments. (default: array). + * @param string $template_path Template path. (default: ''). + * @param string $default_path Default path. (default: ''). + * + * @return string + */ + function get_template_html( $template_name, $args = array(), $template_path = '', $default_path = '' ) { + ob_start(); + $this->get_template( $template_name, $args, $template_path, $default_path ); + return ob_get_clean(); + } + /** + * Locate a template and return the path for inclusion. + * + * This is the load order: + * + * yourtheme/$template_path/$template_name + * yourtheme/$template_name + * $default_path/$template_name + * + * @access public + * @param string $template_name Template name. + * @param string $template_path Template path. (default: ''). + * @param string $default_path Default path. (default: ''). + * @return string + */ + function locate_template( $template_name, $template_path = '', $default_path = '' ) { + if ( ! $template_path ) { + $template_path = $this->plugin->template_subdirectory(); + } + + if ( ! $default_path ) { + $default_path = $this->plugin->dir() . 'templates/'; + } + + // Look within passed path within the theme - this is priority. + $template = locate_template( + array( + trailingslashit( $template_path ) . $template_name, + $template_name, + ) + ); + + // Get default template/. + if ( ! $template || SSA_TEMPLATE_DEBUG_MODE ) { + $template = $default_path . $template_name; + } + + // Return what we found. + return apply_filters( 'ssa/templates/locate_template', $template, $template_name, $template_path ); + } + + /** + * Locate a template and return the path for inclusion. + * + * This is the load order: + * + * yourtheme/$template_path/$template_name + * yourtheme/$template_name + * $default_path/$template_name + * + * @access public + * @param string $template_name Template name. + * @param string $template_path Template path. (default: ''). + * @param string $default_path Default path. (default: ''). + * @return string + */ + function locate_template_url( $template_name, $template_path = '', $default_path = '' ) { + $template = $this->locate_template( $template_name, $template_path, $default_path ); + + if ( empty( $template ) ) { + return; + } + + if ( $themes_pos = strpos( $template, 'themes/' ) ) { + return content_url( substr( $template, $themes_pos ) ); + } + + if ( $plugins_pos = strpos( $template, 'plugins/' ) ) { + return content_url( substr( $template, $plugins_pos ) ); + } + + return false; + } + + + public function cleanup_variables_in_string( $string ) { + $string = $this->strip_mustache_content($string); + + $string = str_replace( + array( '{{', '{{ ', '}}', ' }}', '{%', '{% ', '%}', ' %}', "\n }}", "\n}}" ), + array( '{{ ', '{{ ', ' }}', ' }}', '{% ', '{% ', ' %}', ' %}', ' }}', '}}' ), + $string + ); + + return $string; + } + + /** + * Cleans HTML tags within mustache and template tags in the provided text. + * + * This function processes the input text to remove any HTML entities or elements + * inside mustache tags ({{ }}) and template tags ({% %}). It ensures that the content + * within these tags is stripped of any HTML, leaving only the plain text or function calls. + * + * @param string $text The input text containing mustache and template tags. + * @return string The cleaned text with HTML tags removed from mustache and template tags. + */ + public function strip_mustache_content($text) { + $mustachePattern = '/{{\s*([^}]+)\s*}}/'; + $mustacheCallback = function ($matches) { + return '{{' . strip_tags(trim($matches[1])) . '}}'; + }; + $text = preg_replace_callback($mustachePattern, $mustacheCallback, $text); + + $templatePattern = '/{%\s*([^}]+)\s*%}/'; + $templateCallback = function ($matches) { + return '{%' . strip_tags(trim($matches[1])) . '%}'; + }; + $text = preg_replace_callback($templatePattern, $templateCallback, $text); + + return $text; + } + + /** + * Having the user_id check if it's a staff member and return its display name + * Otherwise use get_userdata wp function to get the user name from the users table + * + * @param string $user_id + * @return string + */ + public function get_user_name_from_user_id( $user_id = null ){ + if( empty( $user_id ) ) { + return __( 'A logged out user', 'simply-schedule-appointments' ); + } + + // Check if who canceled is a staff member + if( class_exists( 'SSA_Staff_Model' ) ) { + $staff_id = $this->plugin->staff_model->get_staff_id_for_user_id( $user_id ); + + if( ! empty( $staff_id ) ) { + $staff = new SSA_Staff_Object( $staff_id ); + return $staff->display_name; + } + } + + // Try get the display name from the wp users table or the user_login(username) + $userdata = get_userdata( $user_id ); + + if( ! empty( $userdata ) && ! empty( $userdata->display_name ) ) { + return $userdata->display_name; + } + + if( ! empty( $userdata ) && ! empty( $userdata->user_login ) ) { + return $userdata->user_login; + } + + return __( 'A logged out user', 'simply-schedule-appointments' ); // Just in case but we shouldn't really reach this far + + } + + /** + * Memberpress Integration + * + * @param int $id + * @return string|null + */ + public function get_mepr_membership_title( $id ) { + if ( empty( $id ) || ! class_exists( 'SSA_Mepr_Membership' ) || ! class_exists( 'MeprProduct' ) ) { + return; + } + $membership = new SSA_Mepr_Membership( $id ); + if ( empty( $membership->exists() ) ) { + return; + } + return $membership->get_title(); + } + + +function ssa_get_tec_vars( $vars, $template ) { + + if ( empty( $vars['booking_post_id'] ) ) { + return $vars; + } + + if ( ! function_exists( 'tribe_get_venue_object' ) ) { + return $vars; + + } + + if ( ! function_exists( 'tribe_get_organizer_object' ) ) { + return $vars; + + } + + $event_id = $vars['booking_post_id']; + + // Add Venue Information + + $venue_object = tribe_get_venue_object($event_id); + $venue_id = get_post_meta($event_id, '_EventVenueID', true); + + if (!empty($venue_id)) { + $venue_post = get_post($venue_id); + $venue_information = array( + 'name' => !empty( $venue_post->post_title ) ? $venue_post->post_title : null, + 'address' => !empty( $venue_object->address ) ? $venue_object->address : null, + 'city' => !empty( $venue_object->city ) ? $venue_object->city : null, + 'state' => !empty( $venue_object->state ) ? $venue_object->state : null, + 'province' => !empty( $venue_object->province ) ? $venue_object->province : null, + 'zip' => !empty( $venue_object->zip ) ? $venue_object->zip : null, + ); + + $vars['TEC']['venue'] = $venue_information; + + } + + // Add Organizer Information + + $organizer_object = tribe_get_organizer_object($event_id); + $organizer_id = get_post_meta($event_id, '_EventOrganizerID', true); + + if (!empty($organizer_id)) { + + $organizer_post = get_post($organizer_id); + $organizer_information = array( + 'name' => !empty( $organizer_post->post_title ) ? $organizer_post->post_title : null, + 'phone' => !empty( $organizer_object->phone ) ? $organizer_object->phone : null, + 'email' => !empty( $organizer_object->email ) ? $organizer_object->email : null, + 'website' => !empty( $organizer_object->website ) ? $organizer_object->website : null, + ); + + $vars['TEC']['organizer'] = $organizer_information; + + } + + // Add Categories for the event + + $event_categories = get_the_terms( $event_id, 'tribe_events_cat' ); + + if ( ! empty( $event_categories ) && ! is_wp_error( $event_categories ) ) { + $tec_categories= []; + foreach ( $event_categories as $index => $category ) { + $tec_categories[$index] = $category->name; + } + $vars['TEC']['categories'] = $tec_categories; + } + + return $vars; + +} +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-translation-settings.php b/wp-content/plugins/simply-schedule-appointments/includes/class-translation-settings.php new file mode 100644 index 0000000..e4b17b3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-translation-settings.php @@ -0,0 +1,72 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 2.6.7 + */ + public function hooks() { + + } + + protected $slug = 'translation'; + + public function get_schema() { + if ( !empty( $this->schema ) ) { + return $this->schema; + } + + $this->schema = array( + 'version' => '2019-10-15', + 'fields' => array( + 'enabled' => array( + 'name' => 'enabled', + 'default_value' => true, + ), + + 'locales' => array( + 'name' => 'locales', + 'default_value' => array(), + ), + ), + + + ); + + return $this->schema; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-translation.php b/wp-content/plugins/simply-schedule-appointments/includes/class-translation.php new file mode 100644 index 0000000..f53b62b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-translation.php @@ -0,0 +1,343 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 3.2.2 + */ + public function hooks() { + add_filter( 'locale', array( $this, 'filter_wp_locale' ), 100000 ); + add_action( 'rest_api_init', array( $this, 'register_fetch_locale_endpoint' ) ); + add_action( 'rest_api_init', array( $this, 'register_delete_locale_endpoint' ) ); + } + + public function set_programmatic_locale( $locale = null ){ + + $this->programmatic_locale = $locale; + + // attempt to reload SSA translation domain so that the programmatic_locale takes effect + $mo_file = WP_LANG_DIR . '/plugins/simply-schedule-appointments-' . $locale . '.mo'; + if( file_exists( $mo_file ) ){ + load_textdomain( 'simply-schedule-appointments', $mo_file ); + } + } + + + public function filter_wp_locale( $locale ) { + $lang = self::get_locale( false ); + + if ( empty( $lang ) ) { + $lang = $locale; + } + + return $lang; + } + + public static function is_rtl() { + if ( ! isset( $_GET['ssa_is_rtl'] ) ) { + return is_rtl(); + } + + $is_rtl = ( empty( $_GET['ssa_is_rtl'] ) ) ? false : true; + return $is_rtl; + } + + public static function get_locale( $return_default = true ) { + if ( ! empty( ssa()->translation->programmatic_locale ) ) { + return ssa()->translation->programmatic_locale; + } + if ( ! isset( $_GET['ssa_locale'] ) ) { + if ( empty( $return_default ) ) { + return; // prevent infinite loop + } + + $locale = get_locale(); + + if ( self::is_rtl() && ! in_array( $locale, self::$supported_rtl_locales ) ) { + return 'en_US'; + } + + if ( empty( $locale ) ) { + $locale = 'en_US'; + } + + return $locale; + } + + $lang = ( empty( $_GET['ssa_locale'] ) ) ? 'en_US' : esc_attr( $_GET['ssa_locale'] ); + + return $lang; + } + + public function register_fetch_locale_endpoint( $request ) { + $namespace = 'ssa/v1'; + $base = 'translation'; + + register_rest_route( $namespace, '/' . $base . '/fetch', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'fetch_locale_endpoint' ), + 'permission_callback' => array( 'TD_API_Model', 'nonce_permissions_check' ), + 'args' => array( + 'context' => array( + 'default' => 'view', + ), + ), + ), + ) ); + } + + public function fetch_locale_endpoint( $request ) { + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return new WP_REST_Response( "Forbidden | Permission error", 403 ); + }; + + $params = $request->get_params(); + + if ( empty( $params['locale'] ) ) { + $response = array( + 'response_code' => 422, + 'error' => __( 'Missing locale', 'simply-schedule-appointments' ), + ); + + return new WP_REST_Response( $response, 422 ); + } + + $translation_settings = $this->plugin->translation_settings->get(); + $locale = esc_attr( $params['locale'] ); + + if ( empty( $translation_settings['locales'] ) ) { + $translation_settings['locales'] = array(); + } + if ( empty( $translation_settings['locales'][$locale] ) ) { + $translation_settings['locales'][$locale] = array(); + } + + $errors = $this->download_translation( $locale ); + if ( empty( $errors ) ) { + $translation_settings['locales'][$locale]['last_fetched_date'] = gmdate( 'Y-m-d H:i:s' ); + $translation_url = $this->get_source_path( $this->project_slug, $locale, '' ); + $translation_settings['locales'][$locale]['translation_url'] = $translation_url; + $this->plugin->translation_settings->update( $translation_settings ); + } + + $data = array( 'locale' => $locale ); + $response = array( + 'response_code' => 200, + 'error' => $errors, + 'data' => $data, + ); + + return new WP_REST_Response( $response, 200 ); + } + + public function register_delete_locale_endpoint( $request ) { + $namespace = 'ssa/v1'; + $base = 'translation'; + + register_rest_route( $namespace, '/' . $base . '/delete_locale', array( + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'delete_locale_endpoint' ), + 'permission_callback' => array( 'TD_API_Model', 'nonce_permissions_check' ), + 'args' => array( + 'context' => array( + 'default' => 'view', + ), + ), + ), + ) ); + } + + public function delete_locale_endpoint( $request=null ) { + + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + return new WP_REST_Response( "Forbidden | Permission error", 403 ); + }; + + if ( !empty($request) ){ + $params = $request->get_params(); + + if ( !empty($params['locale'] )) { + + $locale = $params['locale']; + + $translation_settings = $this->plugin->translation_settings->get(); + $stored_locales = $translation_settings['locales']; + unset($stored_locales[$locale]); + $translation_settings['locales'] = $stored_locales; + $this->plugin->translation_settings->update( $translation_settings ); + + $this->delete_locale_files( $locale ); + + return new WP_REST_Response( "Success", 200 ); + } + else { + return new WP_REST_Response( 'Missing locale', 422 ); + } + } + else { + return new WP_REST_Response( 'Missing locale', 422 ); + } + } + + public function delete_locale_files( $locale=null, $types=array('po', 'mo') ) { + + if (empty($locale)){return;} + + $folder_path = WP_LANG_DIR . '/plugins'; + $folder_path = str_replace('\\', '/', $folder_path); + + foreach( $types as $type ) { + $file_path = $folder_path . "/simply-schedule-appointments-". $locale . "." . $type; + wp_delete_file_from_directory($file_path, $folder_path); + } + } + + public function download_translation( $locale ) { + $errors = array(); + foreach ( array( 'po', 'mo' ) as $type ){ + $import = $this->import( $this->project_slug, $locale, $type ); + + if( is_wp_error( $import ) ) { + $errors[] = array( + 'status' => 'error', + 'content' => $import->get_error_message() + ); + } + } + + return $errors; + } + + /** + * Import translation file. + * + * @param string $project File project + * @param string $locale File locale + * @param string $format File format + * @return null|WP_Error File path to get source. + */ + function import( $project_slug, $locale = '', $format = 'mo', $variant = 'default' ) { + if ( empty( $locale ) ) { + $locale = get_user_locale(); + } + + preg_match("/wp-(.*)/", $project_slug, $project_path); + + $source = $this->get_source_path( $project_slug, $locale, $format, 'dev', $variant ); + $target = sprintf( + '%s-%s.%s', + $project_path[1], + $locale, + $format + ); + $response = wp_remote_get( $source ); + + if ( !is_array( $response ) + || $response['headers']['content-type'] !== 'application/octet-stream' ) { + return new WP_Error( 'ssa-translation-source-not-found', sprintf( + __( 'Cannot get source file: %s', 'simply-schedule-appointments' ), + '' . esc_html( $source ) . '' + ) ); + } + else { + if ( ! function_exists( 'request_filesystem_credentials' ) ) { + require_once( ABSPATH . 'wp-admin/includes/file.php' ); + } + + // $creds = request_filesystem_credentials( '' ); + if ( ! WP_Filesystem() ) { + request_filesystem_credentials($url, '', true, false, null); + } + + global $wp_filesystem; + if( ! $wp_filesystem->is_dir( WP_LANG_DIR ) ) { + $wp_filesystem->mkdir( WP_LANG_DIR ); + } + if( ! $wp_filesystem->is_dir( WP_LANG_DIR . '/plugins' ) ) { + $wp_filesystem->mkdir( WP_LANG_DIR . '/plugins' ); + } + + $wpfs_response = $wp_filesystem->put_contents( + WP_LANG_DIR . '/' . $target, + $response['body'], + FS_CHMOD_FILE // predefined mode settings for WP files + ); + } + } + + /** + * Generate a file path to get translation file. + * + * @param string $project File project + * @param string $locale File locale + * @param string $type File type + * @param string $format File format + * @return $path File path to get source. + */ + function get_source_path( $project, $locale, $format = 'mo', $type = 'dev', $variant = 'default' ) { + $locale = SSA_Locales::by_field( 'wp_locale', $locale ); + + if ( isset( $locale->variant ) && ! empty( $locale->variant ) ) { + $variant = $locale->variant; + $locale->slug = str_replace( '_'.$variant, '', $locale->slug ); + } + + $path = sprintf( 'https://translate.wordpress.org/projects/%1$s/%2$s/%3$s/%4$s', + $project, + $type, + $locale->slug, + $variant + ); + + if( !empty( $format ) ){ + $path = $path . "/export-translations/?filters[status]=current_or_waiting_or_fuzzy_or_untranslated&format=$format"; + } + + $path = esc_url_raw( $path ); + return $path; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-twig-extension.php b/wp-content/plugins/simply-schedule-appointments/includes/class-twig-extension.php new file mode 100644 index 0000000..c30ca35 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-twig-extension.php @@ -0,0 +1,142 @@ + true) ), + new Twig\TwigFilter('internationalize', array( $this, 'internationalize_filter' ), array('needs_environment' => true) ), + new Twig\TwigFilter('link', array( $this, 'link' ), array('needs_environment' => true) ), + ]; + } + + public function date_format_filter( Twig\Environment $env, $date, $format = null, $timezone = null, $locale = null ) { + + if ( empty( $format ) ) { + // Let's use a smart default + $format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; + } else if ( $format === 'F d, Y g:ia (T)' || $format === 'F d Y, g:i a' ) { + // and localize the default string we use in our SSA template + $format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; + } + + if(! empty( $locale ) ) { + // should it be handled here in the date filter? or in a different filter? + ssa()->translation->set_programmatic_locale( $locale ); + } + + // attempt to keep the syntax compatible with older versions of twig - may be loaded by other plugins + if ( version_compare( \Twig\Environment::VERSION, '3.9', '<' ) ) { + $formatted_date = twig_date_converter( $env, $date, $timezone )->format($format); + } else { + $formatted_date = $env->getExtension( \Twig\Extension\CoreExtension::class )->convertDate($date, $timezone)->format($format); + } + + + $formatted_date = SSA_Utils::translate_formatted_date( $formatted_date ); + + if(! empty( $locale ) ) { + ssa()->translation->set_programmatic_locale(null); + } + + return $formatted_date; + + // TODO: refactor below into a separate twig function that uses strftime formatting + + // $timezone_string = false; + // if ( is_string( $timezone ) ) { + // $timezone_string = $timezone; + // } else if ( is_a( $timezone, 'DateTimeZone' ) ) { + // $timezone_string = $timezone->getName(); + // } + // $wp_locale = get_locale(); + // if ( ! empty( $format ) && $wp_locale != 'en_US' ) { + // $formatted_date = twig_date_format_filter( $env, $date, $format, $timezone ); + + // if ( ! empty( $timezone_string ) ) { + // $server_locale = setlocale( LC_ALL, 0 ); + // $new_locale = setlocale( LC_ALL, $wp_locale ); + // date_default_timezone_set( $timezone_string ); + + // $strftime_format = $this->get_strftime_format_for_date_format( $format ); + // $formatted_date = strftime( $strftime_format, strtotime( $date ) ); + // date_default_timezone_set( 'UTC' ); + // setlocale( LC_ALL, $server_locale ); + // } else { + // $formatted_date = date_i18n( $format, strtotime( $date ) ); + // } + + // } + + } + + public function internationalize_filter( Twig\Environment $env, $string, $locale = null) { + if(! empty( $locale ) ) { + ssa()->translation->set_programmatic_locale( $locale ); + } + + $translated_string = __( $string, 'simply-schedule-appointments' ); + + if(! empty( $locale ) ) { + ssa()->translation->set_programmatic_locale( null ); + } + + return $translated_string; + } + + public function link( Twig\Environment $env, $string, $label ) { + return ''.$label.''; + } + + /** + * Convert a date format to a strftime format + * + * Timezone conversion is done for unix. Windows users must exchange %z and %Z. + * + * Unsupported date formats : S, n, t, L, B, G, u, e, I, P, Z, c, r + * Unsupported strftime formats : %U, %W, %C, %g, %r, %R, %T, %X, %c, %D, %F, %x + * + * @param string $date_format a date format + * @return string + */ + public static function get_strftime_format_for_date_format( $date_format ) { + + $caracs = array( + // Day - no strf eq : S + 'd' => '%d', 'D' => '%a', 'j' => '%e', 'l' => '%A', 'N' => '%u', 'w' => '%w', 'z' => '%j', + + // Week - no date eq : %U, %W + 'W' => '%V', + + // Month - no strf eq : n, t + 'F' => '%B', 'm' => '%m', 'M' => '%b', + + // Year - no strf eq : L; no date eq : %C, %g + 'o' => '%G', 'Y' => '%Y', 'y' => '%y', + + // Time - no strf eq : B, G, u; no date eq : %r, %R, %T, %X + 'a' => '%P', 'A' => '%p', 'g' => '%l', 'h' => '%I', 'H' => '%H', 'i' => '%M', 's' => '%S', + // Time Pseudo Translation + 'G' => '%H', // German uses G, %H is close + + // Timezone - no strf eq : e, I, P, Z + 'O' => '%z', 'T' => '%Z', + + // Full Date / Time - no strf eq : c, r; no date eq : %c, %D, %F, %x + 'U' => '%s' + + ); + + return strtr( ( string ) $date_format, $caracs ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-upgrade.php b/wp-content/plugins/simply-schedule-appointments/includes/class-upgrade.php new file mode 100644 index 0000000..6c54524 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-upgrade.php @@ -0,0 +1,1395 @@ + "email" + '1.5.1', // fix customer_information vs custom_customer_information capitalization + '2.6.9_12', // flush permalinks + '2.6.9_13', // Whitelist for Disable REST API + '2.7.1', // Notifications + '2.9.2', // SMS phone + '3.1.0', // Appointment.date_timezone -> Appointment.customer_timezone + '3.5.0', // Appointment.AppointmentType.instructions -> instructions + '4.2.2', // Team Member Role + '4.4.5', // Fix staff_capacity=100000 -> staff_capacity=1 + '5.4.4', // Run Google Calendar sync + '5.4.6', // Cleanup Calendar events templates + '6.1.5', // Populate the new appt type labels table + '6.4.3', // Maybe fix appt type label id equal to zero + '6.4.5', // Fix missing appointment types + '6.4.9', // Handle upgrade to new class-error-notices logic + '6.5.1', // Add cancelation_note to the admin and customers canceled notifications + '6.5.4', // Enforce encrypting stripe keys and secrets + '6.5.20', // Remove public_edit_url from event_type_group_shared type + '6.6.19', // Handle displaying new booking app banners + '6.6.21', // Remove public_edit_url from event_type_group_admin type + '6.7.13', // Disable old booking app if enabled with resources enabled at the same time + '6.7.45', // Disable old booking app for all users + '6.8.1', // Update Google Calendar Quick Connect mode from saved dev settings + '6.8.6', // Notifications: update notification column schema in appointment types table + ); + + /** + * Parent plugin class. + * + * @since 0.0.3 + * + * @var Simply_Schedule_Appointments + */ + protected $plugin = null; + + /** + * Constructor. + * + * @since 0.0.3 + * + * @param Simply_Schedule_Appointments $plugin Main plugin object. + */ + public function __construct( $plugin ) { + $this->plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + add_action( 'init', array( $this, 'migrations' ), 20 ); + add_action( 'init', array( $this, 'check_version_change' ), 20 ); + add_action( 'ssa_upgrade_free_to_paid', array( $this, 'migrate_free_to_paid_customer_info' ), 30 ); + add_action( 'ssa_downgrade_paid_to_free', array( $this, 'migrate_paid_to_free_customer_info' ), 30 ); + } + + public function record_version_change( $current_version, $stored_version ) { + $ssa_version_changes = get_option('ssa_version_changes', []); + if( ! isset( $ssa_version_changes[ $stored_version . '--' . $current_version ] ) ) { + $utc_timezone = new DateTimeZone( 'UTC' ); + $utc_datetime = new DateTimeImmutable( 'now', $utc_timezone ); + + $record = [ + 'home_url' => home_url(), + 'wordpress_version' => get_bloginfo('version'), + 'php_version' => phpversion(), + 'current_version' => $current_version, + 'previous_version' => $stored_version, + 'timestamp' => $utc_datetime + ]; + $ssa_version_changes[ $stored_version . '--' .$current_version ] = $record; + update_option('ssa_version_changes', $ssa_version_changes); + } + } + + /** + * Helper function to check version changes - when the user upgrades or downgrades - and to run migration logic when necessary. + * + * @since 4.4.9 + * + * @return void + */ + public function check_version_change() { + $current_version = $this->plugin->get_current_version(); + $stored_version = get_option( 'ssa_plugin_version' ); + $current_version_num = $this->plugin->get_current_edition(); + + // Reset/Disable beta option + if ( $current_version_num > 1 && ! empty( $stored_version ) ) { + + if ( $current_version !== $stored_version ) { + $this->reset_beta_option(); + $this->record_version_change( $current_version, $stored_version ); + } + } + + + // If no stored version, might be the either a fresh install or an existing install with an old version of the plugin. + // On this case, we still want to run the logic to make sure that all fields are properly updated. + if ( ! $stored_version ) { + // if no stored version, and current version is "Free", run the logic to update fields to the free version. + if ( 1 === $current_version_num ) { + do_action( 'ssa_downgrade_paid_to_free' ); + } + + // if no stored version, and current version is "Paid" run the logic to update fields to paid version. + if ( 1 < $current_version_num ) { + do_action( 'ssa_upgrade_free_to_paid' ); + } + + $this->plugin->store_current_version(); + return; + } + + // Ok, we do have a version number. On this case, we need to verify if it's an upgrade or downgrade, and run the necessary conversion. + $stored_version_num = mb_substr( $stored_version, 0, 1 ); + + // if stored version was "Free" and the user upgraded to a paid version, run the logic to update fields again. + if ( '1' === $stored_version_num && $current_version_num > $stored_version_num ) { + do_action( 'ssa_upgrade_free_to_paid' ); + } + + // if stored version was "Paid" and the user downgraded to the free version, run the logic to update fields again. + if ( '1' < $stored_version_num && 1 === $current_version_num ) { + do_action( 'ssa_downgrade_paid_to_free' ); + } + + $this->plugin->store_current_version(); + } + + /** + * Helper logic to migrate customer info from free to paid edition. + * + * @since 4.4.9 + * + * @return void + */ + public function migrate_free_to_paid_customer_info() { + + $field_type_conversion_map = array( + 'Name' => 'single-text', + 'Email' => 'single-text', + 'Phone' => 'phone', + 'Address' => 'single-text', + 'City' => 'single-text', + 'State' => 'single-text', + 'Zip' => 'single-text', + 'Notes' => 'multi-text', + ); + + /* Migrate Appointment Types */ + $appointment_types = $this->plugin->appointment_type_model->query( + array( + 'number' => -1, + ) + ); + + foreach ( $appointment_types as $appointment_type_key => $appointment_type ) { + // if custom_customer_information is not empty, then we can't populate it again, since it might lose data. + if ( ! empty( $appointment_type['custom_customer_information'] ) ) { + continue; + } + + if ( ! empty( $appointment_type['customer_information']['0']['field'] ) ) { + $appointment_types[ $appointment_type_key ]['custom_customer_information'] = array(); + foreach ( $appointment_type['customer_information'] as $field_key => $field ) { + $field = $appointment_type['customer_information'][ $field_key ]; + + if ( ! $field['display'] ) { + continue; + } + + $field_array = $field; + + // include field type. + $type = isset( $field_type_conversion_map[ $field['field'] ] ) ? $field_type_conversion_map[ $field['field'] ] : 'single-text'; + $field_array['type'] = $type; + $field_array['values'] = array(); + $appointment_types[ $appointment_type_key ]['custom_customer_information'][] = $field_array; + } + } + + // update appointment type. + $this->plugin->appointment_type_model->update( $appointment_types[ $appointment_type_key ]['id'], $appointment_types[ $appointment_type_key ] ); + } + + /* Migrate Appointments */ + $appointments = $this->plugin->appointment_model->query( + array( + 'number' => -1, + ) + ); + + // clear appointment types cache. + $this->plugin->appointment_type_model->invalidate_appointment_type_cache(); + } + + /** + * Helper logic to migrate customer info from paid to free edition. + * + * @since 4.4.9 + * + * @return void + */ + public function migrate_paid_to_free_customer_info() { + + $field_conversion_map = array( + 'Name' => array( + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'icon' => 'face', + ), + 'Email' => array( + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'icon' => 'email', + ), + 'Phone' => array( + 'field' => 'Phone', + 'display' => true, + 'required' => false, + 'icon' => 'phone', + ), + 'Address' => array( + 'field' => 'Address', + 'display' => false, + 'required' => false, + 'icon' => 'place', + ), + 'City' => array( + 'field' => 'City', + 'display' => false, + 'required' => false, + 'icon' => 'place', + ), + 'State' => array( + 'field' => 'State', + 'display' => false, + 'required' => false, + 'icon' => 'place', + ), + 'Zip' => array( + 'field' => 'Zip', + 'display' => false, + 'required' => false, + 'icon' => 'place', + ), + 'Notes' => array( + 'field' => 'Notes', + 'display' => false, + 'required' => false, + 'icon' => 'assignment', + ), + ); + + /* Migrate Appointment Types */ + $appointment_types = $this->plugin->appointment_type_model->query( + array( + 'number' => -1, + ) + ); + + foreach ( $appointment_types as $appointment_type_key => $appointment_type ) { + // if customer_information is not empty, then we can't populate it again, since it might lose data. + if ( ! empty( $appointment_type['customer_information'] ) ) { + continue; + } + + $appointment_types[ $appointment_type_key ]['customer_information'] = array(); + if ( ! empty( $appointment_type['custom_customer_information']['0']['field'] ) ) { + $schema = $appointment_type['custom_customer_information']['0']; + foreach ( $field_conversion_map as $field_key => $field_value ) { + // check if we have this field set before so we can verify if it's set to display / require. + $existing_field_key = array_search( $field_value, array_column( $appointment_type['custom_customer_information'], 'field' ), true ); + if ( false !== $existing_field_key ) { + $field = $appointment_type['custom_customer_information'][ $existing_field_key ]; + } else { + $field = $field_conversion_map[ $field_key ]; + } + + // remove field type. + if ( isset( $field['type'] ) ) { + unset( $field['type'] ); + } + + $appointment_types[ $appointment_type_key ]['customer_information'][] = $field; + } + } + + // update appointment type. + $this->plugin->appointment_type_model->update( $appointment_types[ $appointment_type_key ]['id'], $appointment_types[ $appointment_type_key ] ); + } + + // clear appointment types cache. + $this->plugin->appointment_type_model->invalidate_appointment_type_cache(); + } + + public function get_last_version_seen() { + $db_versions = get_option( 'ssa_versions', json_encode( array() ) ); + $db_versions = json_decode( $db_versions, true ); + $db_version_keys = array_keys( $db_versions ); + $last_changed_date = array_pop( $db_version_keys ); + if ( $last_changed_date === null ) { + // First time we're seeing SSA installed + $this->last_version_seen = '0.0.0'; + } else { + $this->last_version_seen = $db_versions[$last_changed_date]; + } + + return $this->last_version_seen; + } + + public function record_version( $version ) { + $db_versions = get_option( 'ssa_versions', json_encode( array() ) ); + $db_versions = json_decode( $db_versions, true ); + + $db_versions[gmdate('Y-m-d H:i:s')] = $version; + $this->last_version_seen = $version; + return update_option( 'ssa_versions', json_encode($db_versions) ); + } + + public function migrations() { + $this->last_version_seen = $this->get_last_version_seen(); + foreach ( $this->versions_requiring_upgrade as $version ) { + if ( version_compare($this->last_version_seen, $version,'>=' ) ) { + continue; + } + + $method_name = 'migrate_to_version_'.str_replace('.', '_', $version); + $this->$method_name( $this->last_version_seen ); + } + } + + public function migrate_to_version_1_2_3( $from_version ) { + if ( $from_version === '0.0.0' ) { + return; // we don't need to migrate fresh installs + } + + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + + if ( empty( $appointment_types['0']['id'] ) ) { + $this->record_version( '1.2.3' ); + return; + } + + foreach ($appointment_types as $appointment_type_key => $appointment_type) { + if ( empty( $appointment_type['custom_customer_information']['0']['field'] ) ) { + continue; + } + + foreach ($appointment_type['custom_customer_information'] as $field_key => $field ) { + if ( $field['field'] != 'Email address' ) { + continue; + } + + $appointment_types[$appointment_type_key]['custom_customer_information'][$field_key]['field'] = 'Email'; + } + + $this->plugin->appointment_type_model->update( $appointment_types[$appointment_type_key]['id'], $appointment_types[$appointment_type_key] ); + } + + $this->record_version( '1.2.3' ); + } + + + public function migrate_to_version_1_5_1( $from_version ) { + if ( $from_version === '0.0.0' ) { + return; // we don't need to migrate fresh installs + } + + $field_name_conversion_map = array( + 'name' => 'Name', + 'email' => 'Email', + 'phone_number' => 'Phone', + 'address' => 'Address', + 'city' => 'City', + 'state' => 'State', + 'zip' => 'Zip', + 'notes' => 'Notes', + ); + + /* Migrate Appointment Types */ + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + foreach ($appointment_types as $appointment_type_key => $appointment_type) { + if ( !empty( $appointment_type['custom_customer_information']['0']['field'] ) ) { + foreach ($appointment_type['custom_customer_information'] as $field_key => $field ) { + if ( empty( $field_name_conversion_map[$field['field']] ) ) { + continue; + } + + $appointment_types[$appointment_type_key]['custom_customer_information'][$field_key]['field'] = $field_name_conversion_map[$field['field']]; + } + } + + if ( !empty( $appointment_type['customer_information']['0']['field'] ) ) { + foreach ($appointment_type['customer_information'] as $field_key => $field ) { + if ( empty( $field_name_conversion_map[$field['field']] ) ) { + continue; + } + + $appointment_types[$appointment_type_key]['customer_information'][$field_key]['field'] = $field_name_conversion_map[$field['field']]; + } + } + + + $this->plugin->appointment_type_model->update( $appointment_types[$appointment_type_key]['id'], $appointment_types[$appointment_type_key] ); + } + + /* Migrate Appointments */ + $appointments = $this->plugin->appointment_model->query( array( + 'number' => -1, + ) ); + foreach ($appointments as $appointment_key => $appointment) { + if ( !empty( $appointment['customer_information'] ) ) { + foreach ($appointment['customer_information'] as $field_key => $value ) { + if ( empty( $field_name_conversion_map[$field_key] ) ) { + continue; + } + + $appointments[$appointment_key]['customer_information'][$field_name_conversion_map[$field_key]] = $value; + unset( $appointments[$appointment_key]['customer_information'][$field_key] ); + } + } + + + $this->plugin->appointment_model->update( $appointments[$appointment_key]['id'], $appointments[$appointment_key] ); + } + + $this->record_version( '1.5.1' ); + } + + public function migrate_to_version_2_6_9_12( $from_version ) { + global $wp_rewrite; + $wp_rewrite->init(); + flush_rewrite_rules(); + + $this->record_version( '2.6.9_12' ); + } + + public function migrate_to_version_2_6_9_13( $from_version ) { + $DRA_route_whitelist = get_option( 'DRA_route_whitelist', array() ); + $ssa_routes_to_whitelist = array( + "/ssa/v1","/ssa/v1/settings", + "/ssa/v1/settings/(?P<id>[a-zA-Z0-9_-]+)", + "/ssa/v1/settings/schema", + "/ssa/v1/notices", + "/ssa/v1/notices/(?P<id>[a-zA-Z0-9_-]+)", + "/ssa/v1/notices/schema", + "/ssa/v1/license", + "/ssa/v1/license/schema", + "/ssa/v1/google_calendars", + "/ssa/v1/google_calendars/disconnect", + "/ssa/v1/google_calendars/authorize_url", + "/ssa/v1/mailchimp", + "/ssa/v1/mailchimp/disconnect", + "/ssa/v1/mailchimp/authorize", + "/ssa/v1/mailchimp/deauthorize", + "/ssa/v1/mailchimp/lists", + "/ssa/v1/mailchimp/subscribe", + "/ssa/v1/support_status", + "/ssa/v1/support_ticket", + "/oembed/1.0", + "/ssa/v1/appointments", + "/ssa/v1/appointments/bulk", + "/ssa/v1/appointments/(?P<id>[\\d]+)", + "/ssa/v1/appointments/(?P<id>[\\d]+)/ics", + "/ssa/v1/appointment_types", + "/ssa/v1/appointment_types/bulk", + "/ssa/v1/appointment_types/(?P<id>[\\d]+)", + "/ssa/v1/appointment_types/(?P<id>[\\d]+)/availability", + "/ssa/v1/availability", + "/ssa/v1/availability/bulk", + "/ssa/v1/availability/(?P<id>[\\d]+)", + "/ssa/v1/async", + "/ssa/v1/payments", + "/ssa/v1/payments/bulk", + "/ssa/v1/payments/(?P<id>[\\d]+)" + ); + if ( empty( $DRA_route_whitelist ) ) { + $DRA_route_whitelist = $ssa_routes_to_whitelist; + } else { + foreach ( $ssa_routes_to_whitelist as $key => $route ) { + if ( ! in_array( $route, $DRA_route_whitelist ) ) { + $DRA_route_whitelist[] = $route; + } + } + } + + update_option( 'DRA_route_whitelist', $DRA_route_whitelist ); + + $this->record_version( '2.6.9_13' ); + } + + public function migrate_to_version_2_7_1( $from_version ) { + $notifications_settings = $this->plugin->notifications_settings->get(); + + $should_enable_admin_notification_for_all_appointment_types = true; + $should_enable_customer_notification_for_all_appointment_types = true; + + $appointment_type_ids_with_admin_notification = array(); + $appointment_type_ids_with_customer_notification = array(); + + $appointment_types = $this->plugin->appointment_type_model->query(); + if ( ! empty( $appointment_types ) ) { + foreach ( $appointment_types as $key => $appointment_type ) { + if ( empty( $appointment_type['notifications'] ) ) { + $appointment_type_ids_with_admin_notification[] = $appointment_type['id']; + $appointment_type_ids_with_customer_notification[] = $appointment_type['id']; + + continue; + } + + foreach ($appointment_type['notifications'] as $notification_key => $notification ) { + if ( empty( $notification['field'] ) ) { + continue; + } + if ( $notification['field'] === 'admin' ) { + if ( empty( $notification['send'] ) ) { + $should_enable_admin_notification_for_all_appointment_types = false; + } else { + $appointment_type_ids_with_admin_notification[] = $appointment_type['id']; + } + } elseif ( $notification['field'] === 'customer' ) { + if ( empty( $notification['send'] ) ) { + $should_enable_customer_notification_for_all_appointment_types = false; + } else { + $appointment_type_ids_with_customer_notification[] = $appointment_type['id']; + } + } + } + } + } + + + $id = time(); + $booked_admin_notification = array( + 'appointment_types' => ( $should_enable_admin_notification_for_all_appointment_types ) ? array() : $appointment_type_ids_with_admin_notification, + 'id' => $id, + 'schema' => '2019-04-02', + 'sent_to' => array( + '{{admin_email}}', + ), + 'title' => 'Email (Admin)', + 'subject' => '{{ Appointment.customer_information.Name }} just booked an appointment', + 'message' => wpautop( nl2br( $this->plugin->templates->get_template( 'notifications/email/text/booked-staff.php' ) ) ), + 'trigger' => 'appointment_booked', + 'type' => 'email', + 'when' => 'after', + 'duration' => 0, + ); + + $id = time() + 1; + $booked_customer_notification = array( + 'appointment_types' => ( $should_enable_customer_notification_for_all_appointment_types ) ? array() : $appointment_type_ids_with_customer_notification, + 'id' => $id, + 'schema' => '2019-04-02', + 'sent_to' => array( + '{{customer_email}}', + ), + 'subject' => 'Your appointment details', + 'message' => wpautop( nl2br( $this->plugin->templates->get_template( 'notifications/email/text/booked-customer.php' ) ) ), + 'title' => 'Email (Customer)', + 'trigger' => 'appointment_booked', + 'type' => 'email', + 'when' => 'after', + 'duration' => 0, + ); + + $id = time() + 2; + $canceled_admin_notification = array( + 'appointment_types' => ( $should_enable_admin_notification_for_all_appointment_types ) ? array() : $appointment_type_ids_with_admin_notification, + 'id' => $id, + 'schema' => '2019-04-02', + 'sent_to' => array( + '{{admin_email}}', + ), + 'title' => 'Email (Admin)', + 'subject' => '{{ Appointment.customer_information.Name }} just canceled an appointment', + 'message' => wpautop( nl2br( $this->plugin->templates->get_template( 'notifications/email/text/canceled-staff.php' ) ) ), + 'trigger' => 'appointment_canceled', + 'type' => 'email', + 'when' => 'after', + 'duration' => 0, + ); + + $id = time() + 3; + $canceled_customer_notification = array( + 'appointment_types' => ( $should_enable_customer_notification_for_all_appointment_types ) ? array() : $appointment_type_ids_with_customer_notification, + 'id' => $id, + 'schema' => '2019-04-02', + 'sent_to' => array( + '{{customer_email}}', + ), + 'subject' => 'Your appointment has been canceled', + 'message' => wpautop( nl2br( $this->plugin->templates->get_template( 'notifications/email/text/canceled-customer.php' ) ) ), + 'title' => 'Email (Customer)', + 'trigger' => 'appointment_canceled', + 'type' => 'email', + 'when' => 'after', + 'duration' => 0, + ); + + $notifications_settings['notifications'] = array( + $booked_admin_notification, + $booked_customer_notification, + $canceled_admin_notification, + $canceled_customer_notification, + ); + + $this->plugin->notifications_settings->update( $notifications_settings ); + + $this->record_version( '2.7.1' ); + } + + public function migrate_to_version_2_9_2( $from_version ) { + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + + if ( empty( $appointment_types['0']['id'] ) ) { + $this->record_version( '2.9.2' ); + return; + } + + foreach ($appointment_types as $appointment_type_key => $appointment_type) { + if ( empty( $appointment_type['custom_customer_information']['0']['field'] ) ) { + continue; + } + + foreach ($appointment_type['custom_customer_information'] as $field_key => $field ) { + if ( false === stripos( $field['field'], 'phone' ) ) { + if ( $field['type'] !== 'single-text' ) { + continue; + } + + if ( empty( $field['icon'] ) || ( $field['icon'] !== 'call' ) ) { + continue; + } + } + + $appointment_types[$appointment_type_key]['custom_customer_information'][$field_key]['type'] = 'phone'; + } + + $this->plugin->appointment_type_model->update( $appointment_types[$appointment_type_key]['id'], $appointment_types[$appointment_type_key] ); + } + + $this->record_version( '2.9.2' ); + } + + public function migrate_to_version_3_1_0( $from_version ) { + $notifications_settings = $this->plugin->notifications_settings->get(); + foreach ($notifications_settings['notifications'] as $key => $notification) { + if ( empty( $notification['sent_to'] ) || ! is_array( $notification['sent_to'] ) ) { + continue; + } + + $is_customer_notification = false; + foreach ( $notification['sent_to'] as $recipient ) { + if ( false !== strpos( $recipient, '{{customer' ) ) { + $is_customer_notification = true; + } + } + + if ( ! $is_customer_notification ) { + continue; + } + + $notifications_settings['notifications'][$key]['message'] = str_replace( 'Appointment.date_timezone', 'Appointment.customer_timezone', $notifications_settings['notifications'][$key]['message'] ); + } + + $this->plugin->notifications_settings->update( $notifications_settings ); + + + $this->record_version( '3.1.0' ); + } + + public function migrate_to_version_3_5_0( $from_version ) { + $notifications_settings = $this->plugin->notifications_settings->get(); + foreach ($notifications_settings['notifications'] as $key => $notification) { + + $notifications_settings['notifications'][$key]['message'] = str_replace( 'Appointment.AppointmentType.instructions', 'instructions', $notifications_settings['notifications'][$key]['message'] ); + } + + $this->plugin->notifications_settings->update( $notifications_settings ); + + + $this->record_version( '3.5.0' ); + } + + public function migrate_to_version_4_2_2( $from_version ) { + $this->plugin->capabilities->remove_roles(); + $this->plugin->capabilities->add_roles(); + + $this->record_version( '4.2.2' ); + } + + public function migrate_to_version_4_4_5( $from_version ) { + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + + foreach ($appointment_types as $appointment_type) { + if ( empty( $appointment_type['staff']['required'] ) ) { + continue; + } + + if ( $appointment_type['capacity_type'] == 'individual' && $appointment_type['staff_capacity'] == SSA_Constants::CAPACITY_MAX ) { + $this->plugin->appointment_type_model->update( $appointment_type['id'], array( + 'staff_capacity' => 1, + ) ); + } + } + + $this->record_version( '4.4.5' ); + } + + public function migrate_to_version_5_4_4( $from_version ) { + // Get list of booked + upcoming appointments. + $appointments = $this->plugin->appointment_model->query( + array( + 'status' => array('booked'), + 'start_date_min' => gmdate('Y-m-d H:i:s'), + 'number' => -1, + ) + ); + + if (empty($appointments)) { + $this->record_version('5.4.4'); + return; + } + + $appointments = array_values( + array_filter( + $appointments, + function ($appointment) { + return empty($appointment['google_calendar_event_id']); + } + ) + ); + // if we have a list of appointments, we need to sync them with Google Calendar. + $this->plugin->google_calendar->bulk_schedule_google_calendar_sync($appointments); + + $this->record_version( '5.4.4' ); + } + + /** + * Migrate to version 5.4.6 + * + * @param string $from_version The version we are migrating from. + */ + public function migrate_to_version_5_4_6( $from_version ) { + $settings = $this->plugin->calendar_events_settings->get(); + + $settings_map = array( + 'event_type_customer', + 'event_type_individual_shared', + 'event_type_group_shared', + 'event_type_individual_admin', + 'event_type_group_admin', + ); + + $clear_map = array( + '

' => "

\r\n", + '
' => "\r\n", + '
' => "\r\n", + '
' => "\r\n", + ); + + foreach ( $settings_map as $event_type ) { + if ( ! isset( $settings[ $event_type ] ) ) { + continue; + } + + foreach ( $settings[ $event_type ] as $key => $value ) { + if ( ! isset( $settings[ $event_type ][ $key ] ) ) { + continue; + } + + // Remove all html tags and turn paragraphs or
into line breaks. + // Required to avoid html issues with Google Calendar and other calendar apps. + $value = str_replace( array_keys( $clear_map ), array_values( $clear_map ), $value ); + $value = wp_strip_all_tags( $value ); + + $settings[ $event_type ][ $key ] = $value; + } + } + + $this->plugin->calendar_events_settings->update( $settings ); + + $this->record_version( '5.4.6' ); + } + + /** + * Reset/Disable the beta option + * Beta optin one time only; Turn off after one beta is downloaded. + * + * @return void + */ + public function reset_beta_option() { + + $developer_settings = $this->plugin->developer_settings->get(); + + if ( ! empty($developer_settings['beta_updates']) ) { + + $developer_settings['beta_updates'] = false; + $this->plugin->developer_settings->update($developer_settings); + } + + } + + + /** + * Populate the new appt type labels with the existing registered labels if any + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_1_5( $from_version ) { + + $this->migrate_appointment_type_labels(); + + $this->record_version( '6.1.5' ); + } + + /** + * Helper function to migrate to the new appt type labels setup + * Needed in case to be called when importing; check class-support-status -> import_data() + * + * @return void + */ + public function migrate_appointment_type_labels(){ + + if( ! empty( $GLOBALS["_COOKIE"]["__cypress_initial"] ) ) { + return; + } + + // First let's make sure we have a fresh appt type labels tabel for the IDs to be reset + $this->plugin->appointment_type_label_model->truncate(); + $this->plugin->appointment_type_label_model->create_table(); + + // Query all appointment types that are defined + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + ) ); + + if ( empty( $appointment_types ) ) { + + // This is either a new install or has no appt types defined -> insert one row in labels table + $default_label['name'] = __('Default', 'simply-schedule-appointments'); + $default_label['color'] = 'light-green'; + + $this->plugin->appointment_type_label_model->raw_insert( $default_label ); + + } else { + // Get all registered labels for this site + $labels = array(); + foreach( $appointment_types as $appointment_type ) { + + if ( empty( $appointment_type['label'] ) ){ + continue; + } + + if ( ! in_array( $appointment_type['label'], $labels)){ + + $labels[] = $appointment_type['label']; + } + } + + // If no labels have been detected insert the Default label into labels table + if( empty( $labels ) ){ + $default_label['name'] = __('Default', 'simply-schedule-appointments'); + $default_label['color'] = 'light-green'; + + $this->plugin->appointment_type_label_model->raw_insert( $default_label ); + } + elseif( count( $labels ) === 1 ){ + // If only one label detected then add this label with its name set to Default + $default_label['name'] = __('Default', 'simply-schedule-appointments'); + $default_label['color'] = $labels[0]; + + $this->plugin->appointment_type_label_model->raw_insert( $default_label ); + + } else { + // Insert all labels into new labels table + foreach( $labels as $label ) { + + $row['name'] = ucwords( str_replace( '-', ' ', $label ) ); + $row['color'] = $label; + + $this->plugin->appointment_type_label_model->raw_insert( $row ); + } + } + } + + // confirm at this point that we have a label at ID 1 + $existing_default_label = $this->plugin->appointment_type_label_model->query( array( + $this->plugin->appointment_type_label_model->primary_key() => 1, + ) ); + // if not then insert the default label + if ( empty( $existing_default_label ) ) { + $this->plugin->appointment_type_label_model->raw_insert( + array( + // force insert at ID 1 + $this->plugin->appointment_type_label_model->primary_key() => 1, + // the name of the label is intentionally different from the default label name above + 'name' => __('Default Label', 'simply-schedule-appointments'), + 'color' => 'light-green', + ) + ); + } + + if ( ! empty( $appointment_types ) ) { + + // Query all labels that were inserted to access their ids + $appointment_type_labels = $this->plugin->appointment_type_label_model->query( array( + 'number' => -1, + ) ); + + // Set the new label ids as foreign keys in appt types table + foreach( $appointment_types as $appointment_type ) { + + if ( empty( $appointment_type['label'] ) ) { + continue; + } + + foreach($appointment_type_labels as $label ) { + + if ( $appointment_type['label'] === $label['color'] ) { + + $this->plugin->appointment_type_model->update( $appointment_type['id'], array( + 'label_id' => $label['id'], + )); + } + } + } + } + + } + + /** + * Since an index ID of 0 in Microsoft SQL Server is allowed + * Fix Default label id not being found + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_4_3( $from_version ) { + + $this->maybe_fix_appointment_type_label_id_equal_to_zero(); + + $this->record_version( '6.4.3' ); + } + + /** + * Since an index ID of 0 in Microsoft SQL Server is allowed + * Fix Default label id not being found + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_4_5( $from_version ) { + + $this->maybe_fix_deleted_appointment_types(); + $this->record_version( '6.4.5' ); + } + + public function maybe_fix_deleted_appointment_types() { + static $has_already_run_once_during_this_php_execution = false; + if ( $has_already_run_once_during_this_php_execution ) { + return; // this prevents an infinite loop since this function queries, which calls prepare_for_response(), which in turn may call this function again + // There is still a problem if we end up here, but this prevents a fatal error + } + $has_already_run_once_during_this_php_execution = true; + + $orphaned_appointments = $this->plugin->appointment_model->query( array( + 'number' => -1, + 'append_where_sql' => " AND `appointment_type_id` NOT IN( SELECT `id` FROM " . $this->plugin->appointment_type_model->get_table_name() . " )", + ) ); + $labels = $this->plugin->appointment_type_label_model->query( array( + 'number' => 1, + ) ); + + if ( empty( $orphaned_appointments ) ) { + return; + } + + $map_missing_appointment_type_ids_to_replacement_ids = array(); + foreach( $orphaned_appointments as $orphaned_appointment ) { + $missing_appointment_type_id = $orphaned_appointment['appointment_type_id']; + if ( empty( $map_missing_appointment_type_ids_to_replacement_ids[$missing_appointment_type_id] ) ) { + // Create a new appointment type ID to replace the missing one + $replacement_id = $this->plugin->appointment_type_model->insert( array( + 'title' => __( 'Previously Deleted Appointment Type #', 'simply-schedule-appointments' ) . $missing_appointment_type_id, + 'label_id' => $labels[0]['id'], + 'status' => 'delete', + 'custom_customer_information' => array ( + array ( + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'face', + 'values' => '', + ), + array ( + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'email', + 'values' => '', + ), + ), + 'customer_information' => array ( + array ( + 'field' => 'Name', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'face', + 'values' => '', + ), + array ( + 'field' => 'Email', + 'display' => true, + 'required' => true, + 'type' => 'single-text', + 'icon' => 'email', + 'values' => '', + ), + ), + ) ); + $map_missing_appointment_type_ids_to_replacement_ids[$missing_appointment_type_id] = $replacement_id; + } + + $this->plugin->appointment_model->db_update( $orphaned_appointment['id'], array( + 'appointment_type_id' => $map_missing_appointment_type_ids_to_replacement_ids[$missing_appointment_type_id], + ) ); + } + } + + public function maybe_fix_appointment_type_label_id_equal_to_zero() { + + // Query all labels that were inserted to access their ids + $appointment_type_labels = $this->plugin->appointment_type_label_model->query( array( + 'number' => -1, + 'append_where_sql' => " AND `id` IN( 0 ) ", + ) ); + + foreach ( $appointment_type_labels as $label ) { + $raw_id = $this->plugin->appointment_type_label_model->raw_insert( array( + 'name' => $label['name'], + 'color' => $label['color'] + )); + $this->plugin->appointment_type_label_model->db_delete( $label['id'], true ); + + // Update appointment types to use new label id + $appointment_types = $this->plugin->appointment_type_model->query( array( + 'number' => -1, + 'label_id' => $label['id'], + )); + if( empty( $appointment_types ) ) { + continue; + } + + foreach( $appointment_types as $type ) { + $this->plugin->appointment_type_model->update( $type['id'], array( + 'label_id' => $raw_id, + )); + } + } + + + } + + /** + * Clear ssa_error_notices array since the old format of the stored errors has changed from indexed array to associative array + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_4_9( $from_version ) { + $errors = get_option( 'ssa_error_notices', array() ); + + if( ! empty( $errors ) ) { + update_option( 'ssa_error_notices', array() ); + } + $this->record_version( '6.4.9' ); + } + + /** + * Add {{ cancelation_note }} to the customer and admin canceled notifications + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_5_1( $from_version ) { + + $notifications_settings = $this->plugin->notifications_settings->get(); + + if ( empty( $notifications_settings['notifications'] ) ) { + $this->record_version( '6.5.1' ); + return; + } + + foreach( $notifications_settings['notifications'] as $key => $notification ) { + + if( $notification['trigger'] === 'appointment_canceled' && $notification['type'] === 'email' ) { + + $message = $notification['message']; + + if ( empty( $message ) ) { + continue; + } + + $pattern = '/has been canceled\s*\<\/p>/i'; + + $is_matching = preg_match($pattern, $message); + + if ( $is_matching ) { + $message = preg_replace_callback( $pattern, function( $matches ) { + return $matches[0] . + '{% if cancelation_note %}' . + '

' . + '{% if canceled_by_name %} {{ canceled_by_name }} ' . __( 'left a note', 'simply-schedule-appointments' ) . ': {% else %}' . __( 'Note', 'simply-schedule-appointments' ) . ': {% endif %}' . + '{{ cancelation_note }}

' . + '{% endif %}'; + + }, $message ); + + } else { + $message .= + '{% if cancelation_note %}' . + '

' . + '{% if canceled_by_name %} {{ canceled_by_name }} ' . __( 'left a note', 'simply-schedule-appointments' ) . ': {% else %}' . __( 'Note', 'simply-schedule-appointments' ) . ': {% endif %}' . + '{{ cancelation_note }}

' . + '{% endif %}'; + + } + + $notifications_settings['notifications'][$key]['message'] = $message; + } + + } + + $this->plugin->notifications_settings->update( $notifications_settings ); + + $this->record_version( '6.5.1' ); + + } + + /** + * Get and save stripe settings to enforce stripe settings encryption + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_5_4( $from_version ) { + + if ( class_exists( 'SSA_Stripe_Settings' ) ) { + $stripe_settings = $this->plugin->stripe_settings->get(); + $this->plugin->stripe_settings->update( $stripe_settings ); + } + + $this->record_version( '6.5.4' ); + + } + + /** + * Remove public_edit_url from calendar shared group event + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_5_20( $from_version ) { + $settings = $this->plugin->calendar_events_settings->get(); + + if ( ! isset( $settings[ 'event_type_group_shared' ] ) ) { + $this->record_version( '6.5.20' ); + return; + } + + $settings[ 'event_type_group_shared' ] = str_replace('Need to make changes to this event?', '',$settings[ 'event_type_group_shared' ]); + $settings[ 'event_type_group_shared' ] = str_replace('{{ Appointment.public_edit_url }}', '',$settings[ 'event_type_group_shared' ]); + + $this->plugin->calendar_events_settings->update( $settings ); + + $this->record_version( '6.5.20' ); + + } + + /** + * Migrates settings after specifically checking for the presence of a custom CSS file. + * + * @param string $from_version The version from which the migration is being performed. + * + * @return void + */ + public function migrate_to_version_6_6_19( $from_version ) { + $settings = $this->plugin->settings->get(); + + if ( $settings ) { + $theme_directory = get_stylesheet_directory(); + + // Build the path to the custom CSS directory + $custom_css_dir = $theme_directory . '/ssa/booking-app/'; + + // List all files in the custom CSS directory + if (is_dir($custom_css_dir)) { + // List all files in the custom CSS directory + $files = scandir($custom_css_dir); + + // Check if there's at least one CSS file + foreach ($files as $file) { + if (pathinfo($file, PATHINFO_EXTENSION) === 'css') { + $settings['global'][ 'should_display_new_booking_app_banner' ] = 'notice'; + $this->plugin->settings->update( $settings ); + } + } + } + $is_custom_css_existing = $this->plugin->styles_settings->get()['css']; + if ($is_custom_css_existing !== '') { + $settings['global'][ 'should_display_new_booking_app_banner' ] = 'notice'; + } + + $this->plugin->settings->update( $settings ); + + } + $this->record_version( '6.6.19' ); + } + + /* + * Remove public_edit_url from calendar admin group event + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_6_21( $from_version ) { + $settings = $this->plugin->calendar_events_settings->get(); + + if ( ! isset( $settings[ 'event_type_group_admin' ] ) ) { + $this->record_version( '6.6.21' ); + return; + } + + $settings[ 'event_type_group_admin' ] = str_replace('Need to make changes to this event?', '',$settings[ 'event_type_group_admin' ]); + $settings[ 'event_type_group_admin' ] = str_replace('{{ Appointment.public_edit_url }}', '',$settings[ 'event_type_group_admin' ]); + + $this->plugin->calendar_events_settings->update( $settings ); + + $this->record_version( '6.6.21' ); + } + + + /** + * Disable old booking app if enabled with resources enabled at the same time + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_7_13( $from_version ) { + $ssa_settings = $this->plugin->settings->get(); + // if resources are enabled + if( !empty( $ssa_settings['resources']['enabled'] ) ) { + // disable the old booking app + $developer_settings = $this->plugin->developer_settings->get(); + if ( !empty( $developer_settings['old_booking_app'] ) ) { + $developer_settings['old_booking_app'] = false; + $this->plugin->developer_settings->update( $developer_settings ); + } + } + $this->record_version( '6.7.13' ); + } + + + /** + * Disable old booking app for all users + * + */ + public function migrate_to_version_6_7_45() { + $developer_settings = $this->plugin->developer_settings->get(); + if ( !empty( $developer_settings['old_booking_app'] ) ) { + $developer_settings['old_booking_app'] = false; + $this->plugin->developer_settings->update( $developer_settings ); + } + $this->record_version( '6.7.45' ); + } + + /** + * Update Google Calendar Quick Connect mode from saved dev settings + * + * @param string $from_version + * @return void + */ + public function migrate_to_version_6_8_1() { + // global variable skip token invalidation + global $ssa_skip_token_invalidation; + $ssa_skip_token_invalidation = true; + $developer_settings = $this->plugin->developer_settings->get(); + // if quick connect was on - keep it on + if ( ! empty( $developer_settings['quick_connect_gcal_mode'] ) ) { + $this->plugin->google_calendar_settings->update( array( + 'quick_connect_gcal_mode' => true, + ) ); + } else { + // if quick connect was off + $settings = $this->plugin->settings->get(); + if ( ! empty( $settings[ 'google_calendar' ]['access_token'] ) ) { + // and gcal is connected - do nothing + } else { + // but if gcal is not connected - switch to quick connect mode + $this->plugin->google_calendar_settings->update( array( + 'quick_connect_gcal_mode' => true, + ) ); + } + } + + $this->record_version( '6.8.1' ); + } + + public function migrate_to_version_6_8_6() { + $appointment_types = $this->plugin->appointment_type_model->query(); + + $old_schema = array ( + 0 => + array ( + 'field' => 'admin', + 'send' => true, + ), + 1 => + array ( + 'field' => 'customer', + 'send' => true, + ), + ); + + if ( ! empty( $appointment_types ) ) { + + foreach ( $appointment_types as $key => $appointment_type ) { + + if( ! empty( $appointment_type['notifications']['notifications_opt_in'] ) ) { + continue; + } + + if ( ! empty( $appointment_type['notifications'] ) && is_array( $appointment_type['notifications'] ) && ! empty( $appointment_type['notifications'][0]['field'] ) ) { + $old_schema = $appointment_type['notifications']; + } + + $updated_notifications = [ + "fields" => $old_schema, + "notifications_opt_in" => [ + "enabled" => false, + "label" => "Receive notifications", + "description" => "Check this box to receive appointment notifications." + ] + ]; + + $this->plugin->appointment_type_model->update( $appointment_type['id'], array( + 'notifications' => $updated_notifications, + )); + } + } + + $this->record_version( '6.8.6' ); + } + +} + diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-users.php b/wp-content/plugins/simply-schedule-appointments/includes/class-users.php new file mode 100644 index 0000000..0677608 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-users.php @@ -0,0 +1,115 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 3.6.2 + */ + public function hooks() { + add_action( 'rest_api_init', array( $this, 'register_users_endpoint' ) ); + } + + public function register_users_endpoint() { + $namespace = 'ssa/v1'; + $base = 'users'; + + register_rest_route( $namespace, '/' . $base . '/', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + 'context' => array( + 'default' => 'view', + ), + ), + ), + ) ); + } + + public function get_items_permissions_check( $request ) { + return current_user_can( 'ssa_manage_appointments' ); + } + + public function get_items( $request ) { + $params = $request->get_params(); + + $data = array(); + + $role__in = array(); + // foreach( wp_roles()->roles as $role_slug => $role ) { + // if( ! empty( $role['capabilities']['edit_posts'] ) ) { + // $role__in[] = $role_slug; + // continue; + // } + + // if( ! empty( $role['capabilities']['ssa_manage_appointments'] ) ) { + // $role__in[] = $role_slug; + // continue; + // } + // } + + $args = array( + 'role__in' => $role__in, + // website may have many subscribers, avoid fatal errors + 'number' => 1000, + ); + + $wp_user_query = new WP_User_Query( $args ); + $users = $wp_user_query->get_results(); + if ( empty( $users ) ) { + return $data; + } + + foreach ($users as $user) { + $user_data = get_userdata($user->ID); + $data[] = array( + 'id' => $user_data->ID, + 'email' => $user_data->user_email, + 'display_name' => $user_data->display_name, + 'gravatar_url' => get_avatar_url( $user_data->ID ), + ); + } + + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $data, + ); + + return new WP_REST_Response( $response, 200 ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-utils.php b/wp-content/plugins/simply-schedule-appointments/includes/class-utils.php new file mode 100644 index 0000000..9793844 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-utils.php @@ -0,0 +1,1312 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + + } + + public function defensive_timezone_fix() { + if ( 'UTC' === date_default_timezone_get() ) { + return; + } + + $this->server_default_timezone_before_ssa = date_default_timezone_get(); + + // We know that setting the default_timezone on a server is bad practice + // WordPress expects it to be UTC to function properly + // Our plugin also expects it to be UTC to function properly + // Unfortunately we have found that some plugins do change the default timezone + // We only call this function as a defensive measure, so SSA can co-exist with plugins + // that set the timezone. Looking at you... + // + // * Ajax Event Calendar plugin [https://wordpress.org/support/plugin/ajax-event-calendar] + // *** already removed from the wordpress.org repository + // + // * Series Engine plugin [https://seriesengine.com/] + // ** Pro plugin not available on wordpress.org + // + // Here's our approach to addressing this issue: + // We ONLY set the timezone to UTC if it's something different + // + // We feel that it should be forced to UTC to adhere to WordPress standards, + // but that will probably break users' sites running these problematic plugins + // + // To try and play nicely with others and to protect the user, we will call our + // defensive_timezone_fix() before SSA does anything where we rely on a UTC timezone + // at the end of our functions, we will call defensive_timezone_reset() so we'll put it + // back to whatever the server already had set. + // + // We see this as the only way to co-exist with these problematic plugins and simplify + // life for the user. If there is a better approach, please get in touch. + // We'd love to remove this code :) + date_default_timezone_set( 'UTC' ); + } + public function defensive_timezone_reset() { + if ( empty( $this->server_default_timezone_before_ssa ) || 'UTC' === $this->server_default_timezone_before_ssa ) { + return; + } + + // We know that setting the default_timezone on a server is bad practice + // ^^^ See note above in defensive_timezone_fix() ^^^ + date_default_timezone_set( $this->server_default_timezone_before_ssa ); + } + + public static function site_unique_hash( $string ) { + if (defined('SSA_AUTH_SALT')) { + $salt = SSA_AUTH_SALT; + } else if ( defined( 'AUTH_SALT' ) ) { + $salt = AUTH_SALT; + } else { + $salt = 'M+mZDQYJlrHoRZ0OfE1ESGG5T5CgPMOgOub25eOmwJYdPLmiNLbKwXYGQfG0pkF5YCw45DVtwaWREx3Jr4hILB'; + } + + return hash_hmac('md5', $string, $salt); + } + + /** + * + * + * @param [type] $string + * @return void + */ + public static function deprecated_hash( $string ) { + if ( defined( 'SSA_AUTH_SALT' ) ) { + $salt = SSA_AUTH_SALT; + } else { + $salt = '6U2aRk6oGvAZAEXstbFNMppRF=D|H.NX!-gU:-aXGVH<)8kcF~FPor5{Z $value ) { + if ( ! array_key_exists( $key, $b ) ) { + return false; + } + if ( is_array( $value ) ) { + if ( ! is_array( $b[ $key ] ) ) { + return false; + } + if ( ! self::arrays_assoc_are_equal( $value, $b[ $key ] ) ) { + return false; + } + } else { + if ( $value !== $b[ $key ] ) { + return false; + } + } + } + return true; + } + + public static function array_key( $array, $key ) { + if ( isset( $array[ $key ] ) ) { + return $array[ $key ]; + } + + return false; + } + + public static function datetime( $time='now' ) { + if ( $time instanceof DateTimeImmutable ) { + return $time; + } + + if ( 0 === strpos( $time, 'Invalid' ) ) { + ssa_debug_log( 'SSA_Utils::datetime() `Invalid Date` detected' ); + // $time = 'now'; + return null; // TODO: handle error state gracefully + } else if ( empty( $time ) ) { + $time = 'now'; + } + + $timezone = new DateTimeZone( 'UTC' ); + + return new DateTimeImmutable( $time, $timezone ); + } + + public static function ceil_datetime( DateTimeImmutable $datetime, $mins = 5 ) { + $seconds = $mins * 60; + $time = ( ceil( $datetime->getTimestamp() / $seconds ) ) * $seconds; + + return $datetime->setTimestamp( $time ); + } + + public static function floor_datetime( DateTimeImmutable $datetime, $mins = 5 ) { + $seconds = $mins * 60; + $time = ( floor( $datetime->getTimestamp() / $seconds ) ) * $seconds; + + return $datetime->setTimestamp( $time ); + } + + /** + * Create DateTimeZone safely, handling PHP 8.3+ deprecated timezone names. + * + * @since 5.8.8 + * @param string $timezone_string Timezone identifier + * @param DateTimeZone|null $fallback Optional fallback timezone if creation fails + * @return DateTimeZone + */ + public static function safe_timezone( $timezone_string, $fallback = null ) { + if ( $timezone_string instanceof DateTimeZone ) { + return $timezone_string; + } + + try { + return new DateTimeZone( $timezone_string ); + } catch ( Exception $e ) { + // Map deprecated timezone names to modern equivalents (PHP 8.3+) + // Based on IANA timezone database backward compatibility file + $deprecated_timezones = array( + // US timezones + 'US/Alaska' => 'America/Anchorage', + 'US/Aleutian' => 'America/Adak', + 'US/Arizona' => 'America/Phoenix', + 'US/Central' => 'America/Chicago', + 'US/Eastern' => 'America/New_York', + 'US/East-Indiana' => 'America/Indiana/Indianapolis', + 'US/Hawaii' => 'Pacific/Honolulu', + 'US/Indiana-Starke'=> 'America/Indiana/Knox', + 'US/Michigan' => 'America/Detroit', + 'US/Mountain' => 'America/Denver', + 'US/Pacific' => 'America/Los_Angeles', + 'US/Samoa' => 'Pacific/Pago_Pago', + + // Canada + 'Canada/Atlantic' => 'America/Halifax', + 'Canada/Central' => 'America/Winnipeg', + 'Canada/Eastern' => 'America/Toronto', + 'Canada/Mountain' => 'America/Edmonton', + 'Canada/Newfoundland' => 'America/St_Johns', + 'Canada/Pacific' => 'America/Vancouver', + 'Canada/Saskatchewan' => 'America/Regina', + 'Canada/Yukon' => 'America/Whitehorse', + + // Asia + 'Asia/Calcutta' => 'Asia/Kolkata', + 'Asia/Katmandu' => 'Asia/Kathmandu', + 'Asia/Saigon' => 'Asia/Ho_Chi_Minh', + 'Asia/Chongqing' => 'Asia/Shanghai', + 'Asia/Chungking' => 'Asia/Shanghai', + 'Asia/Dacca' => 'Asia/Dhaka', + 'Asia/Harbin' => 'Asia/Shanghai', + 'Asia/Kashgar' => 'Asia/Urumqi', + 'Asia/Macao' => 'Asia/Macau', + 'Asia/Tel_Aviv' => 'Asia/Jerusalem', + 'Asia/Thimbu' => 'Asia/Thimphu', + 'Asia/Ujung_Pandang' => 'Asia/Makassar', + 'Asia/Ulan_Bator' => 'Asia/Ulaanbaatar', + + // Europe + 'Europe/Belfast' => 'Europe/London', + 'Europe/Tiraspol' => 'Europe/Chisinau', + 'Europe/Nicosia' => 'Asia/Nicosia', + + // Africa + 'Africa/Asmera' => 'Africa/Asmara', + 'Africa/Timbuktu' => 'Africa/Bamako', + + // America + 'America/Argentina/ComodRivadavia' => 'America/Argentina/Catamarca', + 'America/Atka' => 'America/Adak', + 'America/Buenos_Aires' => 'America/Argentina/Buenos_Aires', + 'America/Catamarca' => 'America/Argentina/Catamarca', + 'America/Coral_Harbour' => 'America/Atikokan', + 'America/Cordoba' => 'America/Argentina/Cordoba', + 'America/Ensenada' => 'America/Tijuana', + 'America/Fort_Wayne' => 'America/Indiana/Indianapolis', + 'America/Indianapolis' => 'America/Indiana/Indianapolis', + 'America/Jujuy' => 'America/Argentina/Jujuy', + 'America/Knox_IN' => 'America/Indiana/Knox', + 'America/Louisville' => 'America/Kentucky/Louisville', + 'America/Mendoza' => 'America/Argentina/Mendoza', + 'America/Porto_Acre' => 'America/Rio_Branco', + 'America/Rosario' => 'America/Argentina/Cordoba', + 'America/Virgin' => 'America/St_Thomas', + + // Australia + 'Australia/ACT' => 'Australia/Sydney', + 'Australia/Canberra' => 'Australia/Sydney', + 'Australia/LHI' => 'Australia/Lord_Howe', + 'Australia/NSW' => 'Australia/Sydney', + 'Australia/North' => 'Australia/Darwin', + 'Australia/Queensland' => 'Australia/Brisbane', + 'Australia/South' => 'Australia/Adelaide', + 'Australia/Tasmania' => 'Australia/Hobart', + 'Australia/Victoria' => 'Australia/Melbourne', + 'Australia/West' => 'Australia/Perth', + 'Australia/Yancowinna' => 'Australia/Broken_Hill', + + // Brazil + 'Brazil/Acre' => 'America/Rio_Branco', + 'Brazil/DeNoronha' => 'America/Noronha', + 'Brazil/East' => 'America/Sao_Paulo', + 'Brazil/West' => 'America/Manaus', + + // Chile + 'Chile/Continental' => 'America/Santiago', + 'Chile/EasterIsland' => 'Pacific/Easter', + + // Pacific + 'Pacific/Ponape' => 'Pacific/Pohnpei', + 'Pacific/Samoa' => 'Pacific/Pago_Pago', + 'Pacific/Truk' => 'Pacific/Chuuk', + 'Pacific/Yap' => 'Pacific/Chuuk', + + // Country shortcuts + 'Egypt' => 'Africa/Cairo', + 'Eire' => 'Europe/Dublin', + 'GB' => 'Europe/London', + 'GB-Eire' => 'Europe/London', + 'Greenwich' => 'Etc/GMT', + 'Hongkong' => 'Asia/Hong_Kong', + 'Iceland' => 'Atlantic/Reykjavik', + 'Iran' => 'Asia/Tehran', + 'Israel' => 'Asia/Jerusalem', + 'Jamaica' => 'America/Jamaica', + 'Japan' => 'Asia/Tokyo', + 'Kwajalein' => 'Pacific/Kwajalein', + 'Libya' => 'Africa/Tripoli', + 'NZ' => 'Pacific/Auckland', + 'NZ-CHAT' => 'Pacific/Chatham', + 'Navajo' => 'America/Denver', + 'PRC' => 'Asia/Shanghai', + 'Poland' => 'Europe/Warsaw', + 'Portugal' => 'Europe/Lisbon', + 'ROC' => 'Asia/Taipei', + 'ROK' => 'Asia/Seoul', + 'Singapore' => 'Asia/Singapore', + 'Turkey' => 'Europe/Istanbul', + 'UCT' => 'Etc/UTC', + 'Universal' => 'Etc/UTC', + 'W-SU' => 'Europe/Moscow', + 'Zulu' => 'Etc/UTC', + + // Mexico + 'Mexico/BajaNorte' => 'America/Tijuana', + 'Mexico/BajaSur' => 'America/Mazatlan', + 'Mexico/General' => 'America/Mexico_City', + ); + + if ( isset( $deprecated_timezones[ $timezone_string ] ) ) { + try { + return new DateTimeZone( $deprecated_timezones[ $timezone_string ] ); + } catch ( Exception $e2 ) { + // Mapped timezone also failed - this shouldn't happen with valid mappings + error_log( sprintf( + 'SSA: Deprecated timezone "%s" mapped to "%s" but mapping also failed: %s', + $timezone_string, + $deprecated_timezones[ $timezone_string ], + $e2->getMessage() + ) ); + // Now Fall through to fallback logic + } + } + + // Return fallback or UTC as last resort + if ( $fallback instanceof DateTimeZone ) { + return $fallback; + } + return new DateTimeZone( 'UTC' ); + } + } + + public static function get_datetime_in_utc( $datetime, $datetimezone='UTC' ) { + if ( ! ( $datetimezone instanceof DateTimeZone ) ) { + $datetimezone = self::safe_timezone( $datetimezone ); + } + + if ( ! ( $datetime instanceof DateTimeImmutable ) ) { + $datetime = new DateTimeImmutable( $datetime, $datetimezone ); + } + + $datetime = $datetime->setTimezone( new DateTimeZone( 'UTC' ) ); + return $datetime; + } + + public static function get_period_in_utc( Period $period ) { + return self::get_period_in_timezone( $period, new DateTimeZone( 'UTC' ) ); + } + + public static function get_period_in_timezone( Period $period, DateTimeZone $timezone ) { + return new Period( + $period->getStartDate()->setTimezone( $timezone ), + $period->getEndDate()->setTimezone( $timezone ) + ); + } + + public function get_datetime_as_local_datetime( $datetime, $appointment_type_id=0, $staff_id = 0, $location_id = 0 ) { + $local_timezone = $this->get_datetimezone( $appointment_type_id, $staff_id, $location_id ); + + if ( empty( $local_timezone ) || ! ( $local_timezone instanceof DateTimeZone ) ) { + throw new SSA_Exception( __( 'No $local_timezone defined' ), 500 ); + } + + if ( $datetime instanceof DateTime ) { + $datetime = new DateTimeImmutable( $datetime ); + } elseif ( ! ( $datetime instanceof DateTimeImmutable ) ) { + $utc_timezone = new DateTimeZone( 'UTC' ); + $datetime = new DateTimeImmutable( $datetime, $utc_timezone ); + $datetime = $datetime->setTimezone( $local_timezone ); + } else { + $datetime = $datetime->setTimezone( $local_timezone ); + } + + + return $datetime; + } + + public function get_datetimezone( $appointment_type_id = 0, $staff_id = 0, $location_id = 0 ) { + if ( !empty( $staff_id ) ) { + throw new SSA_Exception( __( 'Staff members are not supported yet' ), 500 ); + } elseif ( !empty( $location_id ) ) { + throw new SSA_Exception( __( 'Locations are not supported yet' ), 500 ); + } else { + $local_timezone = $this->plugin->settings_global->get_datetimezone(); + } + + return $local_timezone; + } + + /** + * Returns datetime format set by the customer on the global settings page. + * + * @since 4.9.1 + * + * @return string + */ + public static function get_localized_date_format_from_settings() { + $settings = ssa()->settings->get(); + $format = $settings['global']['date_format'] . ' ' . $settings['global']['time_format']; + + return $format; + } + + /** + * Returns date format set by the customer on the global settings page. + * + * @since 4.9.1 + * + * @return string + */ + public static function get_localized_date_only_format_from_settings() { + $settings = ssa()->settings->get(); + $format = $settings['global']['date_format']; + + return $format; + } + + /** + * Returns time format set by the customer on the global settings page. + * + * @since 4.9.1 + * + * @return string + */ + public static function get_localized_time_only_format_from_settings() { + $settings = ssa()->settings->get(); + $format = $settings['global']['time_format']; + + return $format; + } + + public static function localize_default_date_strings( $php_date_format ) { + if ( 'F j, Y' === $php_date_format ) { + $php_date_format = __( 'F j, Y', 'default' ); + } else if ( 'g:i a' === $php_date_format ) { + $php_date_format = __( 'g:i a', 'default' ); + } else if ( 'F j, Y g:i a' === $php_date_format ) { + $php_date_format = __( 'F j, Y g:i a', 'default' ); + } + + return $php_date_format; + } + + public static function translate_formatted_date( $formatted_date ) { + $translations = array(); + + if( !empty( ssa()->translation->programmatic_locale ) && is_string( ssa()->translation->programmatic_locale ) ){ + $mo_file = WP_LANG_DIR . '/' . ssa()->translation->programmatic_locale . '.mo'; + if( ! file_exists( $mo_file ) ){ + // if the WP core language file doesn't exist, try the plugin language file + $mo_file = WP_LANG_DIR . '/plugins/simply-schedule-appointments-' . ssa()->translation->programmatic_locale . '.mo'; + } + if ( file_exists( $mo_file ) ) { + // Make sure the MO class is available. + if ( ! class_exists( 'MO' ) ) { + require_once( ABSPATH . WPINC . '/l10n.php' ); + } + + // Instantiate a new MO object. + $mo = new MO(); + // Load your specific .mo file. + // (Replace '/path/to/your/file.mo' with the correct path.) + if ( $mo->import_from_file( $mo_file ) ) { + + // Now translate the strings using the loaded .mo file. + $translations = array( + 'January' => $mo->translate( 'January' ), + 'February' => $mo->translate( 'February' ), + 'March' => $mo->translate( 'March' ), + 'April' => $mo->translate( 'April' ), + 'May' => $mo->translate( 'May' ), + 'June' => $mo->translate( 'June' ), + 'July' => $mo->translate( 'July' ), + 'August' => $mo->translate( 'August' ), + 'September' => $mo->translate( 'September' ), + 'October' => $mo->translate( 'October' ), + 'November' => $mo->translate( 'November' ), + 'December' => $mo->translate( 'December' ), + + 'Monday' => $mo->translate( 'Monday' ), + 'Tuesday' => $mo->translate( 'Tuesday' ), + 'Wednesday' => $mo->translate( 'Wednesday' ), + 'Thursday' => $mo->translate( 'Thursday' ), + 'Friday' => $mo->translate( 'Friday' ), + 'Saturday' => $mo->translate( 'Saturday' ), + 'Sunday' => $mo->translate( 'Sunday' ), + ); + } + } + } + + if(empty($translations)){ + $translations = array( + 'January' => __( 'January' ), + 'February' => __( 'February' ), + 'March' => __( 'March' ), + 'April' => __( 'April' ), + 'May' => __( 'May' ), + 'June' => __( 'June' ), + 'July' => __( 'July' ), + 'August' => __( 'August' ), + 'September' => __( 'September' ), + 'October' => __( 'October' ), + 'November' => __( 'November' ), + 'December' => __( 'December' ), + + 'Monday' => __( 'Monday' ), + 'Tuesday' => __( 'Tuesday' ), + 'Wednesday' => __( 'Wednesday' ), + 'Thursday' => __( 'Thursday' ), + 'Friday' => __( 'Friday' ), + 'Saturday' => __( 'Saturday' ), + 'Sunday' => __( 'Sunday' ), + ); + } + + return str_replace( array_keys( $translations ), array_values( $translations ), $formatted_date ); + + // return strtr( ( string ) $formatted_date, $translations ); + } + + public static function php_to_moment_format($php_date_format) { + $php_date_format = self::localize_default_date_strings( $php_date_format ); + + $replacements = array( + '\\h' => '[h]', + '\\m\\i\\n' => '[min]', + '\\m' => '[m]', + '\\' => '', + '\\d' => '\\d', // Leave Spanish string 'de' (of) untouched + '\\e' => '\\e', // Leave Spanish string 'de' (of) untouched + + 'd' => 'DD', + 'D' => 'ddd', + 'j' => 'D', + 'l' => 'dddd', + 'N' => 'E', + 'S' => 'o', + 'w' => 'e', + 'z' => 'DDD', + 'W' => 'W', + 'F' => 'MMMM', + 'm' => 'MM', + 'M' => 'MMM', + 'n' => 'M', + 't' => '', // no equivalent + 'L' => '', // no equivalent + 'o' => 'YYYY', + 'Y' => 'YYYY', + 'y' => 'YY', + 'a' => 'a', + 'A' => 'A', + 'B' => '', // no equivalent + 'g' => 'h', + 'G' => 'H', + 'h' => 'hh', + 'H' => 'HH', + 'i' => 'mm', + 's' => 'ss', + 'u' => 'SSS', + 'e' => 'zz', // deprecated since version 1.6.0 of moment.js + 'I' => '', // no equivalent + 'O' => '', // no equivalent + 'P' => '', // no equivalent + 'T' => '', // no equivalent + 'Z' => '', // no equivalent + 'c' => '', // no equivalent + 'r' => '', // no equivalent + 'U' => 'X', + ); + + $moment_format = strtr($php_date_format, $replacements); + + if( isset( $_GET["ssa_locale"] )){ + $moment_format = apply_filters( 'ssa/moment_format', $moment_format, $_GET["ssa_locale"] ); + } + + return $moment_format; + } + + public static function moment_to_php_format($moment_date_format) { + $replacements = array( + 'DD' => 'd', + 'ddd' => 'D', + 'D' => 'j', + 'dddd' => 'l', + 'E' => 'N', + 'o' => 'S', + 'e' => 'w', + 'DDD' => 'z', + 'W' => 'W', + 'MMMM' => 'F', + 'MM' => 'm', + 'MMM' => 'M', + 'M' => 'n', + 'YYYY' => 'o', + 'YYYY' => 'Y', + 'YY' => 'y', + 'a' => 'a', + 'A' => 'A', + 'h' => 'g', + 'H' => 'G', + 'hh' => 'h', + 'HH' => 'H', + 'mm' => 'i', + 'ss' => 's', + 'SSS' => 'u', + 'zz' => 'e', // deprecated since version 1.6.0 of moment.js + 'X' => 'U', + ); + + $php_format = strtr($moment_date_format, $replacements); + + return $php_format; + } + + public function get_formatted_date( $date, $appointment_type_id = 0 ){ + $local_date = $this->get_datetime_as_local_datetime( $date, $appointment_type_id ); + $format = self::get_localized_date_format_from_settings(); + $format = self::localize_default_date_strings( $format ) . ' (T)'; + $value = $local_date->format( $format ); + $value = self::translate_formatted_date( $value ); + return $value; + } + + /** + * Define constant if not already set. + * + * @param string $name Constant name. + * @param string|bool $value Constant value. + */ + public static function define( $name, $value ) { + if ( ! defined( $name ) ) { + define( $name, $value ); + } + } + + public static function get_appointment_type( $appointment_type ) { + if ( (int)$appointment_type == $appointment_type ) { + $appointment_type = ssa()->appointment_type_model->get( $appointment_type ); + } + if ( empty( $appointment_type['id'] ) ) { + return false; + } + + return $appointment_type; + } + + public static function get_query_period( Period $query_period = null ) { + if ( null === $query_period ) { + $query_period = SSA_Constants::EPOCH_PERIOD(); + } + + return $query_period; + } +} + +function ssa_datetime( $time='now' ) { + return SSA_Utils::datetime( $time ); +} + +function ssa_gmtstrtotime( $string ) { + $time = strtotime($string . ' +0000'); + + if ( -1 == $time ) { + return strtotime($string); + } + + return $time; +} + +function ssa_defensive_timezone_fix() { + ssa()->utils->defensive_timezone_fix(); +} +function ssa_defensive_timezone_reset() { + ssa()->utils->defensive_timezone_reset(); +} + +function ssa_debug_log( $var, $debug_level = 1, $label = '', $file = 'debug' ) { + if ( defined( 'SSA_DEBUG_LOG' ) && empty( SSA_DEBUG_LOG ) ) { + return; + } + + // Store backtrace early for PHP 7.0+ compatibility (before using parameters) + $backtrace = debug_backtrace(); + + $ssa_debug_level = get_option( 'ssa_debug_level', 10 ); + if ( $debug_level < $ssa_debug_level ) { + // We want to log really fatal errors (level 10) so the support team can see them when logging in after the fact + return; + } + + $path = ssa()->support_status->get_log_file_path( $file ); + $log_prefix = gmdate( '[Y-m-d H:i:s] ' ); + + if ( empty( $path ) ) { + return; + } + + // Validate indices before access (PHP 8.0+ compatibility) + + if ( isset( $backtrace[1]['function'] ) ) { + error_log( PHP_EOL . 'The following is logged from ' . $backtrace[1]['function'] . '()' . PHP_EOL, 3, $path ); + } + if ( isset( $backtrace[0]['file'], $backtrace[0]['line'] ) ) { + error_log( 'in ' . $backtrace[0]['file'] . ' line ' . $backtrace[0]['line'] . ':' . PHP_EOL, 3, $path ); + } + + if ( isset( $backtrace[2]['function'] ) ) { + error_log( PHP_EOL . '... ' . $backtrace[2]['function'] . '()' . PHP_EOL, 3, $path ); + } + if ( isset( $backtrace[1]['file'], $backtrace[1]['line'] ) ) { + error_log( 'in ' . $backtrace[1]['file'] . ' line ' . $backtrace[1]['line'] . ':' . PHP_EOL, 3, $path ); + } + + if ( isset( $backtrace[3]['function'] ) ) { + error_log( PHP_EOL . '...... ' . $backtrace[3]['function'] . '()' . PHP_EOL, 3, $path ); + } + if ( isset( $backtrace[2]['file'], $backtrace[2]['line'] ) ) { + error_log( 'in ' . $backtrace[2]['file'] . ' line ' . $backtrace[2]['line'] . ':' . PHP_EOL, 3, $path ); + } + + if ( ! empty( $label ) ) { + error_log( $log_prefix.$label.PHP_EOL, 3, $path ); + } + if ( is_string( $var ) ) { + error_log( $log_prefix.$var.PHP_EOL, 3, $path ); + } else { + // error_log( $log_prefix.print_r( $var, true ).PHP_EOL, 3, $path ); + } +} + +function ssa_int_hash( $string ) { + return abs( crc32( $string ) ); +} + +function ssa_get_staff_id( $user_id ) { + return ssa()->staff_model->get_staff_id_for_user_id( $user_id ); +} +function ssa_get_current_staff_id() { + return ssa_get_staff_id( get_current_user_id() ); +} + +function ssa_cache_get( $key, $group = '', $force = false, &$found = null ) { + return SSA_Cache::object_cache_get( $key, $group, $force, $found ); +} +function ssa_cache_set( $key, $data, $group = '', $expire = 0 ) { + return SSA_Cache::object_cache_set( $key, $data, $group, $expire ); +} +function ssa_cache_delete( $key, $group = '' ) { + return SSA_Cache::object_cache_delete( $key, $group ); +} + + +/** + * SSA custom class_exists function + * + * @since 6.0.3 + * + * @param string $class + * @return bool + */ +function ssa_class_exists( $class = '' ) { + if ( ! class_exists( $class ) ) { + $var = 'Class "' . $class . '" not found!'; + $debug_level = 10; + ssa_debug_log($var, $debug_level ); + return false; + } + return true; +} + +/** + * SSA custom function_exists function + * + * @since 6.0.3 + * + * @param string $function + * @return bool + */ +function ssa_function_exists( $function = '' ) { + if ( ! function_exists( $function ) ) { + $var = 'Function "' . $function . '" not found!'; + $debug_level = 10; + ssa_debug_log($var, $debug_level ); + return false; + } + return true; +} + +/** + * SSA custom as_has_scheduled_action that does all the checking needed + * + * @since 6.0.3 + * + * @param string $hook Required + * @return bool|null + */ +function ssa_has_scheduled_action( $hook = '', $args = array() ) { + + if ( empty( $hook ) ) { + return; + } + + if ( ! ssa_class_exists( 'ActionScheduler' ) ) { + return; + } + + if ( ! ssa_function_exists( 'as_has_scheduled_action' ) ) { + return; + } + + try { + return as_has_scheduled_action( $hook, $args ); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } +} + +/** + * SSA custom as_schedule_recurring_action that does all the checking needed + * + * @since 6.0.3 + * + * @param integer $timestamp Required + * @param integer $interval_in_seconds Required + * @param string $hook Required + * @param array $args Optional + * @param string $group Optional + * @return integer|null The action ID or void + */ +function ssa_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook='', $args = array(), $group = '' ) { + + if ( empty( $timestamp ) || empty( $interval_in_seconds ) || empty( $hook ) ) { + return; + } + + if ( ! ssa_class_exists( 'ActionScheduler' ) ) { + return; + } + + if ( ! ssa_function_exists( 'as_schedule_recurring_action' ) ) { + return; + } + + try { + // return the ID of the scheduled action + return as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args, $group ); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } +} + +/** + * SSA custom as_unschedule_action that does all the checking needed + * + * @since 6.0.3 + * + * @param string $hook Required + * @param array $args Optional + * @param string $group Optional + * @return integer|null. The scheduled action ID if a scheduled action was found, or null if no matching action found. + */ +function ssa_unschedule_action( $hook='', $args = array(), $group = '' ) { + + if ( empty( $hook ) ) { + return; + } + + if ( ! ssa_class_exists( 'ActionScheduler' ) ) { + return; + } + + if ( ! ssa_function_exists( 'as_unschedule_action' ) ) { + return; + } + + try { + return as_unschedule_action( $hook, $args, $group ); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } +} + +/** + * SSA custom as_unschedule_all_actions that does all the checking needed + * + * @since 6.0.3 + * + * @param string $hook Required + * @param array $args Optional + * @param string $group Optional + */ +function ssa_unschedule_all_actions( $hook='', $args = array(), $group = '' ) { + + if ( empty( $hook ) ) { + return; + } + + if ( ! ssa_class_exists( 'ActionScheduler' ) ) { + return; + } + + if ( ! ssa_function_exists( 'as_unschedule_all_actions' ) ) { + return; + } + + try { + return as_unschedule_all_actions( $hook, $args, $group ); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } +} + +/** + * SSA custom as_schedule_single_action that does all the checking needed + * + * @since 6.0.3 + * + * @param integer $timestamp Required + * @param string $hook Required + * @param array $args Optional + * @param string $group Optional + * @return integer|null. The scheduled action ID if a scheduled action was found, or null if no matching action found. + */ +function ssa_schedule_single_action( $timestamp, $hook='', $args = array(), $group = '' ) { + + if ( empty( $timestamp ) || empty( $hook ) ) { + return; + } + + if ( ! ssa_class_exists( 'ActionScheduler' ) ) { + return; + } + + if ( ! ssa_function_exists( 'as_schedule_single_action' ) ) { + return; + } + + try { + return as_schedule_single_action( $timestamp, $hook, $args, $group ); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } +} + +/** + * SSA queue runner for wp_actionscheduler_actions table + * + * @since 6.4.3 + * + * @return integer + */ +function ssa_run_action_scheduler_queue(){ + + if ( ! class_exists( 'ActionScheduler' ) ) { + return; + } + + try { + return ActionScheduler::runner()->run(); + + } catch( \Exception $e ) { + $var = $e->getMessage(); + $debug_level = 10; + $label = 'Action Scheduler'; + ssa_debug_log( $var, $debug_level, $label ); + } + +} + +/** + * Get all active plugins + * Return array of active plugins names, eg. array( 'draw-attention', 'simply-schedule-appointments', 'wp-mail-logging' ); + * + * @return array + */ +function ssa_get_all_active_plugins(){ + + $active_plugins = get_option( 'active_plugins' ); + $output = array(); + + foreach ($active_plugins as $active_plugin ) { + if ( strpos( $active_plugin, '/' ) ) { + $active_plugin = substr( $active_plugin, 0, strpos( $active_plugin, '/' ) ); + } + $output[] = $active_plugin; + } + return $output; +} + + +function ssa_evaluate_datetime_merge_tag( $start_date, $modifier, $date_timezone ){ + $modifier_string = explode( ':', $modifier, 3); + // by default format as day of the week + $formatted_value = ssa_datetime( $start_date )->setTimezone( $date_timezone )->format( 'l' ); + + if( $modifier_string[1] === 'format' ){ + // if a format string is included, format accordingly + $date_format = str_replace( 'y', 'Y', $modifier_string[2] ); + $date_format = str_replace( 'h', 'H', $date_format ); + $formatted_value = ssa_datetime( $start_date )->setTimezone( $date_timezone )->format( $date_format ); + } + + $formatted_value = SSA_Utils::translate_formatted_date( $formatted_value ); + return $formatted_value; +} + +function ssa_evaluate_merge_tag ( $appointment_id, $modifier ) { + + try { + $appointment_obj = new SSA_Appointment_Object( $appointment_id ); + $start_date = $appointment_obj->start_date; + } catch ( Exception $e ) { + // failed to get appointment from appointment_id + return ''; + } + // get settings + $settings = ssa()->settings->get(); + + if ( 'business_start_date' === explode( ':', $modifier )[0] ) { + $date_timezone = SSA_Utils::safe_timezone( $settings['global']['timezone_string'] ); + return ssa_evaluate_datetime_merge_tag( $start_date, $modifier, $date_timezone ); + } + + if ( 'customer_start_date' === explode( ':', $modifier )[0] && count( explode( ':', $modifier ) ) > 1 ) { + return ssa_evaluate_datetime_merge_tag( $start_date, $modifier, $appointment_obj->get_customer_timezone() ); + } + + if ( 'instructions' === $modifier ) { + return $appointment_obj->get_appointment_type()->instructions; + } + + if ( 'public_edit_url' === $modifier ) { + return $appointment_obj->get_public_edit_url(); + } + + if ( 'appointment_type_slug' === $modifier ) { + $appointment_type = $appointment_obj->get_appointment_type(); + return $appointment_type->get_slug(); + } + + if ( 'appointment_type_title' === $modifier ) { + $appointment_type = $appointment_obj->get_appointment_type(); + return $appointment_type->get_title(); + } + + if ( 'web_meeting_url' === $modifier ) { + return $appointment_obj->__get( 'web_meeting_url' ); + } + + if ( 'add_to_calendar_link_ics' === $modifier ) { + $token = ssa()->appointment_model->get_id_token( $appointment_id ); + return add_query_arg( + array( + 'token' => $token, + ), + $appointment_obj->get_ics_download_url( 'customer' ) + ); + } + + if ( 'add_to_calendar_link_gcal' === $modifier ) { + return $appointment_obj->get_gcal_add_link( 'customer' ); + } + + if ( 'team_member_name' === $modifier ) { + $members = $appointment_obj->get_staff_members(); + + if ( empty( $members ) ) { + return ''; + } + + // loop through members and get a list of names. + $names = array(); + foreach ( $members as $member ) { + $names[] = $member->get_name(); + } + + if ( count( $names ) > 1 ) { + $last = array_pop( $names ); + $text = implode( ', ', $names ); + $text .= ' and ' . $last; + + return $text; + } else { + return $names[0]; + } + } + + if ( 'team_member_email' === $modifier ) { + $members = $appointment_obj->get_staff_members(); + + if ( empty( $members ) ) { + return ''; + } + + // loop through members and get a list of emails. + $emails = array(); + foreach ( $members as $member ) { + $emails[] = $member->get_email(); + } + + if ( count( $emails ) > 1 ) { + $last = array_pop( $emails ); + $text = implode( ', ', $emails ); + $text .= ' and ' . $last; + + return $text; + } else { + return $emails[0]; + } + } + + $ssa = ssa(); + + if ( + 'start_date_only' === $modifier || + 'start_time_only' === $modifier + ) { + $business_start_date = ssa_datetime( $start_date ); + + if ( 'start_date_only' === $modifier ) { + $format = SSA_Utils::get_localized_date_only_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ); + } else { + $format = SSA_Utils::get_localized_time_only_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ) . ' (T)'; + } + + $formatted_value = $ssa->utils->get_datetime_as_local_datetime( $business_start_date, $appointment_id )->format( $format ); + $formatted_value = SSA_Utils::translate_formatted_date( $formatted_value ); + return $formatted_value; + } + + if ( + 'customer_start_date' === $modifier || + 'customer_start_date_only' === $modifier || + 'customer_start_time_only' === $modifier + ) { + if ( 'customer_start_date' === $modifier ) { + $format = SSA_Utils::get_localized_date_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ) . ' (T)'; + } elseif ( 'customer_start_date_only' === $modifier ) { + $format = SSA_Utils::get_localized_date_only_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ); + } elseif ( 'customer_start_time_only' === $modifier ) { + $format = SSA_Utils::get_localized_time_only_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ) . ' (T)'; + } + + $formatted_value = ssa_datetime( $start_date )->setTimezone( $appointment_obj->get_customer_timezone() )->format( $format ); + $formatted_value = SSA_Utils::translate_formatted_date( $formatted_value ); + return $formatted_value; + } + + $local_start_date = $ssa->utils->get_datetime_as_local_datetime( $start_date ); + $format = SSA_Utils::get_localized_date_format_from_settings(); + $format = SSA_Utils::localize_default_date_strings( $format ) . ' (T)'; + $formatted_value = $local_start_date->format( $format ); + $formatted_value = SSA_Utils::translate_formatted_date( $formatted_value ); + return $formatted_value; +} + +function ssa_get_stack_trace() { + ob_start(); + debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + $trace = ob_get_contents(); + ob_end_clean(); + return $trace; +} + +function ssa_should_render_booking_flow() { + return ssa()->settings_installed->is_installed( 'booking_flows' ) ? 1 : 0; +} + +/** + * Unles the notification is sent to a customer, it's categorized as a staff notification + * + * @param array $recipients + * @return string + */ +function ssa_get_recipient_type_for_recipients_array ( array $recipients ) { + $recipients_string = implode( ',', $recipients ); + if ( strpos( $recipients_string, 'customer_email' ) === false && strpos( $recipients_string, 'customer_phone' ) === false ){ + return 'staff'; + } + return 'customer'; +} + +/** + * Build current page URL without query parameters + * + * @return string + */ +function ssa_get_current_page_url() { + global $wp; + return home_url($wp->request); +} + +/** + * Sanitizes the accent color input. + * + * @param string $color The input color string. + * @return string|null The sanitized color or null if the input is invalid. + */ +function ssa_sanitize_color_input($color) { + $hex_pattern = '/^[a-fA-F0-9]+$/'; + + $rgba_pattern = '/^rgba\(\d{1,3},\d{1,3},\d{1,3},(?:0|1|0?\.\d+)\)$/i'; + + if (preg_match($hex_pattern, $color) && in_array(strlen($color), [6, 3])) { + return strtolower($color); + } + + if (preg_match($rgba_pattern, $color)) { + return $color; + } + + return null; +} + +// sometimes the request hits the php code even though it's a file request +function ssa_is_json_request() { + // wp_is_json_request checks for the headers - not helpful here + // so we check if /wp-json/ is in the request URI + return strpos( $_SERVER['REQUEST_URI'], '/wp-json/' ) !== false && strpos( $_SERVER['REQUEST_URI'], '/block-renderer/ssa') === false; +} + +function ssa_is_file_request() { + $request_uri = $_SERVER['REQUEST_URI']; + $file_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'ico', 'css', 'js', 'woff', 'woff2', 'ttf', 'eot', 'otf', 'svg', 'webp', 'map']; + $path_info = pathinfo($request_uri); + + if ( isset( $path_info['extension'] ) && in_array( strtolower( $path_info['extension'] ), $file_extensions ) ) { + return true; + } + return false; +} + +function ssa_should_skip_async_logic() { + $should_skip = true; + + if( ssa_doing_async() ) { + $should_skip = false; + } + + // wp cron + if ( wp_doing_cron() ) { + $should_skip = false; + } + + return $should_skip; +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-validation.php b/wp-content/plugins/simply-schedule-appointments/includes/class-validation.php new file mode 100644 index 0000000..d0a8816 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-validation.php @@ -0,0 +1,64 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + + } + + public static function validate_numeric( $value ) { + return ( is_numeric( $value ) || __( 'Expected a numeric value but received ' ) . gettype( $value ) ); + } + + public static function validate_string( $value ) { + return ( ( !is_numeric( $value ) && is_string( $value ) ) || __( 'Expected a string value but received ') . gettype( $value ) ); + } + + public static function validate_weekday( $value ) { + return ( in_array( $value, array( + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ) ) || __( 'Expected English weekday value but received ' ) . $value ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-web-meetings.php b/wp-content/plugins/simply-schedule-appointments/includes/class-web-meetings.php new file mode 100644 index 0000000..94e8abc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-web-meetings.php @@ -0,0 +1,157 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 4.3.3-beta3 + */ + public function hooks() { + add_filter( 'ssa/appointment/before_insert', array( $this, 'set_custom_web_meeting_url' ), 100 ); + add_filter( 'ssa/appointment/before_update', array( $this, 'maybe_update_web_meeting_url_when_reassigned' ), 10, 3 ); + + } + + /** + * Checks if Staff feature is enabled. + * + * @since 4.9.6 + * + * @return boolean + */ + public function should_include_staff_web_meetings() { + $settings = $this->plugin->settings->get(); + if ( $settings['staff'] && $settings['staff']['enabled'] ) { + return true; + } + + return false; + } + + /** + * Checks what type of web meetings url the Appointment should have, based on it's Appointment Type. + * + * @since 4.3.3-beta3 + * + * @param array $data The provided data for the appointment. + * @return array + */ + public function set_custom_web_meeting_url( $data ) { + if ( empty( $data['appointment_type_id'] ) ) { + return $data; + } + + $appointment_type = $this->plugin->appointment_type_model->get( $data['appointment_type_id'] ); + if ( empty( $appointment_type['web_meetings']['provider'] ) ) { + return $data; + } + + if ( 'custom' === $appointment_type['web_meetings']['provider'] && ! empty( $appointment_type['web_meetings']['url'] ) ) { + $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); + } + + // If staff feature is disabled, but Appointment type have the provider set to 'staff', just use the custom web meeting url if set. + if ( ! $this->should_include_staff_web_meetings() && 'staff' === $appointment_type['web_meetings']['provider'] && ! empty( $appointment_type['web_meetings']['url'] ) ) { + $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); + return $data; + } + + // If staff feature is set and Appointment type have the provider set to 'staff', use the staff web meeting url if set. + if ( + 'staff' === $appointment_type['web_meetings']['provider'] && // if staff is the provider. + in_array( $appointment_type['staff']['required'], array( 'any', 'all', 'user_preference' ), true ) && // if any or all staff members are required. + ! empty( $data['staff_ids'] ) // if the appointment has staff members assigned. + ) { + // use the first web meetings url found on the list of staff members. + $selected_web_meeting_url = null; + + foreach ( $data['staff_ids'] as $staff_id ) { + $staff = new SSA_Staff_Object( $staff_id ); + $web_meeting_url = $staff->get_web_meetings_url(); + + if ( ! empty( $web_meeting_url ) ) { + $selected_web_meeting_url = $web_meeting_url; + break; + } + } + + // if a staff member web meeting url was found, use it. + if ( ! empty( $selected_web_meeting_url ) ) { + $data['web_meeting_url'] = trim( $selected_web_meeting_url ); + } elseif ( ! empty( $appointment_type['web_meetings']['url'] ) ) { + // If no staff member has a web meeting url AND we have a default staff url set, use it. + $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); + } + + } elseif ( + 'staff' === $appointment_type['web_meetings']['provider'] && // if staff is the provider. + in_array( $appointment_type['staff']['required'], array( 'any', 'all', 'user_preference' ), true ) && // if any or all staff members are required. + empty( $data['staff_ids'] ) // if the appointment has NO staff members assigned. + ) { + if ( ! empty( $appointment_type['web_meetings']['url'] ) ) { + $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); + } else { + $data['web_meeting_url'] = ''; + } + return $data; + } + + return $data; + } + + /** + * Update web meeting url when an appointment is reassigned to another team member + * + * @param array $data + * @param array $data_before + * @param string|integer $appointment_id + * @return array + */ + public function maybe_update_web_meeting_url_when_reassigned( $data, $data_before, $appointment_id ) { + + if ( ! SSA_Appointment_Model::is_appointment_reassigned( $data, $data_before ) ) { + return $data; + } + + if ( empty( $data_before['appointment_type_id'] ) ) { + return $data; + } + + $data['appointment_type_id'] = $data_before['appointment_type_id']; + + return $this->set_custom_web_meeting_url( $data ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/class-wp-admin.php b/wp-content/plugins/simply-schedule-appointments/includes/class-wp-admin.php new file mode 100644 index 0000000..3b5e79e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/class-wp-admin.php @@ -0,0 +1,463 @@ +plugin = $plugin; + $this->hooks(); + } + + /** + * Initiate our hooks. + * + * @since 0.0.3 + */ + public function hooks() { + add_action( 'admin_menu', array( $this, 'register_admin_menu' ) ); + + add_action( 'admin_init', array( $this, 'ssa_gravity_forms_editor_styles' ), 10, 0 ); + add_action( 'admin_init', array( $this, 'dashboard_upcoming_appointments_widget' ) ); + add_action( 'admin_init', array( $this, 'upcoming_appointments_widget' ) ); + add_action( 'admin_init', array( $this, 'maybe_redirect' ), 0 ); + add_action( 'admin_init', array( $this, 'store_enqueued_styles_scripts' ), 0 ); + add_action( 'admin_enqueue_scripts', array( $this, 'disable_third_party_styles_scripts' ), 9999999 ); + add_action( 'admin_body_class', array( $this, 'body_class' ) ); + + add_action( 'admin_print_scripts', array( $this, 'remove_admin_notices' ) ); + add_filter( 'plugin_action_links', array( $this, 'plugin_action_upgrade_link'), 10, 2 ); + + // rest api + add_action( 'rest_api_init', array( $this, 'register_wp_endpoints' ) ); + + } + + public function register_wp_endpoints(){ + $namespace = 'ssa/v1'; + + register_rest_route( $namespace, '/pages', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_wp_pages' ), + 'permission_callback' => array( $this, 'get_wp_pages_permissions_check' ), + 'args' => array( + 'context' => array( + 'default' => 'view', + ), + ), + ), + ) ); + } + + public function get_wp_pages_permissions_check( $request ) { + return current_user_can( 'ssa_manage_site_settings' ); + } + + public function get_wp_pages( $request ) { + $args = array( + 'sort_order' => 'ASC', + 'sort_column' => 'title', + ); + + $pages = get_pages($args); + + // Adjust structure to match what the front-end expects + foreach ($pages as $key => $page) { + $pages[$key]->id = $page->ID; + $pages[$key]->title = array( + 'rendered' => $page->post_title, + ); + } + + return rest_ensure_response( $pages ); + } + + public function ssa_gravity_forms_editor_styles() { + wp_enqueue_style( 'ssa_gravity_forms_editor_styles', $this->plugin->url( 'assets/css/ssa-gravity-forms-editor-styles.css' ), array(), Simply_Schedule_Appointments::VERSION ); + } + + public function dashboard_upcoming_appointments_widget() { + wp_enqueue_style( 'dashboard_upcoming_appointments_widget_styles', $this->plugin->url( 'assets/css/dashboard-upcoming-appointments-widget.css' ), array(), Simply_Schedule_Appointments::VERSION ); + } + + public function upcoming_appointments_widget() { + wp_enqueue_style( 'upcoming_appointments_widget_styles', $this->plugin->url( 'assets/css/upcoming-appointments.css' ), array(), Simply_Schedule_Appointments::VERSION ); + } + + public function maybe_redirect() { + if ( !empty( $_GET['page'] ) && $_GET['page'] === 'simply-schedule-appointments-settings' ) { + wp_redirect( $this->url( '/ssa/settings/all' ) ); + exit; + } + + if ( !empty( $_GET['page'] ) && $_GET['page'] === 'simply-schedule-appointments-types' ) { + wp_redirect( $this->url( '/ssa/appointment-types/all' ) ); + exit; + } + + if ( !empty( $_GET['page'] ) && $_GET['page'] === 'simply-schedule-appointments-support' ) { + wp_redirect( $this->url( '/ssa/support' ) ); + exit; + } + + if ( !empty( $_GET['page'] ) && $_GET['page'] === 'simply-schedule-appointments-team' ) { + wp_redirect( $this->url( '/ssa/settings/staff/all' ) ); + exit; + } + + if ( !empty( $_GET['page'] ) && $_GET['page'] === 'simply-schedule-appointments-ssa-support-admin' ) { + wp_redirect( admin_url( 'admin.php?page=simply-schedule-appointments&ssa-support-admin=1' ) ); + exit; + } + } + + public function url( $path='' ) { + $url = admin_url( 'admin.php?page=simply-schedule-appointments' ); + if ( empty( $path ) ) { + return $url; + } + + $path = ltrim( $path, '/' ); + $url .= '/#/'.$path; + + return $url; + } + + public function remove_admin_notices() { + if ( !$this->is_admin_page() ) { + return; + } + global $wp_filter; + if (is_user_admin()) { + if (isset($wp_filter['user_admin_notices'])) { + unset($wp_filter['user_admin_notices']); + } + } elseif (isset($wp_filter['admin_notices'])) { + unset($wp_filter['admin_notices']); + } + if (isset($wp_filter['all_admin_notices'])) { + unset($wp_filter['all_admin_notices']); + } + } + + public function is_admin_page() { + if ( empty( $_GET['page'] ) || strpos( $_GET['page'], 'simply-schedule-appointments' ) === false ) { + return false; + } + + return true; + } + + public function store_enqueued_styles_scripts() { + if ( !$this->is_admin_page() ) { + return; + } + + global $wp_scripts; + $this->script_handle_whitelist = $wp_scripts->queue; + } + + public function disable_third_party_styles_scripts() { + if ( ! $this->is_admin_page() ) { + return; + } + + if ( $this->should_restrict_access_to_admin_page() ) { + return; + } + + $custom_whitelist = array( + + ); + + global $wp_scripts; + foreach ($wp_scripts->queue as $key => $handle) { + if ( strpos( $handle, 'ssa-' ) === 0 ) { + continue; + } + + if ( in_array( $handle, $this->script_handle_whitelist ) || in_array( $handle, $custom_whitelist ) ) { + continue; + } + + wp_dequeue_script( $handle ); + } + + global $wp_styles; + foreach ($wp_styles->queue as $key => $handle) { + if ( strpos( $handle, 'ssa-' ) === 0 ) { + continue; + } + + if ( in_array( $handle, $this->style_handle_whitelist ) || in_array( $handle, $custom_whitelist ) ) { + continue; + } + + wp_dequeue_style( $handle ); + } + + } + + public function plugin_action_upgrade_link( $links, $file ) { + if ( strpos($file, 'simply-schedule-appointments.php') === false ) { + return $links; + } + + if ( $this->plugin->get_current_edition() !== 1 ) { + return $links; + } + + $ssa_pricing_url = 'https://simplyscheduleappointments.com/pricing/?utm_source=plugin&utm_medium=ads&utm_campaign=upgrade&utm_content=upgrade-plugin-listing'; + + echo ""; + + $upgrade_link = '' . __('Upgrade', 'simply-schedule-appointments') . ''; + + $links['upgrade'] = $upgrade_link; + return $links; + + } + + public function register_admin_menu() { + add_menu_page( + __('Appointments', 'simply-schedule-appointments' ), + __('Appointments', 'simply-schedule-appointments' ), + 'ssa_manage_appointments', + 'simply-schedule-appointments', + array( $this, 'render_admin_page' ), + 'dashicons-calendar', + null + ); + + $settings = $this->plugin->settings->get(); + if ( !empty( $settings['global']['wizard_completed'] ) ) { + add_submenu_page( + 'simply-schedule-appointments', + __('Appointment Types', 'simply-schedule-appointments' ), + __('Appointment Types', 'simply-schedule-appointments' ), + 'ssa_manage_appointment_types', + 'simply-schedule-appointments-types', + array( $this, 'render_admin_page' ) + ); + + if( class_exists( 'SSA_Staff' ) && $this->plugin->settings_installed->is_enabled( 'staff' ) ) { + add_submenu_page( + 'simply-schedule-appointments', + __('Team', 'simply-schedule-appointments' ), + __('Team', 'simply-schedule-appointments' ), + 'ssa_manage_staff', + 'simply-schedule-appointments-team', + array( $this, 'render_admin_page' ) + ); + } + + add_submenu_page( + 'simply-schedule-appointments', + __('Settings', 'simply-schedule-appointments' ), + __('Settings', 'simply-schedule-appointments' ), + 'ssa_manage_site_settings', + 'simply-schedule-appointments-settings', + array( $this, 'render_admin_page' ) + ); + + if ( SSA_Support::should_display_support_tab() ) { + add_submenu_page( + 'simply-schedule-appointments', + __('Support', 'simply-schedule-appointments' ), + __('Support', 'simply-schedule-appointments' ), + 'ssa_manage_site_settings', + 'simply-schedule-appointments-support', + array( $this, 'render_admin_page' ) + ); + } + } + + } + + public function should_restrict_access_to_admin_page() { + if ( ! current_user_can( 'ssa_manage_others_appointments' ) ) { + if ( ! current_user_can( 'ssa_manage_site_settings' ) ) { + $staff = $this->plugin->staff_model->find_by_user_id( get_current_user_id() ); + if ( empty( $staff['id'] ) ) { + // This is user with the "Team Member" role but who isn't associated to a staff_id + return true; + } else if ( 'publish' !== $staff['status'] ) { + // This is user with the "Team Member" role but is linked to an inactive/deleted Team Member + return true; + } + } + } + + return false; + } + + public function render_admin_page() { + if ( $this->should_restrict_access_to_admin_page() ) { + wp_die( __( 'Please ask your administrator to link your account to an active team member.', 'simply-schedule-appointments' ), __( 'Permission Denied', 'simply-schedule-appointments' ) ); + } + + remove_filter( 'script_loader_tag', 'mesmerize_defer_js_scripts', 11 ); // remove bug with 3rd party "Mesmerize" theme + remove_filter( 'style_loader_tag', 'mesmerize_defer_css_scripts', 11 ); // remove bug with 3rd party "Mesmerize" theme + // + wp_enqueue_style( 'ssa-admin-material-icons', $this->plugin->url('assets/css/material-icons.css'), array(), Simply_Schedule_Appointments::VERSION ); + wp_enqueue_style( 'ssa-admin-vendor', $this->plugin->url('admin-app/dist/static/css/chunk-vendors.css'), array(), Simply_Schedule_Appointments::VERSION ); + wp_enqueue_style( 'ssa-admin-style', $this->plugin->url('admin-app/dist/static/css/app.css'), array('ssa-admin-vendor'), Simply_Schedule_Appointments::VERSION ); + wp_enqueue_style( 'ssa-admin-roboto-font', $this->plugin->url('assets/css/roboto-font.css'), array(), Simply_Schedule_Appointments::VERSION ); + wp_enqueue_style( 'ssa-unsupported-style', $this->plugin->url('assets/css/unsupported.css'), array(), Simply_Schedule_Appointments::VERSION ); + wp_enqueue_style( 'ssa-admin-style-custom', $this->plugin->templates->locate_template_url('admin-app/custom.css'), array(), Simply_Schedule_Appointments::VERSION ); + + wp_enqueue_script( 'ssa-unsupported-script', $this->plugin->url('assets/js/unsupported.js'), array(), Simply_Schedule_Appointments::VERSION); + + wp_enqueue_script( 'ssa-admin-manifest', $this->plugin->url('admin-app/dist/static/js/manifest.js'), array(), Simply_Schedule_Appointments::VERSION, true ); + wp_enqueue_script( 'ssa-admin-vendor', $this->plugin->url('admin-app/dist/static/js/chunk-vendors.js'), array( 'ssa-admin-manifest' ), Simply_Schedule_Appointments::VERSION, true ); + wp_register_script( 'ssa-admin-app', $this->plugin->url('admin-app/dist/static/js/app.js'), array( 'ssa-admin-vendor' ), Simply_Schedule_Appointments::VERSION, true ); + + $pinned_notices = $this->plugin->notices->get_pinned_notices(); + $error_notices = $this->plugin->error_notices->get_error_notices(); + + $settings = $this->plugin->settings->get(); + $settings = $this->plugin->settings->remove_unauthorized_settings_for_current_user( $settings ); + + $appointment_types = $this->plugin->appointment_type_model->get_all_appointment_types(); + $appointment_type_labels = $this->plugin->appointment_type_label_model->query(); + + wp_localize_script( 'ssa-admin-app', 'ssa', + $this->plugin->bootstrap->get_api_vars() ); + wp_localize_script( 'ssa-admin-app', 'ssa_pinned_notices', $pinned_notices ); + wp_localize_script( 'ssa-admin-app', 'ssa_error_notices', $error_notices ); + wp_localize_script( 'ssa-admin-app', 'ssa_settings', $settings ); + wp_localize_script( 'ssa-admin-app', 'ssa_appointment_types', $appointment_types ); + wp_localize_script( 'ssa-admin-app', 'ssa_appointment_type_labels', $appointment_type_labels ); + wp_localize_script( 'ssa-admin-app', 'ssa_translations', $this->get_translations() ); + wp_enqueue_script( 'ssa-admin-app' ); + echo ' + +
+ +
+ + '; + } + + public function get_translations() { + include $this->plugin->dir( 'languages/admin-app-translations.php' ); + return $translations; + } + + public function body_class( $classes ) { + if ( !$this->is_admin_page() ) { + return $classes; + } + + $classes = "$classes ssa-admin-app "; // adding a trailing space for conflicts with poorly coded plugins + + return $classes; + } + + public function maybe_create_booking_page() { + $settings = $this->plugin->settings->get(); + if ( empty( $settings['global']['booking_post_id'] ) ) { + return $this->create_booking_page(); + } + + $appointment = $this->plugin->appointment_model->get( $settings['global']['booking_post_id'] ); + if ( empty( $appointment['id'] ) ) { + return $this->create_booking_page(); + } + + return $settings['global']['booking_post_id']; + } + + public function create_booking_page() { + $wp_error = null; + $post_id = wp_insert_post( array( + 'post_type' => 'page', + 'post_status' => 'publish', + 'post_title' => 'Schedule an Appointment', + 'post_name' => 'appointments', + 'post_content' => '[ssa_booking]', + ), $wp_error ); + + $settings = $this->plugin->settings->get(); + $settings['global']['booking_post_id'] = $post_id; + $this->plugin->settings->update_section( 'global', $settings['global'] ); + + return $post_id; + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/SsaDiviModule.php b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/SsaDiviModule.php new file mode 100644 index 0000000..eaa2672 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/SsaDiviModule.php @@ -0,0 +1,50 @@ +plugin_dir = plugin_dir_path( __FILE__ ); + $this->plugin_dir_url = plugin_dir_url( $this->plugin_dir ); + + parent::__construct( $name, $args ); + } +} + +// Only instantiate for Divi 4 (not Divi 5) +// In Divi 5, this would cause duplicate entries in the migrator +if ( ! defined( 'ET_BUILDER_PRODUCT_VERSION' ) || version_compare( ET_BUILDER_PRODUCT_VERSION, '5.0', '<' ) ) { + new SSADM_SsaDiviModule; +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.js b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.js new file mode 100644 index 0000000..121d4c1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.js @@ -0,0 +1,9 @@ +// External Dependencies +import $ from 'jquery'; + +// Internal Dependencies +import modules from './modules'; + +$(window).on('et_builder_api_ready', (event, API) => { + API.registerModules(modules); +}); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.php b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.php new file mode 100644 index 0000000..07f5dae --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/loader.php @@ -0,0 +1,14 @@ + { + this.setState(state => { + return { + output: purify.sanitize(response, { + ADD_TAGS: ["iframe"], + ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling"] + }) + }; + }); + }) + .fail(xhr => { + console.log(xhr); + }); + } + + getRenderedOutput() { + return { + __html: this.state.output + }; + } + + componentDidUpdate(prevProps) { + if ( + this.state.output !== null && + prevProps.appointment_type === this.props.appointment_type && + prevProps.font_family === this.props.font_family && + prevProps.accent_color === this.props.accent_color && + prevProps.background_color === this.props.background_color && + prevProps.padding === this.props.padding && + prevProps.padding_css_unit === this.props.padding_css_unit + ) { + return; + } + const params = this.propsToParams(); + this.getShortcodeOutput(params); + } + + render() { + return ( +
+
+
+ ); + } +} + +export default SSADiviBookingModule; diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/SSADiviBookingModule/SSADiviBookingModule.php b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/SSADiviBookingModule/SSADiviBookingModule.php new file mode 100644 index 0000000..79fe321 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/includes/modules/SSADiviBookingModule/SSADiviBookingModule.php @@ -0,0 +1,184 @@ + 'https://simplyscheduleappointments.com', + 'author' => 'Simply Schedule Appointments', + 'author_uri' => 'https://simplyscheduleappointments.com', + ); + + public function init() { + $this->name = esc_html__( 'Appointment Booking', 'simply-schedule-appointments' ); + $this->plural = esc_html__( 'Appointment Bookings', 'simply-schedule-appointments' ); + $this->slug = 'ssa_divi_booking_module'; + // $this->icon = '📅'; + } + + public function get_fields() { + $appointment_types = ssa()->appointment_type_model->query( array( + 'number' => -1, + 'status' => 'publish', + ) ); + + $map_appointment_type_ids_to_labels = wp_list_pluck( $appointment_types, 'title', 'slug' ); + $map_appointment_type_ids_to_labels = array_reverse( $map_appointment_type_ids_to_labels, true ); + $map_appointment_type_ids_to_labels[''] = 'All'; + $map_appointment_type_ids_to_labels = array_reverse( $map_appointment_type_ids_to_labels, true ); + + return array( + 'appointment_type' => array( + 'label' => __( 'Appointment Type', 'simply-schedule-appointments' ), + 'type' => 'select', + 'options' => $map_appointment_type_ids_to_labels, + 'tab_slug' => 'general', + 'toggle_slug' => 'booking_type' + ), + 'accent_color' => array( + 'label' => __( 'Accent Color', 'simply-schedule-appointments' ), + 'type' => 'color-alpha', + 'custom_color' => true, + 'tab_slug' => 'advanced', + 'toggle_slug' => 'colors' + ), + 'background_color' => array( + 'label' => __( 'Background Color', 'simply-schedule-appointments' ), + 'type' => 'color-alpha', + 'custom_color' => true, + 'tab_slug' => 'advanced', + 'toggle_slug' => 'colors' + ), + 'font_family' => array( + 'label' => __( 'Font Family', 'simply-schedule-appointments' ), + 'type' => 'font', + 'disable_toggle' => true, + 'hide_font_size' => true, + 'hide_letter_spacing' => true, + 'hide_line_height' => true, + 'hide_text_color' => true, + 'hide_text_shadow' => true, + 'tab_slug' => 'advanced', + 'toggle_slug' => 'font_family' + ), + 'padding' => array( + 'label' => __( 'Padding', 'simply-schedule-appointments' ), + 'type' => 'range', + 'disable_toggle' => true, + 'range_settings' => array( + 'min' => 0, + 'max' => 100 + ), + 'tab_slug' => 'advanced', + 'toggle_slug' => 'padding' + ), + 'padding_css_unit' => array( + 'label' => __( 'Padding Unit', 'simply-schedule-appointments' ), + 'type' => 'select', + 'options' => array( + 'px' => 'px', + 'em' => 'em', + 'rem' => 'rem', + 'vw' => 'vw', + '%' => '%', + ), + 'tab_slug' => 'advanced', + 'toggle_slug' => 'padding' + ), + ); + } + + public function get_advanced_fields_config() { + return array( + 'background' => false, + 'borders' => false, + 'box_shadow' => false, + 'button' => false, + 'filters' => false, + 'transform' => false, + 'animation' => false, + 'margin_padding' => false, + 'max_width' => false, + 'fonts' => false, + 'text' => false, + ); + } + + public function get_settings_modal_toggles(){ + return array( + 'general' => array( + 'toggles' => array( + 'booking_type' => array( + 'title' => esc_html__( 'Booking Type', 'simply-schedule-appointments' ) + ) + ) + ), + 'advanced' => array( + 'toggles' => array( + 'font_family' => array( + 'title' => esc_html__( 'Font Family', 'simply-schedule-appointments' ), + ), + 'colors' => array( + 'title' => esc_html__( 'Colors', 'simply-schedule-appointments' ), + ), + 'padding' => array( + 'title' => esc_html__( 'Padding', 'simply-schedule-appointments' ), + ), + ), + ), + ); + } + + public function parse_props_to_shortcode_params( $props = array() ) { + $args = array(); + + if( $props['appointment_type'] ) { + $args['type'] = $props['appointment_type']; + } + + if( $props['accent_color'] ) { + $args['accent_color'] = ltrim( $props['accent_color'], '#' ); + } + + if( $props['background_color'] ) { + $args['background'] = ltrim( $props['background_color'], '#' ); + } + + if( $props['font_family'] ) { + $font_props = explode( '|', $props['font_family'] ); + $args['font'] = $font_props[0]; + } + + if( $props['padding'] ) { + $unit = isset( $props['padding_css_unit'] ) && $props['padding_css_unit'] ? $props['padding_css_unit'] : 'px'; + $args['padding'] = $props['padding'] . $unit; + } + + return $args; + } + + public function render( $attrs, $content, $render_slug ) { + $attrs = $this->parse_props_to_shortcode_params( $this->props ); + ob_start(); ?> +
+
+ shortcodes->ssa_booking( $attrs ); ?> +
+
+ 1?n-1:0),o=1;o/gm),P=i(/^data-[\-\w.\u00B7-\uFFFF]/),I=i(/^aria-[\-\w]+$/),U=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=i(/^(?:\w+script|data):/i),W=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g),B="function"===typeof Symbol&&"symbol"===a(Symbol.iterator)?function(e){return a(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":a(e)};function q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:K(),n=function(t){return e(t)};if(n.version="2.0.11",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var i=t.document,a=!1,l=t.document,c=t.DocumentFragment,s=t.HTMLTemplateElement,x=t.Node,k=t.NodeFilter,Y=t.NamedNodeMap,Q=void 0===Y?t.NamedNodeMap||t.MozNamedAttrMap:Y,X=t.Text,$=t.Comment,J=t.DOMParser,Z=t.trustedTypes;if("function"===typeof s){var ee=l.createElement("template");ee.content&&ee.content.ownerDocument&&(l=ee.content.ownerDocument)}var te=V(Z,i),ne=te?te.createHTML(""):"",re=l,oe=re.implementation,ie=re.createNodeIterator,ae=re.getElementsByTagName,le=re.createDocumentFragment,ce=i.importNode,se={};n.isSupported=oe&&"undefined"!==typeof oe.createHTMLDocument&&9!==l.documentMode;var ue=j,pe=z,fe=P,de=I,me=G,ye=W,he=U,ge=null,be=w({},[].concat(q(E),q(L),q(D),q(M),q(R))),ve=null,Te=w({},[].concat(q(N),q(H),q(C),q(F))),_e=null,Ae=null,Se=!0,xe=!0,ke=!1,we=!1,Oe=!1,Ee=!1,Le=!1,De=!1,Me=!1,Re=!1,Ne=!1,He=!1,Ce=!0,Fe=!0,je=!1,ze={},Pe=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ie=null,Ue=w({},["audio","video","img","source","image","track"]),Ge=null,We=w({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),Be=null,qe=l.createElement("form"),Ke=function(e){Be&&Be===e||(e&&"object"===("undefined"===typeof e?"undefined":B(e))||(e={}),ge="ALLOWED_TAGS"in e?w({},e.ALLOWED_TAGS):be,ve="ALLOWED_ATTR"in e?w({},e.ALLOWED_ATTR):Te,Ge="ADD_URI_SAFE_ATTR"in e?w(O(We),e.ADD_URI_SAFE_ATTR):We,Ie="ADD_DATA_URI_TAGS"in e?w(O(Ue),e.ADD_DATA_URI_TAGS):Ue,_e="FORBID_TAGS"in e?w({},e.FORBID_TAGS):{},Ae="FORBID_ATTR"in e?w({},e.FORBID_ATTR):{},ze="USE_PROFILES"in e&&e.USE_PROFILES,Se=!1!==e.ALLOW_ARIA_ATTR,xe=!1!==e.ALLOW_DATA_ATTR,ke=e.ALLOW_UNKNOWN_PROTOCOLS||!1,we=e.SAFE_FOR_JQUERY||!1,Oe=e.SAFE_FOR_TEMPLATES||!1,Ee=e.WHOLE_DOCUMENT||!1,Me=e.RETURN_DOM||!1,Re=e.RETURN_DOM_FRAGMENT||!1,Ne=e.RETURN_DOM_IMPORT||!1,He=e.RETURN_TRUSTED_TYPE||!1,De=e.FORCE_BODY||!1,Ce=!1!==e.SANITIZE_DOM,Fe=!1!==e.KEEP_CONTENT,je=e.IN_PLACE||!1,he=e.ALLOWED_URI_REGEXP||he,Oe&&(xe=!1),Re&&(Me=!0),ze&&(ge=w({},[].concat(q(R))),ve=[],!0===ze.html&&(w(ge,E),w(ve,N)),!0===ze.svg&&(w(ge,L),w(ve,H),w(ve,F)),!0===ze.svgFilters&&(w(ge,D),w(ve,H),w(ve,F)),!0===ze.mathMl&&(w(ge,M),w(ve,C),w(ve,F))),e.ADD_TAGS&&(ge===be&&(ge=O(ge)),w(ge,e.ADD_TAGS)),e.ADD_ATTR&&(ve===Te&&(ve=O(ve)),w(ve,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&w(Ge,e.ADD_URI_SAFE_ATTR),Fe&&(ge["#text"]=!0),Ee&&w(ge,["html","head","body"]),ge.table&&(w(ge,["tbody"]),delete _e.tbody),o&&o(e),Be=e)},Ve=function(e){m(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=ne}},Ye=function(e,t){try{m(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){m(n.removed,{attribute:null,from:t})}t.removeAttribute(e)},Qe=function(e){var t=void 0,n=void 0;if(De)e=""+e;else{var r=g(e,/^[\r\n\t ]+/);n=r&&r[0]}var o=te?te.createHTML(e):e;try{t=(new J).parseFromString(o,"text/html")}catch(e){}if(a&&w(_e,["title"]),!t||!t.documentElement){var i=(t=oe.createHTMLDocument("")).body;i.parentNode.removeChild(i.parentNode.firstElementChild),i.outerHTML=o}return e&&n&&t.body.insertBefore(l.createTextNode(n),t.body.childNodes[0]||null),ae.call(t,Ee?"html":"body")[0]};n.isSupported&&function(){try{var e=Qe("</title><img>");_(/<\/title/,e.querySelector("title").innerHTML)&&(a=!0)}catch(e){}}();var Xe=function(e){return ie.call(e.ownerDocument||e,e,k.SHOW_ELEMENT|k.SHOW_COMMENT|k.SHOW_TEXT,function(){return k.FILTER_ACCEPT},!1)},$e=function(e){return"object"===("undefined"===typeof x?"undefined":B(x))?e instanceof x:e&&"object"===("undefined"===typeof e?"undefined":B(e))&&"number"===typeof e.nodeType&&"string"===typeof e.nodeName},Je=function(e,t,r){se[e]&&u(se[e],function(e){e.call(n,t,r,Be)})},Ze=function(e){var t,r=void 0;if(Je("beforeSanitizeElements",e,null),!((t=e)instanceof X||t instanceof $)&&!("string"===typeof t.nodeName&&"string"===typeof t.textContent&&"function"===typeof t.removeChild&&t.attributes instanceof Q&&"function"===typeof t.removeAttribute&&"function"===typeof t.setAttribute&&"string"===typeof t.namespaceURI))return Ve(e),!0;var o=h(e.nodeName);if(Je("uponSanitizeElement",e,{tagName:o,allowedTags:ge}),("svg"===o||"math"===o)&&0!==e.querySelectorAll("p, br").length)return Ve(e),!0;if(!ge[o]||_e[o]){if(Fe&&!Pe[o]&&"function"===typeof e.insertAdjacentHTML)try{var i=e.innerHTML;e.insertAdjacentHTML("AfterEnd",te?te.createHTML(i):i)}catch(e){}return Ve(e),!0}return"noscript"===o&&_(/<\/noscript/i,e.innerHTML)?(Ve(e),!0):"noembed"===o&&_(/<\/noembed/i,e.innerHTML)?(Ve(e),!0):(!we||e.firstElementChild||e.content&&e.content.firstElementChild||!_(/</g,e.textContent)||(m(n.removed,{element:e.cloneNode()}),e.innerHTML?e.innerHTML=b(e.innerHTML,/</g,"<"):e.innerHTML=b(e.textContent,/</g,"<")),Oe&&3===e.nodeType&&(r=e.textContent,r=b(r,ue," "),r=b(r,pe," "),e.textContent!==r&&(m(n.removed,{element:e.cloneNode()}),e.textContent=r)),Je("afterSanitizeElements",e,null),!1)},et=function(e,t,n){if(Ce&&("id"===t||"name"===t)&&(n in l||n in qe))return!1;if(xe&&_(fe,t));else if(Se&&_(de,t));else{if(!ve[t]||Ae[t])return!1;if(Ge[t]);else if(_(he,b(n,ye,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==v(n,"data:")||!Ie[e])if(ke&&!_(me,b(n,ye,"")));else if(n)return!1}return!0},tt=function(e){var t=void 0,o=void 0,i=void 0,a=void 0,l=void 0;Je("beforeSanitizeAttributes",e,null);var c=e.attributes;if(c){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ve};for(l=c.length;l--;){var u=t=c[l],m=u.name,g=u.namespaceURI;if(o=T(t.value),i=h(m),s.attrName=i,s.attrValue=o,s.keepAttr=!0,s.forceKeepAttr=void 0,Je("uponSanitizeAttribute",e,s),o=s.attrValue,!s.forceKeepAttr){if("name"===i&&"IMG"===e.nodeName&&c.id)a=c.id,c=y(c,[]),Ye("id",e),Ye(m,e),p(c,a)>l&&e.setAttribute("id",a.value);else{if("INPUT"===e.nodeName&&"type"===i&&"file"===o&&s.keepAttr&&(ve[i]||!Ae[i]))continue;"id"===m&&e.setAttribute(m,""),Ye(m,e)}if(s.keepAttr)if(we&&_(/\/>/i,o))Ye(m,e);else if(_(/svg|math/i,e.namespaceURI)&&_(A("</("+f(r(Pe),"|")+")","i"),o))Ye(m,e);else{Oe&&(o=b(o,ue," "),o=b(o,pe," "));var v=e.nodeName.toLowerCase();if(et(v,i,o))try{g?e.setAttributeNS(g,m,o):e.setAttribute(m,o),d(n.removed)}catch(e){}}}}Je("afterSanitizeAttributes",e,null)}},nt=function e(t){var n=void 0,r=Xe(t);for(Je("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)Je("uponSanitizeShadowNode",n,null),Ze(n)||(n.content instanceof c&&e(n.content),tt(n));Je("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e,r){var o=void 0,a=void 0,l=void 0,s=void 0,u=void 0;if(e||(e="\x3c!--\x3e"),"string"!==typeof e&&!$e(e)){if("function"!==typeof e.toString)throw S("toString is not a function");if("string"!==typeof(e=e.toString()))throw S("dirty is not a string, aborting")}if(!n.isSupported){if("object"===B(t.toStaticHTML)||"function"===typeof t.toStaticHTML){if("string"===typeof e)return t.toStaticHTML(e);if($e(e))return t.toStaticHTML(e.outerHTML)}return e}if(Le||Ke(r),n.removed=[],"string"===typeof e&&(je=!1),je);else if(e instanceof x)1===(a=(o=Qe("\x3c!--\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===a.nodeName?o=a:"HTML"===a.nodeName?o=a:o.appendChild(a);else{if(!Me&&!Oe&&!Ee&&He&&-1===e.indexOf("<"))return te?te.createHTML(e):e;if(!(o=Qe(e)))return Me?null:ne}o&&De&&Ve(o.firstChild);for(var p=Xe(je?e:o);l=p.nextNode();)3===l.nodeType&&l===s||Ze(l)||(l.content instanceof c&&nt(l.content),tt(l),s=l);if(s=null,je)return e;if(Me){if(Re)for(u=le.call(o.ownerDocument);o.firstChild;)u.appendChild(o.firstChild);else u=o;return Ne&&(u=ce.call(i,u,!0)),u}var f=Ee?o.outerHTML:o.innerHTML;return Oe&&(f=b(f,ue," "),f=b(f,pe," ")),te&&He?te.createHTML(f):f},n.setConfig=function(e){Ke(e),Le=!0},n.clearConfig=function(){Be=null,Le=!1},n.isValidAttribute=function(e,t,n){Be||Ke({});var r=h(e),o=h(t);return et(r,o,n)},n.addHook=function(e,t){"function"===typeof t&&(se[e]=se[e]||[],m(se[e],t))},n.removeHook=function(e){se[e]&&d(se[e])},n.removeHooks=function(e){se[e]&&(se[e]=[])},n.removeAllHooks=function(){se={}},n}()},"object"===a(t)&&"undefined"!==typeof e?e.exports=i():void 0===(o="function"===typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)}]); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend-bundle.min.js b/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend-bundle.min.js new file mode 100644 index 0000000..ed3f560 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend-bundle.min.js @@ -0,0 +1 @@ +!function(n){var t={};function r(e){if(t[e])return t[e].exports;var o=t[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e})},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="/",r(r.s=8)}({8:function(n,t,r){n.exports=r(9)},9:function(n,t){jQuery(function(n){})}}); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend.js b/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend.js new file mode 100644 index 0000000..870fc68 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi/scripts/frontend.js @@ -0,0 +1,3 @@ +// This script is loaded both on the frontend page and in the Visual Builder. + +jQuery(function($) {}); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style-dbp.min.css b/wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style-dbp.min.css new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style.min.css b/wp-content/plugins/simply-schedule-appointments/includes/divi/styles/style.min.css new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/build/ssa-booking-module.js b/wp-content/plugins/simply-schedule-appointments/includes/divi5/build/ssa-booking-module.js new file mode 100644 index 0000000..49f5ca1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/build/ssa-booking-module.js @@ -0,0 +1,2 @@ +/*! For license information please see ssa-booking-module.js.LICENSE.txt */ +(()=>{"use strict";var e,t={};function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function n(){var e,t,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function l(o,n,i,a){var l=n&&n.prototype instanceof d?n:d,c=Object.create(l.prototype);return r(c,"_invoke",function(o,n,r){var i,a,l,d=0,c=r||[],s=!1,p={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,o){return i=t,a=0,l=e,p.n=o,u}};function f(o,n){for(a=o,l=n,t=0;!s&&d&&!r&&t<c.length;t++){var r,i=c[t],f=p.p,m=i[2];o>3?(r=m===n)&&(l=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=f&&((r=o<2&&f<i[1])?(a=0,p.v=n,p.n=i[1]):f<m&&(r=o<3||i[0]>n||n>m)&&(i[4]=o,i[5]=n,p.n=m,a=0))}if(r||o>1)return u;throw s=!0,n}return function(r,c,m){if(d>1)throw TypeError("Generator is already running");for(s&&1===c&&f(c,m),a=c,l=m;(t=a<2?e:l)||!s;){i||(a?a<3?(a>1&&(p.n=-1),f(a,l)):p.n=l:p.v=l);try{if(d=2,i){if(a||(r="next"),t=i[r]){if(!(t=t.call(i,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,a<2&&(a=0)}else 1===a&&(t=i.return)&&t.call(i),a<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=e}else if((t=(s=p.n<0)?l:o.call(n,p))!==u)break}catch(t){i=e,a=1,l=t}finally{d=1}}return{value:t,done:s}}}(o,i,a),!0),c}var u={};function d(){}function c(){}function s(){}t=Object.getPrototypeOf;var p=[][i]?t(t([][i]())):(r(t={},i,function(){return this}),t),f=s.prototype=d.prototype=Object.create(p);function m(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return c.prototype=s,r(f,"constructor",s),r(s,"constructor",c),c.displayName="GeneratorFunction",r(s,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,i,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(n=function(){return{w:l,m}})()}function r(e,t,o,n){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}r=function(e,t,o,n){function a(t,o){r(e,t,function(e){return this._invoke(t,o,e)})}t?i?i(e,t,{value:o,enumerable:!n,configurable:!n,writable:!n}):e[t]=o:(a("next",0),a("throw",1),a("return",2))},r(e,t,o,n)}function i(e,t,o,n,r,i,a){try{var l=e[i](a),u=l.value}catch(e){return void o(e)}l.done?t(u):Promise.resolve(u).then(n,r)}function a(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}function u(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(u=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},t.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var s=window.React,p=s.Component,f=((null===(e=window)||void 0===e||null===(e=e.divi)||void 0===e?void 0:e.module)||{}).ModuleContainer,m=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=function(e,t,n){return t=d(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,u()?Reflect.construct(t,n||[],d(e).constructor):t.apply(e,n))}(this,t,[e])).state={bookingHTML:null,isLoading:!0},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,l=[{key:"componentDidMount",value:function(){this.fetchBookingForm()}},{key:"componentDidUpdate",value:function(e){var t;((null==e?void 0:e.appointmentType)||"")!==((null===(t=this.props)||void 0===t?void 0:t.appointmentType)||"")&&this.fetchBookingForm()}},{key:"fetchBookingForm",value:(p=n().m(function e(){var t,o,r,i,a,l,u;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return this.setState({isLoading:!0}),t=this.props.appointmentType||"",o=t?'type="'.concat(t,'"'):"",r="[ssa_booking ".concat(o,"]"),e.p=1,e.n=2,fetch("".concat((null===(i=window.wpApiSettings)||void 0===i?void 0:i.root)||"/wp-json/","ssa/v1/render-shortcode"),{method:"POST",headers:{"X-WP-Nonce":(null===(a=window.wpApiSettings)||void 0===a?void 0:a.nonce)||"","Content-Type":"application/json"},body:JSON.stringify({shortcode:r})});case 2:return l=e.v,e.n=3,l.json();case 3:u=e.v,this.setState({bookingHTML:u.html||u,isLoading:!1}),e.n=5;break;case 4:e.p=4,e.v,this.setState({bookingHTML:'<div style="padding: 20px; color: red;">Error loading booking form</div>',isLoading:!1});case 5:return e.a(2)}},e,this,[[1,4]])}),f=function(){var e=this,t=arguments;return new Promise(function(o,n){var r=p.apply(e,t);function a(e){i(r,o,n,a,l,"next",e)}function l(e){i(r,o,n,a,l,"throw",e)}a(void 0)})},function(){return f.apply(this,arguments)})},{key:"render",value:function(){var e=this.state,t=e.bookingHTML;return e.isLoading?s.createElement("div",{style:{padding:"40px",textAlign:"center",color:"#666"}},"Loading booking form..."):s.createElement("div",{dangerouslySetInnerHTML:{__html:t}})}}],l&&a(r.prototype,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,l,p,f}(p);const v=React;var y,b,g,h,w,_=t.n(v),k=(null===(y=window)||void 0===y||null===(y=y.vendor)||void 0===y||null===(y=y.wp)||void 0===y||null===(y=y.i18n)||void 0===y?void 0:y.__)||(null===(b=window)||void 0===b||null===(b=b.wp)||void 0===b||null===(b=b.i18n)||void 0===b?void 0:b.__)||function(e){return e},S=((null===(g=window)||void 0===g||null===(g=g.divi)||void 0===g?void 0:g.module)||{}).FieldContainer,O=((null===(h=window)||void 0===h||null===(h=h.divi)||void 0===h?void 0:h.modal)||{}).GroupContainer,T=((null===(w=window)||void 0===w||null===(w=w.divi)||void 0===w?void 0:w.fieldLibrary)||{}).SelectContainer;const j=JSON.parse('{"name":"ssa/booking","d4Shortcode":"ssa_divi_booking_module","title":"SSA Appointment Booking","titles":"SSA Appointment Bookings","moduleIcon":"calendar-alt","category":"module","attributes":{"type":{"type":"string","default":""},"module":{"type":"object","default":{"innerContent":{"appointmentType":""}},"settings":{"innerContent":{},"meta":{},"advanced":{},"decoration":{"background":{},"border":{},"spacing":{}}}}},"settings":{"content":"custom","design":"auto","advanced":"auto","groups":{"contentText":{"panel":"content","priority":10,"groupName":"text","component":{"name":"divi/composite","props":{"groupLabel":"Settings"}}}}}}');var P,x=window.divi.moduleLibrary.registerModule,E=(null===(P=window)||void 0===P||null===(P=P.vendor)||void 0===P||null===(P=P.wp)||void 0===P?void 0:P.hooks).addAction,C={settings:{content:function(e){var t=window.ssaAppointmentTypes||[{label:"All Types",value:""}],o={};return Array.isArray(t)&&t.forEach(function(e){o[String(e.value)]={label:String(e.label),value:String(e.value)}}),_().createElement(_().Fragment,null,_().createElement(O,{id:"ssa_booking_settings",title:k("Booking Settings","simply-schedule-appointments")},_().createElement(S,{attrName:"module.innerContent.appointmentType",label:k("Appointment Type","simply-schedule-appointments"),description:k("Select which appointment type to display","simply-schedule-appointments"),features:{sticky:!1}},_().createElement(T,{options:o}))))}},renderers:{edit:function(e){var t,o=e.attrs,n=e.elements,r=e.id,i=e.name,a=(null==o||null===(t=o.module)||void 0===t||null===(t=t.innerContent)||void 0===t||null===(t=t.appointmentType)||void 0===t||null===(t=t.desktop)||void 0===t?void 0:t.value)||"";return s.createElement(f,{attrs:o,elements:n,id:r,name:i},null==n?void 0:n.styleComponents({attrName:"module"}),s.createElement(m,{appointmentType:a}))}},conversionOutline:{advanced:{admin_label:"module.meta.adminLabel",animation:"module.decoration.animation",background:"module.decoration.background",disabled_on:"module.decoration.disabledOn",module:"module.advanced.htmlAttributes",overflow:"module.decoration.overflow",position_fields:"module.decoration.position",scroll:"module.decoration.scroll",sticky:"module.decoration.sticky",text:"module.advanced.text",transform:"module.decoration.transform",transition:"module.decoration.transition",z_index:"module.decoration.zIndex",margin_padding:"module.decoration.spacing",max_width:"module.decoration.sizing",height:"module.decoration.sizing",link_options:"module.advanced.link",text_shadow:{default:"module.advanced.text.textShadow"},box_shadow:{default:"module.decoration.boxShadow"},borders:{default:"module.decoration.border"},filters:{default:"module.decoration.filters"}},css:{after:"css.*.after",before:"css.*.before",main_element:"css.*.mainElement"},module:{appointment_type:"module.innerContent.appointmentType",accent_color:"module.advanced.customColors.accentColor",background_color:"module.advanced.customColors.backgroundColor",font_family:"module.advanced.typography.fontFamily",padding:"module.decoration.spacing.padding",padding_css_unit:"module.decoration.spacing.paddingUnit"}}};E("divi.moduleLibrary.registerModuleLibraryStore.after","ssa",function(){x(j,C)})})(); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/SsaBookingModule.php b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/SsaBookingModule.php new file mode 100644 index 0000000..1c8c05b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/SsaBookingModule.php @@ -0,0 +1,151 @@ +<?php +/** + * SSA Booking Module for Divi 5 + * + * @package Simply_Schedule_Appointments + * @since TBD + */ + +namespace SSA\Divi5\Module; + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} + +use WP_Block; +use ET\Builder\Packages\ModuleLibrary\ModuleRegistration; + +/** + * SsaBookingModule class. + * + * This class handles the registration and rendering of the SSA Booking module for Divi 5. + * It implements the DependencyInterface so it can be loaded by Divi's dependency management system. + */ +class SsaBookingModule implements \ET\Builder\Framework\DependencyManagement\Interfaces\DependencyInterface { + + /** + * Load the module. + * + * This function adds Divi 5 conversion support to the existing Gutenberg block. + * The block is already registered by SSA_Block_Booking, we just add conversion outline. + * + * @return void + */ + public function load(): void { + $module_json_folder_path = __DIR__; + + add_action( + 'init', + function() use ( $module_json_folder_path ) { + // Process conversion outline to add SSA module to Divi's conversion map + $conversion_outline_file = $module_json_folder_path . '/conversion-outline.json'; + $module_json_file = $module_json_folder_path . '/module.json'; + + if ( file_exists( $conversion_outline_file ) && file_exists( $module_json_file ) ) { + $metadata = json_decode( file_get_contents( $module_json_file ), true ); + if ( $metadata && isset( $metadata['name'] ) && class_exists( '\ET\Builder\Packages\ModuleLibrary\ModuleRegistration' ) ) { + // Process the conversion outline to register in Divi's conversion map + \ET\Builder\Packages\ModuleLibrary\ModuleRegistration::process_conversion_outline( $metadata, $conversion_outline_file ); + } + } + + // Update the render callback for Divi 5 compatibility + $registry = \WP_Block_Type_Registry::get_instance(); + if ( $registry->is_registered( 'ssa/booking' ) ) { + $block = $registry->get_registered( 'ssa/booking' ); + $original_callback = $block->render_callback; + + // Wrap the original callback to handle Divi 5 rendering + $block->render_callback = function( $attrs, $content = '', $block = null ) use ( $original_callback ) { + return self::render_callback( $attrs, $content, $block, [], $original_callback ); + }; + } + }, + 20 // Run after SSA_Block_Booking registration (priority 10) + ); + } + + /** + * Render callback for the SSA Booking module. + * + * This function is responsible for rendering the server-side HTML of the module on the frontend. + * Works for both Gutenberg and Divi 5 contexts. + * + * @since TBD + * + * @param array $attrs Block attributes that were saved by Divi Builder. + * @param string $content The block's content. + * @param WP_Block $block Parsed block object that is being rendered. + * @param array $elements Module elements. + * @param callable $original_callback Original render callback from Gutenberg registration. + * + * @return string The HTML rendered output of the SSA Booking module. + */ + public static function render_callback( $attrs, $content = '', $block = null, $elements = [], $original_callback = null ) { + // Get SSA plugin instance + if ( ! function_exists( 'ssa' ) || ! isset( ssa()->shortcodes ) ) { + return ''; + } + + // Check if this is a Divi 5 context + $is_divi5 = $block && isset( $block->parsed_block['id'] ) && + class_exists( 'ET\Builder\Packages\Module\Module' ); + + // Extract appointment type from attributes (handle both formats) + $appointment_type = ''; + + // Check Divi 5 format first (most specific) + if ( isset( $attrs['module']['innerContent']['appointmentType']['desktop']['value'] ) && + ! empty( $attrs['module']['innerContent']['appointmentType']['desktop']['value'] ) ) { + // Divi 5 format (responsive) + $appointment_type = $attrs['module']['innerContent']['appointmentType']['desktop']['value']; + } elseif ( isset( $attrs['module']['innerContent']['appointmentType'] ) ) { + // Check if it's already a string value (not responsive format) + $apt_value = $attrs['module']['innerContent']['appointmentType']; + if ( is_string( $apt_value ) && ! empty( $apt_value ) ) { + $appointment_type = $apt_value; + } + } elseif ( isset( $attrs['type'] ) && ! empty( $attrs['type'] ) ) { + // Gutenberg format (only use if not empty) + $appointment_type = $attrs['type']; + } + + // Build shortcode attributes + $shortcode_atts = array(); + if ( $appointment_type ) { + $shortcode_atts['type'] = sanitize_text_field( $appointment_type ); + } + + // Get the booking form HTML + $booking_html = ssa()->shortcodes->ssa_booking( $shortcode_atts ); + + // If Divi 5 context, use Module::render() + if ( $is_divi5 ) { + $parent = \ET\Builder\FrontEnd\BlockParser\BlockParserStore::get_parent( + $block->parsed_block['id'], + $block->parsed_block['storeInstance'] + ); + $parent_attrs = $parent->attrs ?? []; + + return \ET\Builder\Packages\Module\Module::render( + [ + 'orderIndex' => $block->parsed_block['orderIndex'], + 'storeInstance' => $block->parsed_block['storeInstance'], + 'id' => $block->parsed_block['id'], + 'name' => $block->block_type->name, + 'moduleCategory' => $block->block_type->category ?? 'module', + 'attrs' => $attrs, + 'elements' => $elements, + 'parentAttrs' => $parent_attrs, + 'parentId' => $parent->id ?? '', + 'parentName' => $parent->blockName ?? '', + 'children' => $booking_html, + 'childrenIds' => [], + ] + ); + } + + // Regular Gutenberg context + return $booking_html; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.js b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.js new file mode 100644 index 0000000..f08ee6b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.js @@ -0,0 +1,68 @@ +/** + * Conversion Outline for SSA Booking Module + * + * This file defines how Divi 4 module attributes are converted to Divi 5 structure. + * It maps the old shortcode attributes to the new module.json structure. + * + * @package Simply_Schedule_Appointments + * @since 6.9.21 + */ + +export const conversionOutline = { + // Map Divi 4 advanced fields to Divi 5 structure + advanced: { + admin_label: 'module.meta.adminLabel', + animation: 'module.decoration.animation', + background: 'module.decoration.background', + disabled_on: 'module.decoration.disabledOn', + module: 'module.advanced.htmlAttributes', + overflow: 'module.decoration.overflow', + position_fields: 'module.decoration.position', + scroll: 'module.decoration.scroll', + sticky: 'module.decoration.sticky', + text: 'module.advanced.text', + transform: 'module.decoration.transform', + transition: 'module.decoration.transition', + z_index: 'module.decoration.zIndex', + margin_padding: 'module.decoration.spacing', + max_width: 'module.decoration.sizing', + height: 'module.decoration.sizing', + link_options: 'module.advanced.link', + text_shadow: { + default: 'module.advanced.text.textShadow', + }, + box_shadow: { + default: 'module.decoration.boxShadow', + }, + borders: { + default: 'module.decoration.border', + }, + filters: { + default: 'module.decoration.filters', + }, + }, + + // Map custom CSS to Divi 5 structure + css: { + after: 'css.*.after', + before: 'css.*.before', + main_element: 'css.*.mainElement', + }, + + // Map SSA-specific module attributes + module: { + // Map Divi 4 'appointment_type' field to Divi 5 structure + appointment_type: 'module.innerContent.appointmentType', + + // Map color fields (these were custom fields in Divi 4) + accent_color: 'module.advanced.customColors.accentColor', + background_color: 'module.advanced.customColors.backgroundColor', + + // Map font family field + font_family: 'module.advanced.typography.fontFamily', + + // Map padding fields + padding: 'module.decoration.spacing.padding', + padding_css_unit: 'module.decoration.spacing.paddingUnit', + }, +}; diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.json b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.json new file mode 100644 index 0000000..16cf470 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/conversion-outline.json @@ -0,0 +1,46 @@ +{ + "advanced": { + "admin_label": "module.meta.adminLabel", + "animation": "module.decoration.animation", + "background": "module.decoration.background", + "disabled_on": "module.decoration.disabledOn", + "module": "module.advanced.htmlAttributes", + "overflow": "module.decoration.overflow", + "position_fields": "module.decoration.position", + "scroll": "module.decoration.scroll", + "sticky": "module.decoration.sticky", + "text": "module.advanced.text", + "transform": "module.decoration.transform", + "transition": "module.decoration.transition", + "z_index": "module.decoration.zIndex", + "margin_padding": "module.decoration.spacing", + "max_width": "module.decoration.sizing", + "height": "module.decoration.sizing", + "link_options": "module.advanced.link", + "text_shadow": { + "default": "module.advanced.text.textShadow" + }, + "box_shadow": { + "default": "module.decoration.boxShadow" + }, + "borders": { + "default": "module.decoration.border" + }, + "filters": { + "default": "module.decoration.filters" + } + }, + "css": { + "after": "css.*.after", + "before": "css.*.before", + "main_element": "css.*.mainElement" + }, + "module": { + "appointment_type": "module.innerContent.appointmentType", + "accent_color": "module.advanced.customColors.accentColor", + "background_color": "module.advanced.customColors.backgroundColor", + "font_family": "module.advanced.typography.fontFamily", + "padding": "module.decoration.spacing.padding", + "padding_css_unit": "module.decoration.spacing.paddingUnit" + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/module.json b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/module.json new file mode 100644 index 0000000..7c440f9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/module/module.json @@ -0,0 +1,50 @@ +{ + "name": "ssa/booking", + "d4Shortcode": "ssa_divi_booking_module", + "title": "SSA Appointment Booking", + "titles": "SSA Appointment Bookings", + "moduleIcon": "calendar-alt", + "category": "module", + "attributes": { + "type": { + "type": "string", + "default": "" + }, + "module": { + "type": "object", + "default": { + "innerContent": { + "appointmentType": "" + } + }, + "settings": { + "innerContent": {}, + "meta": {}, + "advanced": {}, + "decoration": { + "background": {}, + "border": {}, + "spacing": {} + } + } + } + }, + "settings": { + "content": "custom", + "design": "auto", + "advanced": "auto", + "groups": { + "contentText": { + "panel": "content", + "priority": 10, + "groupName": "text", + "component": { + "name": "divi/composite", + "props": { + "groupLabel": "Settings" + } + } + } + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/server/Modules.php b/wp-content/plugins/simply-schedule-appointments/includes/divi5/server/Modules.php new file mode 100644 index 0000000..7e75d0f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/server/Modules.php @@ -0,0 +1,33 @@ +<?php +/** + * Register SSA Divi 5 Modules + * + * @package Simply_Schedule_Appointments + * @since 6.9.21 + */ + +namespace SSA\Divi5\Server; + +if ( ! defined( 'ABSPATH' ) ) { + exit( 'Direct access forbidden.' ); +} + +// Register SSA module in Divi 5's dependency tree +// This makes SSA show as Divi 5 compatible +add_action( + 'divi_module_library_modules_dependency_tree', + function( $dependency_tree ) { + // Load the module class if not already loaded + if ( ! class_exists( 'SSA\Divi5\Module\SsaBookingModule' ) ) { + $module_class_path = dirname( __DIR__ ) . '/module/SsaBookingModule.php'; + if ( file_exists( $module_class_path ) ) { + require_once $module_class_path; + } + } + + // Add SSA module to dependency tree + if ( class_exists( 'SSA\Divi5\Module\SsaBookingModule' ) ) { + $dependency_tree->add_dependency( new \SSA\Divi5\Module\SsaBookingModule() ); + } + } +); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/SSABookingModule.jsx b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/SSABookingModule.jsx new file mode 100644 index 0000000..1adf9d2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/SSABookingModule.jsx @@ -0,0 +1,100 @@ +/** + * SSA Booking Module - Divi 5 Visual Builder Component + * + * @package Simply_Schedule_Appointments + * @since 5.9.0 + */ + +const React = window.React; +const { Component } = React; +const { ModuleContainer } = window?.divi?.module || {}; + +/** + * Internal class component for managing state + */ +class SSABookingRenderer extends Component { + constructor(props) { + super(props); + this.state = { + bookingHTML: null, + isLoading: true, + }; + } + + componentDidMount() { + this.fetchBookingForm(); + } + + componentDidUpdate(prevProps) { + const prevType = prevProps?.appointmentType || ''; + const currentType = this.props?.appointmentType || ''; + + if (prevType !== currentType) { + this.fetchBookingForm(); + } + } + + async fetchBookingForm() { + this.setState({ isLoading: true }); + + const appointmentType = this.props.appointmentType || ''; + const shortcodeAttr = appointmentType ? `type="${appointmentType}"` : ''; + const shortcode = `[ssa_booking ${shortcodeAttr}]`; + + try { + const response = await fetch(`${window.wpApiSettings?.root || '/wp-json/'}ssa/v1/render-shortcode`, { + method: 'POST', + headers: { + 'X-WP-Nonce': window.wpApiSettings?.nonce || '', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ shortcode }), + }); + + const data = await response.json(); + this.setState({ + bookingHTML: data.html || data, + isLoading: false + }); + } catch (err) { + this.setState({ + bookingHTML: '<div style="padding: 20px; color: red;">Error loading booking form</div>', + isLoading: false + }); + } + } + + render() { + const { bookingHTML, isLoading } = this.state; + + if (isLoading) { + return React.createElement('div', { + style: { padding: '40px', textAlign: 'center', color: '#666' } + }, 'Loading booking form...'); + } + + return React.createElement('div', { + dangerouslySetInnerHTML: { __html: bookingHTML } + }); + } +} + +/** + * SSA Booking Module Edit Component - Arrow function wrapper + */ +const SSABookingModuleEdit = (props) => { + const { attrs, elements, id, name } = props; + const appointmentType = attrs?.module?.innerContent?.appointmentType?.desktop?.value || ''; + + return React.createElement(ModuleContainer, { + attrs: attrs, + elements: elements, + id: id, + name: name, + }, + elements?.styleComponents({ attrName: 'module' }), + React.createElement(SSABookingRenderer, { appointmentType }) + ); +}; + +export default SSABookingModuleEdit; diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/index.js b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/index.js new file mode 100644 index 0000000..bb44f40 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/index.js @@ -0,0 +1,32 @@ +/** + * SSA Booking Module - Entry point for Divi 5 Visual Builder + * + * @package Simply_Schedule_Appointments + * @since 5.9.0 + */ + +import SSABookingModuleEdit from './SSABookingModule'; +import { SSABookingSettingsContent } from './settings-content'; +import metadata from '../module/module.json'; +import { conversionOutline } from '../module/conversion-outline.js'; + +const { registerModule } = window.divi.moduleLibrary; +const { addAction } = window?.vendor?.wp?.hooks; + +// Module configuration object for Divi 5 +const ssaBookingConfig = { + settings: { + content: SSABookingSettingsContent, + }, + renderers: { + edit: SSABookingModuleEdit, + }, + conversionOutline +}; + +addAction('divi.moduleLibrary.registerModuleLibraryStore.after', 'ssa', () => { + registerModule(metadata, ssaBookingConfig); +}); + + + diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/settings-content.js b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/settings-content.js new file mode 100644 index 0000000..5f9aaee --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/visual-builder/settings-content.js @@ -0,0 +1,51 @@ +/** + * SSA Booking Module - Content Settings + * + * @package Simply_Schedule_Appointments + * @since 5.9.0 + */ + +import React from 'react'; + +const __ = window?.vendor?.wp?.i18n?.__ || window?.wp?.i18n?.__ || ((text) => text); +const { FieldContainer } = window?.divi?.module || {}; +const { GroupContainer } = window?.divi?.modal || {}; +const { SelectContainer } = window?.divi?.fieldLibrary || {}; + +export const SSABookingSettingsContent = (props) => { + // Get appointment types from localized data + const appointmentTypes = window.ssaAppointmentTypes || [{ label: 'All Types', value: '' }]; + + // Convert to Divi format: { value: { label: 'Label', value: 'value' } } + const options = {}; + if (Array.isArray(appointmentTypes)) { + appointmentTypes.forEach(type => { + options[String(type.value)] = { + label: String(type.label), + value: String(type.value) + }; + }); + } + + return React.createElement( + React.Fragment, + null, + React.createElement( + GroupContainer, + { + id: "ssa_booking_settings", + title: __('Booking Settings', 'simply-schedule-appointments') + }, + React.createElement( + FieldContainer, + { + attrName: "module.innerContent.appointmentType", + label: __('Appointment Type', 'simply-schedule-appointments'), + description: __('Select which appointment type to display', 'simply-schedule-appointments'), + features: { sticky: false } + }, + React.createElement(SelectContainer, { options: options }) + ) + ) + ); +}; diff --git a/wp-content/plugins/simply-schedule-appointments/includes/divi5/webpack.config.js b/wp-content/plugins/simply-schedule-appointments/includes/divi5/webpack.config.js new file mode 100644 index 0000000..a71f603 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/divi5/webpack.config.js @@ -0,0 +1,39 @@ +const path = require('path'); + +module.exports = { + entry: './visual-builder/index.js', + output: { + path: path.resolve(__dirname, 'build'), + filename: 'ssa-booking-module.js', + }, + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ + ['@babel/preset-env', { + targets: { + browsers: ['last 2 versions', 'ie >= 11'] + }, + modules: false + }], + ['@babel/preset-react', { runtime: 'classic' }] + ], + }, + }, + }, + ], + }, + resolve: { + extensions: ['.js', '.jsx'], + }, + externals: { + react: 'React', + 'react-dom': 'ReactDOM', + }, + mode: 'production', +}; diff --git a/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/booking.php b/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/booking.php new file mode 100644 index 0000000..7a4483b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/booking.php @@ -0,0 +1,700 @@ +<?php +/** + * Elementor Upcoming Appointments Widget. + * + * Elementor widget that inserts a coverflow-style carousel into the page. + * + * @since 1.0.0 + */ + +class SSA_Elementor_Booking_Widget extends \Elementor\Widget_Base { + + /** + * Get widget name. + * + * Retrieve coverflow carousel widget name. + * + * @since 1.0.0 + * @access public + * + * @return string Widget name. + */ + public function get_name() { + return 'ssa-booking'; + } + + /** + * Get widget title. + * + * Retrieve Upcoming Appointments widget title. + * + * @since 1.0.0 + * @access public + * + * @return string Widget title. + */ + public function get_title() { + return __( 'Schedule an Appointment', 'simply-schedule-appointments' ); + } + + /** + * Get widget icon. + * + * Retrieve Upcoming Appointments widget icon. + * + * @since 1.0.0 + * @access public + * + * @return string Widget icon. + */ + public function get_icon() { + return 'eicon-calendar'; + } + + /** + * Get widget keywords. + * + * Retrieve the list of keywords the widget belongs to. + * + * @since 2.1.0 + * @access public + * + * @return array Widget keywords. + */ + public function get_keywords() { + return [ 'ssa', 'schedule', 'calendar', 'appointments', 'simply', 'booking' ]; + } + + /** + * Get widget categories. + * + * Retrieve the list of categories the Upcoming Appointments widget belongs to. + * + * @since 1.0.0 + * @access public + * + * @return array Widget categories. + */ + public function get_categories() { + return [ 'general' ]; + } + + /** + * Retrieve the list of scripts the Upcoming Appointments widget depended on. + * + * Used to set scripts dependencies required to run the widget. + * + * @since 1.3.0 + * @access public + * + * @return array Widget scripts dependencies. + */ + public function get_script_depends() { + return []; + } + + /** + * Retrieve the list of styles the Upcoming Appointments widget depended on. + * + * Used to set style dependencies required to run the widget. + * + * @since 1.3.0 + * @access public + * + * @return array Widget styles dependencies. + */ + public function get_style_depends() { + return []; + } + + /** + * Register Upcoming Appointments widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function register_controls() { + $this->start_controls_section( + 'block_section', + [ + 'label' => __( 'Block Description', 'simply-schedule-appointments' ), + 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, + ] + ); + + $icon_url = $this->get_icon(); + + $this->add_control( + 'title', + [ + 'raw' => '<div><i class="' . esc_attr($icon_url) . '"></i><span> Appointment Booking Form</span></div>', + 'type' => \Elementor\Controls_Manager::RAW_HTML, + ] + ); + + $this->add_control( + 'description', + [ + 'raw' => '<p>' .esc_html__('Displays an Appointment Booking Form. You can customize the appointment type and styles.', 'simply-schedule-appointments') . '</p>', + 'type' => \Elementor\Controls_Manager::RAW_HTML, + ] + ); + + $this->end_controls_section(); + + $this->start_controls_section( + 'section_ssa_booking', + [ + 'label' => __( 'Select Appointment Types', 'simply-schedule-appointments' ), + ] + ); + + $appointment_type_labels = ssa()->appointment_type_label_model->query(); + $ssa_appointment_label_key_values = wp_list_pluck( $appointment_type_labels, 'name', 'id' ); + $ssa_appointment_label_key_values[''] = 'All'; + $ssa_appointment_label_key_values = array_reverse( $ssa_appointment_label_key_values, true ); + + $appointment_types = ssa()->appointment_type_model->query( array( + 'number' => -1, + 'status' => 'publish', + ) ); + + $filter_options = [ + 'types' => __( 'Appointment types', 'simply-schedule-appointments' ), + 'label' => __( 'Label', 'simply-schedule-appointments' ), + ]; + + $default_filter = key($filter_options); + $map_appointment_type_ids_to_labels = wp_list_pluck( $appointment_types, 'title', 'slug' ); + $map_appointment_type_ids_to_labels = array_reverse( $map_appointment_type_ids_to_labels, true ); + $map_appointment_type_ids_to_labels[''] = 'All'; + $map_appointment_type_ids_to_labels = array_reverse( $map_appointment_type_ids_to_labels, true ); + + $this->add_control( + 'appointment_types_filter', + [ + 'label' => __( 'FILTER BY', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_filter, + 'options' => $filter_options, + 'classes' => 'ssa-booking-block', + ] + ); + + $this->add_control( + 'label', + [ + 'label' => __( 'Labels', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => '', + 'options' => $ssa_appointment_label_key_values, + 'condition' => [ + 'appointment_types_filter' => 'label', + ], + ] + ); + + $this->add_control( + 'header', + [ + 'raw' => '<h4>Select Appointment Types:</h4>', + 'type' => \Elementor\Controls_Manager::RAW_HTML, + 'separator' => 'after', + 'condition' => [ + 'appointment_types' => 'types', + ], + ] + ); + + $this->add_control( + 'appointment_type', + [ + 'label' => esc_html__('Appointment Types', 'simply-schedule-appointments'), + 'type' => \Elementor\Controls_Manager::SELECT2, + 'options' => $map_appointment_type_ids_to_labels, + 'label_block' => true, + 'multiple' => true, + 'frontend_available' => true, + 'condition' => [ + 'appointment_types_filter' => 'types', + ], + ] + ); + + $this->end_controls_section(); + + /* Appointment type view */ + $this->start_controls_section( + 'section_ssa_booking_type_view', + [ + 'label' => __( 'Appointment Types View', 'simply-schedule-appointments' ), + ] + ); + + $filter_types_options = [ + 'cardList' => __('List', 'simply-schedule-appointments'), + 'cardGrid' => __('Grid', 'simply-schedule-appointments'), + 'cardColumns' => __('Two Columns', 'simply-schedule-appointments'), + ]; + + $default_filter_type = key($filter_types_options); + + $this->add_control( + 'appointment_types_view', + [ + 'label' => __( 'Appointments types view', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_filter_type, + 'options' => $filter_types_options, + 'label_block' => true, + 'classes' => 'ssa-booking-block', + ] + ); + + $this->end_controls_section(); + + /* Booking Flow UI*/ + if ( ssa_should_render_booking_flow()) { + $this->start_controls_section( + 'section_ssa_booking_flow', + [ + 'label' => __( 'Booking Flow', 'simply-schedule-appointments' ), + ] + ); + + $filter_flow_options = [ + 'appt_type_settings' => __('Use default settings from appointment type', 'simply-schedule-appointments'), + 'expanded' => __('Expanded', 'simply-schedule-appointments'), + 'express' => __('Express', 'simply-schedule-appointments'), + 'first_available' => __('First available', 'simply-schedule-appointments'), + ]; + + $default_flow_filter = key($filter_flow_options); + + $this->add_control( + 'booking_layout', + [ + 'label' => esc_html__( 'Main Booking Layout', 'simply-schedule-appointments' ), + 'label_block' => true, + 'frontend_available' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_flow_filter, + 'options' => $filter_flow_options, + ] + ); + + $this->add_control( + 'appt_duration', + [ + 'label' => esc_html__( 'Duration', 'simply-schedule-appointments' ), + 'label_block' => false, + 'type' => \Elementor\Controls_Manager::NUMBER, + 'min' => 1, + 'default' => 1, + 'condition' => [ + 'booking_layout' => 'first_available', + ] + ] + ); + + $filter_duration_units = [ + 'minutes' => __('Minutes', 'simply-schedule-appointments'), + 'hours' => __('Hours', 'simply-schedule-appointments'), + 'days' => __('Days', 'simply-schedule-appointments'), + 'weeks' => __('Weeks', 'simply-schedule-appointments'), + ]; + + $default_duration_unit = key($filter_duration_units); + + $this->add_control( + 'duration_unit', + [ + 'label' => esc_html__( 'Duration Unit', 'simply-schedule-appointments' ), + 'label_block' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_duration_unit, + 'options' => $filter_duration_units, + 'condition' => [ + 'booking_layout' => 'first_available', + ], + ] + ); + + $filter_fallback_options = [ + 'expanded' => __('Expanded', 'simply-schedule-appointments'), + 'express' => __('Express', 'simply-schedule-appointments'), + ]; + + $default_fallback_filter = key($filter_fallback_options); + + $this->add_control( + 'fallback_options', + [ + 'label' => esc_html__( 'Fallback Flow', 'simply-schedule-appointments' ), + 'label_block' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_fallback_filter, + 'options' => $filter_fallback_options, + 'condition' => [ + 'booking_layout' => 'first_available', + ], + ] + ); + + $this->add_control( + 'view_type', + [ + 'label' => esc_html__( 'View Type', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::CHOOSE, + 'frontend_available' => true, + 'options' => [ + 'left' => [ + 'title' => esc_html__( 'Date View', 'simply-schedule-appointments' ), + 'icon' => 'eicon-calendar', + ], + 'right' => [ + 'title' => esc_html__( 'Time View', 'simply-schedule-appointments' ), + 'icon' => 'eicon-clock-o', + ], + ], + 'default' => 'left', + 'toggle' => true, + 'selectors_dictionary' => [ + 'left' => is_rtl() ? 'end' : 'start', + 'right' => is_rtl() ? 'start' : 'end', + ], + 'conditions' => [ + 'relation' => 'and', + 'terms' => [ + [ + 'name' => 'booking_layout', + 'operator' => '!==', + 'value' => 'express', + ], + [ + 'name' => 'booking_layout', + 'operator' => '!==', + 'value' => 'appt_type_settings', + ], + ] + ], + ] + ); + + $filter_date_options = [ + 'week' => __('Weekly', 'simply-schedule-appointments'), + 'month' => __('Monthly', 'simply-schedule-appointments'), + 'only_available' =>__('Only available dates', 'simply-schedule-appointments'), + ]; + + $default_date_filter = key($filter_date_options); + + $this->add_control( + 'date_view_options', + [ + 'label' => esc_html__( 'Date View', 'simply-schedule-appointments' ), + 'label_block' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_date_filter, + 'options' => $filter_date_options, + 'conditions' => [ + 'relation' => 'and', + 'terms' => [ + [ + 'name' => 'view_type', + 'operator' => '===', + 'value' => 'left', + ], + [ + 'relation' => 'and', + 'terms' => [ + [ + 'name' => 'booking_layout', + 'operator' => '!==', + 'value' => 'express', + ], + [ + 'name' => 'booking_layout', + 'operator' => '!==', + 'value' => 'appt_type_settings', + ], + ], + ], + ], + ], + ] + ); + + $filter_time_options = [ + 'time_of_day_columns' => __('Time of day columns', 'simply-schedule-appointments'), + 'single_column' => __('Single column', 'simply-schedule-appointments'), + ]; + + $default_time_filter = key($filter_time_options); + + $this->add_control( + 'time_view_options', + [ + 'label' => esc_html__( 'Time View', 'simply-schedule-appointments' ), + 'label_block' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'default' => $default_time_filter, + 'options' => $filter_time_options, + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'booking_layout', + 'operator' => '===', + 'value' => 'express', + ], + [ + 'relation' => 'and', + 'terms' => [ + [ + 'name' => 'view_type', + 'operator' => '===', + 'value' => 'right', + ], + [ + 'name' => 'booking_layout', + 'operator' => '!==', + 'value' => 'appt_type_settings', + ], + ], + ] + ] + ], + ] + ); + + $this->end_controls_section(); + } + + $this->start_controls_section( + 'section_style', + [ + 'label' => __( 'Styles', 'elementor' ), + 'tab' => \Elementor\Controls_Manager::TAB_STYLE, + ] + ); + + $this->add_control( + 'accent_color', + [ + 'label' => __( 'Accent Color', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::COLOR, + 'alpha' => false, + ] + ); + + $this->add_control( + 'background_color', + [ + 'label' => __( 'Background Color', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::COLOR, + 'alpha' => false, + ] + ); + + $this->add_control( + 'font_family', + [ + 'label' => __( 'Font Family', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::FONT, + ] + ); + + $this->add_control( + 'padding', + [ + 'label' => __( 'Padding', 'simply-schedule-appointments' ), + 'type' => \Elementor\Controls_Manager::SLIDER, + 'size_units' => [ 'px', 'em', 'rem', 'vw', '%' ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1 + ], + 'em' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1 + ], + 'rem' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1 + ], + 'vw' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1 + ], + '%' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1 + ], + ], + ] + ); + + $this->end_controls_section(); + } + + public function get_global_color($global_colors, $new_color){ + $new_color_id = substr($new_color, strpos($new_color, 'colors?id=')+10); + + foreach($global_colors as $global_color){ + if($global_color['_id']!= $new_color_id){ + continue; + } + + $new_color = ltrim($global_color['color'], '#'); + } + + return $new_color; + } + + /** + * Converts time units to minutes + * + * This function converts time units to minutes based on the duration and unit type passed to the function, returning their equivalent. + * + * @param int $duration - The amount of time that needs conversion. + * @param string $unit - The time format (minutes, hours, days, weeks). + * + * @return int|null The amount after conversion, or null if the input is invalid. + */ + function convertDurationToMinutes($duration, $unit) { + // Validate if the duration is an integer + $duration = filter_var($duration, FILTER_VALIDATE_INT); + + // If duration is not a valid integer, null, zero, or a negative integer return an error or null + if ($duration === false || $duration <= 0) { + return null; + } + + switch ($unit) { + case 'minutes': + return $duration; + case 'hours': + return $duration * 60; + case 'days': + return $duration * 60 * 24; + case 'weeks': + return $duration * 60 * 24 * 7; + default: + return null; + } + } + + /** + * Render Upcoming Appointments widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() { + $settings = $this->get_settings_for_display(); + if ( $settings['appointment_type'] === 'none' || $settings['appointment_type'] === 'all' ) { + $settings['appointment_type'] = ''; + } + + $attrs = array(); + + $kit = Elementor\Plugin::$instance->kits_manager->get_active_kit_for_frontend(); + $system_colors = $kit->get_settings_for_display( 'system_colors' ); + $custom_colors = $kit->get_settings_for_display( 'custom_colors' ); + $global_colors = array_merge( $system_colors, $custom_colors ); + + if( $settings['appointment_type'] && $settings['appointment_type'] !== '') { + if( is_array($settings['appointment_type'])){ + $attrs['types'] = implode(',', $settings['appointment_type']); + }else { + $attrs['types'] = $settings['appointment_type']; + $settings['appointment_type'] = ''; + } + } + + if( $settings['label'] && $settings['label'] !== '') { + $attrs['label'] = $settings['label']; + } + + if ( $settings['appointment_types_view'] && $settings['appointment_types_view'] !== '' ) { + + $attrs['appointment_types_view'] = $settings['appointment_types_view']; + } + + if ( ssa_should_render_booking_flow() ) { + + if ( $settings['booking_layout'] !== 'appt_type_settings' && !empty( $settings['booking_layout'] ) ) { + + if ( $settings['booking_layout'] === 'expanded' ) { + $attrs['flow'] = $settings['booking_layout']; + $attrs['date_view'] = $settings['date_view_options']; + $attrs['time_view'] = $settings['time_view_options']; + } + + else if ( $settings['booking_layout'] === 'express' ) { + $attrs['flow'] = $settings['booking_layout']; + $attrs['time_view'] = $settings['time_view_options']; + } + + else if ( $settings['booking_layout'] === 'first_available' ) { + $attrs['flow'] = $settings['booking_layout']; + $attrs['suggest_first_available'] = true; + + // Only available within + $attrs['suggest_first_available_within_minutes'] = $this->convertDurationToMinutes( $settings['appt_duration'], $settings['duration_unit'] ); + + // Fallback flow + if ( $settings['fallback_options'] === 'expanded' ) { + $attrs['fallback_flow'] = $settings['fallback_options']; + $attrs['date_view'] = $settings['date_view_options']; + $attrs['time_view'] = $settings['time_view_options']; + } + + else if ( $settings['fallback_options'] === 'express' ) { + $attrs['fallback_flow'] = $settings['fallback_options']; + $attrs['time_view'] = $settings['time_view_options']; + } + + } + } + } + + if( $settings['accent_color'] && $settings['accent_color'] !== '' ) { + $attrs['accent_color'] = ltrim( $settings['accent_color'], '#'); + } else if ( ! empty( $settings['__globals__']['accent_color'] ) ) { + $attrs['accent_color'] = $this->get_global_color($global_colors, $settings['__globals__']['accent_color']); + } + if( $settings['background_color'] && $settings['background_color'] !== '' ) { + $attrs['background'] = ltrim( $settings['background_color'], '#' ); + } else if (!empty($settings['__globals__']['background_color'])) { + $attrs['background'] = $this->get_global_color($global_colors, $settings['__globals__']['background_color']); + } + if( $settings['font_family'] && $settings['font_family'] !== '' ) { + $attrs['font'] = $settings['font_family']; + } + if( $settings['padding'] && $settings['padding'] !== '' ) { + $attrs['padding'] = $settings['padding']['size'] . $settings['padding']['unit']; + } + ?> + <div class="elementor-ssa-booking-wrapper"> + <div <?php echo $this->get_render_attribute_string( 'booking' ); ?>> + <div class="ssa-booking"> + <?php echo ssa()->shortcodes->ssa_booking( $attrs ); ?> + </div> + </div> + </div> + <?php + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/upcoming-appointments.php b/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/upcoming-appointments.php new file mode 100644 index 0000000..b60547f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/elementor/widgets/upcoming-appointments.php @@ -0,0 +1,443 @@ +<?php +/** + * Elementor Upcoming Appointments Widget. + * + * Elementor widget that inserts a coverflow-style carousel into the page. + * + * @since 1.0.0 + */ +class SSA_Elementor_Upcoming_Appointments_Widget extends \Elementor\Widget_Base { + + /** + * Get widget name. + * + * Retrieve coverflow carousel widget name. + * + * @since 1.0.0 + * @access public + * + * @return string Widget name. + */ + public function get_name() { + return 'ssa-upcoming-appointments'; + } + + /** + * Get widget title. + * + * Retrieve Upcoming Appointments widget title. + * + * @since 1.0.0 + * @access public + * + * @return string Widget title. + */ + public function get_title() { + return __( 'Upcoming Appointments', 'simply-schedule-appointments' ); + } + + /** + * Get widget icon. + * + * Retrieve Upcoming Appointments widget icon. + * + * @since 1.0.0 + * @access public + * + * @return string Widget icon. + */ + public function get_icon() { + return 'eicon-calendar'; + } + + /** + * Get widget keywords. + * + * Retrieve the list of keywords the widget belongs to. + * + * @since 2.1.0 + * @access public + * + * @return array Widget keywords. + */ + public function get_keywords() { + return [ 'ssa', 'schedule', 'calendar', 'appointments', 'simply' ]; + } + + /** + * Get widget categories. + * + * Retrieve the list of categories the Upcoming Appointments widget belongs to. + * + * @since 1.0.0 + * @access public + * + * @return array Widget categories. + */ + public function get_categories() { + return [ 'general' ]; + } + + /** + * Retrieve the list of scripts the Upcoming Appointments widget depended on. + * + * Used to set scripts dependencies required to run the widget. + * + * @since 1.3.0 + * @access public + * + * @return array Widget scripts dependencies. + */ + public function get_script_depends() { + return []; + } + + /** + * Retrieve the list of styles the Upcoming Appointments widget depended on. + * + * Used to set style dependencies required to run the widget. + * + * @since 1.3.0 + * @access public + * + * @return array Widget styles dependencies. + */ + public function get_style_depends() { + return []; + } + + /** + * Determines whether to show the Staff section in the Upcoming Appointments editor block. + * + * Checks if the Staff feature is installed, enabled, and has at least one published staff member. + * If these conditions are met, it indicates that the Staff section should be displayed. + * + * @since 1.0.0 + * + * @return bool True if the Staff section should be shown, false otherwise. + */ + public function should_show_staff_section() { + $is_staff_installed = ssa()->settings_installed->is_installed( 'staff' ); + $is_staff_enabled = ssa()->settings_installed->is_enabled( 'staff' ); + $is_staff_initialized = false; + + if( $is_staff_enabled ) { + + $staff_object_query = ssa()->staff_model->query( array( + 'status' => 'publish', + )); + + if (is_array($staff_object_query) && count($staff_object_query) > 0) { + $is_staff_initialized = true; + } + } + + $show_settings_block = false; + + if ( $is_staff_installed && $is_staff_initialized ) { + $show_settings_block = true; + } + + return $show_settings_block; + } + + /** + * Determines whether to show the Resources section in the Upcoming Appointments editor block. + * + * Checks if the Resources feature is installed, enabled, and has Resource that are not of type identical. + * If these conditions are met, it indicates that the Resources section should be displayed. + * + * @since 1.0.0 + * + * @return bool True if the Resources section should be shown, false otherwise. + */ + public function should_show_resources_section() { + $is_resources_installed = ssa()->settings_installed->is_installed( 'resources' ); + $is_resources_enabled = ssa()->settings_installed->is_enabled( 'resources' ); + $is_resources_initialized = false; + + if( $is_resources_enabled ) { + + $resources_object_query = ssa()->resource_group_model->query( array( + 'status' => 'publish', + )); + + $filtered_resources_object = array_values(array_filter($resources_object_query, function($resource) { + return $resource['resource_type'] !== 'identical'; + })); + + if (is_array($filtered_resources_object) && count($filtered_resources_object) > 0) { + $is_resources_initialized = true; + } + } + + $show_settings_block = false; + + if ( $is_resources_installed && $is_resources_initialized ) { + $show_settings_block = true; + } + + return $show_settings_block; + } + + /** + * Register Upcoming Appointments widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function register_controls() { + /* Block header */ + $this->start_controls_section( + 'upcoming_appointments_block_section', + [ + 'label' => __( 'Block Description', 'simply-schedule-appointments' ), + 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, + ] + ); + + $icon_url = $this->get_icon(); + + $this->add_control( + 'title', + [ + 'raw' => '<div><i class="' . esc_attr($icon_url) . '"></i><span> Upcoming Appointments</span></div>', + 'type' => \Elementor\Controls_Manager::RAW_HTML, + ] + ); + + $this->add_control( + 'description', + [ + 'raw' => '<p>' .esc_html__('Displays Upcoming Appointments. You can select what to show in the appointment card.', 'simply-schedule-appointments') . '</p>', + 'type' => \Elementor\Controls_Manager::RAW_HTML, + ] + ); + + $this->end_controls_section(); + + /* Display information block */ + $this->start_controls_section( + 'ssa_upcoming_appointments_display', + [ + 'label' => __( 'Display Information', 'simply-schedule-appointments' ), + ] + ); + + $display_option = [ + 'Display Appointment Types' => __('Appointment Types', 'simply-schedule-appointments'), + ]; + $default_display_option = key($display_option); + + $this->add_control( + 'appointmentDisplay', + [ + 'label' => esc_html__( $display_option[$default_display_option], 'textdomain' ), + 'type' => \Elementor\Controls_Manager::SWITCHER, + 'label_on' => esc_html__( 'Show', 'textdomain' ), + 'label_off' => esc_html__( 'Hide', 'textdomain' ), + 'return_value' => $default_display_option, + 'default' => '', + ] + ); + + $this->end_controls_section(); + + /* Display selectable resources */ + + if ($this->should_show_resources_section()) { + $this->start_controls_section( + 'ssa_upcoming_appointments_display_resources', + [ + 'label' => __( 'Display Resources', 'simply-schedule-appointments' ), + ] + ); + + $resource_display_setting = [ + 'Disable' => __('Display Resources', 'simply-schedule-appointments'), + ]; + + $default_resource_display_setting = key($resource_display_setting); + + $this->add_control( + 'disable_resources', + [ + 'label' => esc_html__( $default_resource_display_setting, 'simply-schedule-appointments'), + 'type' => \Elementor\Controls_Manager::SWITCHER, + 'label_on' => esc_html__('Hide', 'simply-schedule-appointments'), + 'label_off' => esc_html__('Show', 'simply-schedule-appointments'), + 'return_value' => $resource_display_setting[$default_resource_display_setting], + 'default' => $resource_display_setting[$default_resource_display_setting], + ] + ); + + $all_display_option = [ + 'All' => __('All', 'simply-schedule-appointments'), + ]; + + $default_all_display_setting = key($all_display_option); + + $this->add_control( + 'all_resources', + [ + 'label' => esc_html__( $default_all_display_setting, 'simply-schedule-appointments'), + 'type' => \Elementor\Controls_Manager::SWITCHER, + 'label_on' => esc_html__('Show', 'simply-schedule-appointments'), + 'label_off' => esc_html__('Hide', 'simply-schedule-appointments'), + 'return_value' => $all_display_option[$default_all_display_setting], + 'default' => $all_display_option[$default_all_display_setting], + 'condition' => [ + 'disable_resources' => '', + ], + ] + ); + + $appointment_resources = ssa()->resource_group_model->query( array( + 'status' => 'publish' + )); + $filtered_resources = array_values(array_filter($appointment_resources, function($resource) { + return $resource['resource_type'] !== 'identical'; + })); + $ssa_appointment_label_key_values = wp_list_pluck( $filtered_resources, 'title', 'id' ); + + $this->add_control( + 'selected_resources', + [ + 'label' => esc_html__('Resources', 'simply-schedule-appointments'), + 'type' => \Elementor\Controls_Manager::SELECT2, + 'options' => $ssa_appointment_label_key_values, + 'label_block' => true, + 'multiple' => true, + 'frontend_available' => true, + 'condition' => [ + 'disable_resources' => '', + 'all_resources' => '' + ], + ] + ); + + $this->end_controls_section(); + } + + /* Display team member information */ + + if ($this->should_show_staff_section()) { + $this->start_controls_section( + 'ssa_upcoming_appointments_display_member_information', + [ + 'label' => __( 'Display Team Member Information', 'simply-schedule-appointments' ), + ] + ); + + $member_information_setting = [ + 'Disable' => __('Display Team Members', 'simply-schedule-appointments'), + ]; + + $default_member_information_setting = key($member_information_setting); + + $this->add_control( + 'disable_member_info', + [ + 'label' => esc_html__( $default_member_information_setting, 'simply-schedule-appointments'), + 'type' => \Elementor\Controls_Manager::SWITCHER, + 'label_on' => esc_html__('Hide', 'simply-schedule-appointments'), + 'label_off' => esc_html__('Show', 'simply-schedule-appointments'), + 'return_value' => $member_information_setting[$default_member_information_setting], + 'default' => $member_information_setting[$default_member_information_setting], + ] + ); + + $member_information = [ + 'Display Member Names' => __('Team Member Names', 'simply-schedule-appointments'), + 'Display Member Images' => __('Team Member Images', 'simply-schedule-appointments'), + ]; + + foreach ($member_information as $slug => $label) { + $this->add_control( + 'toggle_' . $slug, + [ + 'label' => esc_html__('Show ', 'simply-schedule-appointments') . $label, + 'type' => \Elementor\Controls_Manager::SWITCHER, + 'label_on' => esc_html__('Show', 'simply-schedule-appointments'), + 'label_off' => esc_html__('Hide', 'simply-schedule-appointments'), + 'return_value' => $slug, + 'default' => '', + 'condition' => [ + 'disable_member_info' => '', + ], + ] + ); + } + + $this->end_controls_section(); + } + + } + + /** + * Render Upcoming Appointments widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() { + $settings = $this->get_settings_for_display(); + + if ($settings['appointmentDisplay']) { + $attrs['appointmentDisplay'] = $settings['appointmentDisplay']; + } + + if ($this->should_show_resources_section()) { + if( ! empty($settings['disable_resources'])){ + $attrs['resourceDisplay'] = $settings['disable_resources']; + } + if ( ! empty( $settings['selected_resources'] ) ) { + $attrs['resourceTypes'] = $settings['selected_resources'] ; + } else { + $attrs['resourceTypes'] = []; + } + if($settings['all_resources']){ + $attrs['allResourcesTypeOption'] = $settings['all_resources']; + } + } else { + $attrs['resourceTypes'] = []; + } + + $member_info = []; + + if ($this->should_show_staff_section()) { + foreach ($settings as $key => $value) { + if (strpos($key, 'toggle_') === 0) { + if ($value && $key !== 'toggle_') { + $slug = substr($key, 7); + $member_info[] = $slug; + } + } + } + if (!empty($settings['disable_member_info'])) { + $member_info[] = $settings['disable_member_info']; + } + if (!empty($member_info)) { + $attrs['memberInfo'] = $member_info; + } + } else { + $attrs['memberInfo'] = []; + } + ?> + <div class="elementor-ssa-upcoming-appointments-wrapper"> + <div <?php echo $this->get_render_attribute_string( 'upcoming_appointments' ); ?>> + <div class="ssa-upcoming-appointments"> + <?php echo ssa()->shortcodes->ssa_upcoming_appointments( array( + 'block_settings' => $attrs + ) ); ?> + </div> + </div> + </div> + <?php + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/css/health-check.css b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/css/health-check.css new file mode 100644 index 0000000..3bc58ba --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/css/health-check.css @@ -0,0 +1,271 @@ +body.dashboard_page_health-check { + /* Tools screen styles */ + /* Diff viewer styles */ +} + +body.dashboard_page_health-check .health-check-table thead th:first-child, +body.dashboard_page_health-check .health-check-table thead td:first-child { + width: 20%; +} + +body.dashboard_page_health-check .health-check-table tbody td { + width: 80%; +} + +body.dashboard_page_health-check .health-check-table tbody td:first-child { + width: 20%; +} + +body.dashboard_page_health-check .health-check-table tbody td ul, +body.dashboard_page_health-check .health-check-table tbody td ol { + margin: 0; +} + +body.dashboard_page_health-check .pass:before, +body.dashboard_page_health-check .good:before { + content: "\f147"; + display: inline-block; + color: #46b450; + font-family: dashicons; +} + +body.dashboard_page_health-check .warning:before { + content: "\f460"; + display: inline-block; + color: #ffb900; + font-family: dashicons; +} + +body.dashboard_page_health-check .info:before { + content: "\f348"; + display: inline-block; + color: #00a0d2; + font-family: dashicons; +} + +body.dashboard_page_health-check .fail:before, +body.dashboard_page_health-check .error:before { + content: "\f335"; + display: inline-block; + color: #dc3232; + font-family: dashicons; +} + +body.dashboard_page_health-check .spinner { + float: none; +} + +body.dashboard_page_health-check .file-integrity-table thead th:first-child, +body.dashboard_page_health-check .file-integrity-table thead td:first-child, +body.dashboard_page_health-check .file-integrity-table tbody th:first-child, +body.dashboard_page_health-check .file-integrity-table tbody td:first-child, +body.dashboard_page_health-check .file-integrity-table tfoot th:first-child, +body.dashboard_page_health-check .file-integrity-table tfoot td:first-child { + text-align: center; + width: 60px; +} + +body.dashboard_page_health-check .tools-email-table { + border: 0; + box-shadow: none; +} + +body.dashboard_page_health-check .tools-email-table td:first-child { + width: 280px; +} + +@media (max-width: 768px) { + body.dashboard_page_health-check .tools-email-table td { + display: block; + } +} + +body.dashboard_page_health-check .tools-email-table input { + width: 100%; +} + +body.dashboard_page_health-check .tools-email-table label { + display: block; + clear: both; +} + +body.dashboard_page_health-check #health-check-mail-check, +body.dashboard_page_health-check #health-check-file-integrity { + margin-bottom: 15px; +} + +body.dashboard_page_health-check #health-check-diff-modal { + width: 100vw; + height: 100%; + position: fixed; + top: 0; + left: 0; + background: rgba(0, 0, 0, 0.7); + display: none; + z-index: 99999; +} + +body.dashboard_page_health-check #health-check-diff-modal #health-check-diff-modal-content { + background: #fff; + height: calc(100% - 120px); + width: calc(100% - 120px); + margin-top: 40px; + margin-left: 40px; + padding: 20px; + display: block; +} + +body.dashboard_page_health-check #health-check-diff-modal #health-check-diff-modal-diff { + width: 100%; + height: calc(100% - 80px); + overflow-y: auto; + display: block; + position: relative; +} + +body.dashboard_page_health-check #health-check-diff-modal #health-check-diff-modal-diff table.diff td:nth-child(2) { + background: #f3f3f3; +} + +body.dashboard_page_health-check #health-check-diff-modal-close-ref { + position: relative; + display: block; + float: right; + color: #000; + text-decoration: none; +} + +/* Accordion styles */ +.health-check-accordion { + border: 1px solid #d1d1d1; + border-radius: 0.3em; + box-shadow: 0 1px 2px #d1d1d1; +} + +.health-check-accordion > * + * { + border-top: 1px solid #d1d1d1; +} + +.health-check-accordion dt { + font-weight: 600; +} + +.health-check-accordion dt:first-child { + border-radius: 0.3em 0.3em 0 0; +} + +.health-check-accordion .health-check-accordion-trigger { + background: #fff; + border: 0; + color: #212121; + display: block; + font-size: 1rem; + font-weight: 400; + margin: 0; + padding: 1em 1.5em; + position: relative; + text-align: left; + width: 100%; +} + +.health-check-accordion .health-check-accordion-trigger:hover, .health-check-accordion .health-check-accordion-trigger:focus, .health-check-accordion .health-check-accordion-trigger:active { + background: #dedede; +} + +.health-check-accordion .health-check-accordion-trigger .title { + display: block; + pointer-events: none; +} + +.health-check-accordion .health-check-accordion-trigger .icon { + border: solid #9e9e9e; + border-width: 0 2px 2px 0; + height: 0.5rem; + pointer-events: none; + position: absolute; + right: 1.5em; + top: 50%; + transform: translateY(-60%) rotate(45deg); + width: 0.5rem; +} + +.health-check-accordion .health-check-accordion-trigger[aria-expanded="true"] .icon { + transform: translateY(-50%) rotate(-135deg); +} + +.health-check-accordion .health-check-accordion-panel { + margin: 0; + padding: 1em 1.5em; + background: #fff; +} + +.health-check-accordion .health-check-accordion-panel > div { + display: block; +} + +.health-check-accordion .health-check-accordion-panel[hidden] { + display: none; +} + +.health-check-accordion dl dd { + margin: 0 0 0.5em 2em; +} + +/* Modal styles */ +.health-check-modal { + display: none; + position: absolute; + z-index: 1000; + padding-top: 50px; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: black; + background-color: rgba(0, 0, 0, 0.4); +} + +@media all and (min-width: 1024px) { + .health-check-modal { + padding-top: 100px; + } +} + +.health-check-modal.show { + display: block; +} + +.health-check-modal .modal-content { + background-color: #fefefe; + margin: auto; + padding: 20px; + border: 1px solid #888; + width: 90%; +} + +@media all and (min-width: 1024px) { + .health-check-modal .modal-content { + width: 30%; + } +} + +.health-check-modal .modal-content .modal-close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: 600; + cursor: pointer; +} + +.health-check-modal .modal-content #dynamic-content { + display: block; + width: 100%; +} + +.health-check-modal .modal-close:hover, .health-check-modal .modal-close:focus { + color: #aaa; + float: right; + font-size: 28px; + font-weight: 600; +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/javascript/health-check.js b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/javascript/health-check.js new file mode 100644 index 0000000..c714195 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/javascript/health-check.js @@ -0,0 +1,296 @@ +jQuery( document ).ready(function( $ ) { + $( '.health-check-accordion-trigger' ).click(function() { + var isExpanded = ( 'true' === $( this ).attr( 'aria-expanded' ) ); + + if ( isExpanded ) { + $( this ).attr( 'aria-expanded', 'false' ); + $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', true ); + } else { + $( this ).attr( 'aria-expanded', 'true' ); + $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', false ); + } + }); + + $( '.health-check-accordion' ).on( 'keyup', '.health-check-accordion-trigger', function( e ) { + if ( '38' === e.keyCode.toString() ) { + $( '.health-check-accordion-trigger', $( this ).closest( 'dt' ).prevAll( 'dt' ) ).focus(); + } else if ( '40' === e.keyCode.toString() ) { + $( '.health-check-accordion-trigger', $( this ).closest( 'dt' ).nextAll( 'dt' ) ).focus(); + } + }); +}); + +/* global HealthCheck */ +jQuery( document ).ready(function( $ ) { + $( '.health-check-copy-field' ).click(function( e ) { + var $textarea = $( 'textarea', $( this ).closest( 'div' ) ), + $button = $( this ), + copied = false; + + e.preventDefault(); + + $textarea.select(); + + copied = document.execCommand( 'copy' ); + if ( copied ) { + $button.text( HealthCheck.string.copied ); + } + }); +}); + +jQuery( document ).ready(function( $ ) { + $( '.health-check-toc' ).click(function( e ) { + + // Remove the height of the admin bar, and an extra 10px for better positioning. + var offset = $( $( this ).attr( 'href' ) ).offset().top - $( '#wpadminbar' ).height() - 10; + + e.preventDefault(); + + $( 'html, body' ).animate({ + scrollTop: offset + }, 1200 ); + }); +}); + +/* global ajaxurl */ +jQuery( document ).ready(function( $ ) { + function healthCheckFailureModal( markup, action, parent ) { + $( '#dynamic-content' ).html( markup ); + $( '.health-check-modal' ).data( 'modal-action', action ).data( 'parent-field', parent ).show(); + } + + function healthCheckFailureModalClose( modal ) { + modal.hide(); + } + + $( '.modal-close' ).click(function( e ) { + e.preventDefault(); + healthCheckFailureModalClose( $( this ).closest( '.health-check-modal' ) ); + }); + + $( '.health-check-modal' ).on( 'submit', 'form', function( e ) { + var data = $( this ).serializeArray(), + modal = $( this ).closest( '.health-check-modal' ); + + e.preventDefault(); + + $.post( + ajaxurl, + data, + function( response ) { + if ( true === response.success ) { + $( modal.data( 'parent-field' ) ).append( response.data.message ); + } else { + healthCheckFailureModal( response.data.message, data.action, modal.data( 'parent-field' ) ); + } + } + ); + + healthCheckFailureModalClose( modal ); + }); +}); + +/* global HealthCheck, ajaxurl, healthCheckFailureModal */ +jQuery( document ).ready(function( $ ) { + function testDefaultTheme() { + var $parent = $( '.individual-loopback-test-status', '#test-single-no-theme' ), + data = { + action: 'health-check-loopback-default-theme' + }; + + $.post( + ajaxurl, + data, + function( response ) { + if ( true === response.success ) { + $parent.html( response.data.message ); + } else { + healthCheckFailureModal( response.data, data.action, $parent ); + } + }, + 'json' + ); + } + + function testSinglePlugin() { + var $testLines = $( '.not-tested', '#loopback-individual-plugins-list' ); + var $parentField, + $testLine, + data; + + if ( $testLines.length < 1 ) { + testDefaultTheme(); + return null; + } + + $testLine = $testLines.first(); + data = { + action: 'health-check-loopback-individual-plugins', + plugin: $testLine.data( 'test-plugin' ) + }; + + $parentField = $( '.individual-loopback-test-status', $testLine ); + + $parentField.html( HealthCheck.string.running_tests ); + + $.post( + ajaxurl, + data, + function( response ) { + if ( true === response.success ) { + $testLine.removeClass( 'not-tested' ); + $parentField.html( response.data.message ); + testSinglePlugin(); + } else { + healthCheckFailureModal( response.data, data.action, $parentField ); + } + }, + 'json' + ); + } + + $( '.dashboard_page_health-check' ).on( 'click', '#loopback-no-plugins', function( e ) { + var $trigger = $( this ), + $parent = $( this ).closest( 'td' ), + data = { + action: 'health-check-loopback-no-plugins' + }; + + e.preventDefault(); + + $( this ).html( '<span class="spinner" style="visibility: visible;"></span> ' + HealthCheck.string.please_wait ); + + $.post( + ajaxurl, + data, + function( response ) { + $trigger.remove(); + if ( true === response.success ) { + $parent.append( response.data.message ); + } else { + healthCheckFailureModal( response.data, data.action, $parent ); + } + }, + 'json' + ); + }).on( 'click', '#loopback-individual-plugins', function( e ) { + e.preventDefault(); + + testSinglePlugin(); + }); +}); + +/* global ajaxurl */ +jQuery( document ).ready(function( $ ) { + $( '.health-check-site-status-test' ).each( function() { + var $check = $( this ), + data = { + action: 'health-check-site-status', + feature: $( this ).data( 'site-status' ) + }; + + $.post( + ajaxurl, + data, + function( response ) { + $check.html( response ); + } + ); + }); +}); + +/* global ajaxurl */ +jQuery( document ).ready(function( $ ) { + $( '#health-check-file-integrity' ).submit( function( e ) { + var data = { + 'action': 'health-check-files-integrity-check' + }; + + e.preventDefault(); + + $( '#tools-file-integrity-response-holder' ).html( '<span class="spinner"></span>' ); + $( '#tools-file-integrity-response-holder .spinner' ).addClass( 'is-active' ); + + $.post( + ajaxurl, + data, + function( response ) { + $( '#tools-file-integrity-response-holder .spinner' ).removeClass( 'is-active' ); + $( '#tools-file-integrity-response-holder' ).parent().css( 'height', 'auto' ); + $( '#tools-file-integrity-response-holder' ).html( response.data.message ); + } + ); + }); + + $( '#tools-file-integrity-response-holder' ).on( 'click', 'a[href="#health-check-diff"]', function( e ) { + var file = $( this ).data( 'file' ), + data; + + e.preventDefault(); + + $( '#health-check-diff-modal' ).toggle(); + $( '#health-check-diff-modal #health-check-diff-modal-content .spinner' ).addClass( 'is-active' ); + + data = { + 'action': 'health-check-view-file-diff', + 'file': file + }; + + $.post( + ajaxurl, + data, + function( response ) { + $( '#health-check-diff-modal #health-check-diff-modal-diff' ).html( response.data.message ); + $( '#health-check-diff-modal #health-check-diff-modal-content h3' ).html( file ); + $( '#health-check-diff-modal #health-check-diff-modal-content .spinner' ).removeClass( 'is-active' ); + } + ); + }); +}); + +jQuery( document ).ready(function( $ ) { + $( '#health-check-diff-modal' ).on( 'click', 'a[href="#health-check-diff-modal-close"]', function( e ) { + e.preventDefault(); + $( '#health-check-diff-modal' ).toggle(); + $( '#health-check-diff-modal #health-check-diff-modal-diff' ).html( '' ); + $( '#health-check-diff-modal #health-check-diff-modal-content h3' ).html( '' ); + }); + + $( document ).keyup(function( e ) { + if ( 27 === e.which ) { + $( '#health-check-diff-modal' ).css( 'display', 'none' ); + $( '#health-check-diff-modal #health-check-diff-modal-diff' ).html( '' ); + $( '#health-check-diff-modal #health-check-diff-modal-content h3' ).html( '' ); + } + }); +}); + +/* global ajaxurl */ +jQuery( document ).ready(function( $ ) { + $( '#health-check-mail-check' ).submit( function( e ) { + var email = $( '#health-check-mail-check #email' ).val(), + emailMessage = $( '#health-check-mail-check #email_message' ).val(), + data; + + e.preventDefault(); + + $( '#tools-mail-check-response-holder' ).html( '<span class="spinner"></span>' ); + $( '#tools-mail-check-response-holder .spinner' ).addClass( 'is-active' ); + + data = { + 'action': 'health-check-mail-check', + 'email': email, + 'email_message': emailMessage + }; + + $.post( + ajaxurl, + data, + function( response ) { + $( '#tools-mail-check-response-holder .spinner' ).removeClass( 'is-active' ); + $( '#tools-mail-check-response-holder' ).parent().css( 'height', 'auto' ); + $( '#tools-mail-check-response-holder' ).html( response.data.message ); + } + ); + }); +}); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/mu-plugin/health-check-troubleshooting-mode.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/mu-plugin/health-check-troubleshooting-mode.php new file mode 100644 index 0000000..d81b22f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/assets/mu-plugin/health-check-troubleshooting-mode.php @@ -0,0 +1,1087 @@ +<?php +/* + Plugin Name: Health Check Troubleshooting Mode + Description: Conditionally disabled themes or plugins on your site for a given session, used to rule out conflicts during troubleshooting. + Version: 1.5.0 + */ + +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +class TD_Health_Check_Troubleshooting_MU { + private $disable_hash = null; + private $override_active = true; + private $default_theme = true; + private $active_plugins = array(); + private $allowed_plugins = array(); + private $current_theme; + private $current_theme_details; + private $self_fetching_theme = false; + + private $available_query_args = array( + 'health-check-disable-plugins', + 'health-check-disable-plugins-hash', + 'health-check-disable-troubleshooting', + 'health-check-change-active-theme', + 'health-check-troubleshoot-enable-plugin', + 'health-check-troubleshoot-disable-plugin', + ); + + private $default_themes = array( + 'twentyseventeen', + 'twentysixteen', + 'twentyfifteen', + 'twentyfourteen', + 'twentythirteen', + 'twentytwelve', + 'twentyeleven', + 'twentyten', + ); + + /** + * TD_Health_Check_Troubleshooting_MU constructor. + */ + public function __construct() { + $this->init(); + } + + /** + * Actually initiation of the plugin. + * + * @return void + */ + public function init() { + add_action( 'admin_bar_menu', array( $this, 'health_check_troubleshoot_menu_bar' ), 999 ); + + add_filter( 'option_active_plugins', array( $this, 'health_check_loopback_test_disable_plugins' ) ); + add_filter( 'option_active_sitewide_plugins', array( $this, 'health_check_loopback_test_disable_plugins' ) ); + + add_filter( 'pre_option_template', array( $this, 'health_check_troubleshoot_theme_template' ) ); + add_filter( 'pre_option_stylesheet', array( $this, 'health_check_troubleshoot_theme_stylesheet' ) ); + + add_action( 'admin_notices', array( $this, 'prompt_install_default_theme' ) ); + add_filter( 'user_has_cap', array( $this, 'remove_plugin_theme_install' ) ); + + add_action( 'plugin_action_links', array( $this, 'plugin_actions' ), 50, 4 ); + + add_action( 'admin_notices', array( $this, 'display_dashboard_widget' ) ); + add_action( 'admin_head', array( $this, 'dashboard_widget_styles' ) ); + add_action( 'admin_footer', array( $this, 'dashboard_widget_scripts' ) ); + + add_action( 'wp_logout', array( $this, 'health_check_troubleshooter_mode_logout' ) ); + add_action( 'init', array( $this, 'health_check_troubleshoot_get_captures' ) ); + + /* + * Plugin activations can be forced by other tools in things like themes, so let's + * attempt to work around that by forcing plugin lists back and forth. + * + * This is not an ideal scenario, but one we must accept as reality. + */ + add_action( 'activated_plugin', array( $this, 'plugin_activated' ) ); + + $this->load_options(); + } + + /** + * Set up the class variables based on option table entries. + * + * @return void + */ + public function load_options() { + $this->disable_hash = get_option( 'health-check-disable-plugin-hash', null ); + $this->allowed_plugins = get_option( 'health-check-allowed-plugins', array() ); + $this->default_theme = ( 'yes' === get_option( 'health-check-default-theme', 'yes' ) ? true : false ); + $this->active_plugins = $this->get_unfiltered_plugin_list(); + $this->current_theme = get_option( 'health-check-current-theme', false ); + } + + /** + * Add a prompt to install a default theme. + * + * If no default theme exists, we can't reliably assert if an issue is + * caused by the theme. In these cases we should provide an easy step + * to get to, and install, one of the default themes. + * + * @return void + */ + public function prompt_install_default_theme() { + if ( ! $this->is_troubleshooting() || $this->has_default_theme() ) { + return; + } + + printf( + '<div class="notice notice-warning dismissable"><p>%s</p><p><a href="%s" class="button button-primary">%s</a></p></div>', + esc_html__( 'You don\'t have any of the default themes installed. A default theme helps you determine if your current theme is causing conflicts.', 'health-check' ), + esc_url( admin_url( sprintf( + 'theme-install.php?theme=%s', + $this->default_themes[0] + ) ) ), + esc_html__( 'Install a default theme', 'health-check' ) + ); + } + + /** + * Remove the `Add` option for plugins and themes. + * + * When troubleshooting, adding or changing themes and plugins can + * lead to unexpected results. Remove these menu items to make it less + * likely that a user breaks their site through these. + * + * @param array $caps Array containing the current users capabilities. + * + * @return array + */ + public function remove_plugin_theme_install( $caps ) { + if ( ! $this->is_troubleshooting() ) { + return $caps; + } + + $caps['switch_themes'] = false; + + /* + * This is to early for `get_current_screen()`, so we have to do it the + * old fashioned way with `$_SERVER`. + */ + if ( 'plugin-install.php' === substr( $_SERVER['REQUEST_URI'], -18 ) ) { + $caps['activate_plugins'] = false; + } + + return $caps; + } + + /** + * Fire on plugin activation. + * + * When in Troubleshooting Mode, plugin activations + * will clear out the DB entry for `active_plugins`, this is bad. + * + * We fix this by re-setting the DB entry if anything tries + * to modify it during troubleshooting. + * + * @return void + */ + public function plugin_activated() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // Force the database entry for active plugins if someone tried changing plugins while in Troubleshooting Mode. + update_option( 'active_plugins', $this->active_plugins ); + } + + /** + * Modify plugin actions. + * + * While in Troubleshooting Mode, weird things will happen if you start + * modifying your plugin list. Prevent this, but also add in the ability + * to enable or disable a plugin during troubleshooting from this screen. + * + * @param $actions + * @param $plugin_file + * @param $plugin_data + * @param $context + * + * @return array + */ + public function plugin_actions( $actions, $plugin_file, $plugin_data, $context ) { + if ( ! $this->is_troubleshooting() ) { + return $actions; + } + + if ( 'mustuse' === $context ) { + return $actions; + } + + /* + * Disable all plugin actions when in Troubleshooting Mode. + * + * We intentionally remove all plugin actions to avoid accidental clicking, activating or deactivating plugins + * while our plugin is altering plugin data may lead to unexpected behaviors, so to keep things sane we do + * not allow users to perform any actions during this time. + */ + $actions = array(); + + // This isn't an active plugin, so does not apply to our troubleshooting scenarios. + if ( ! in_array( $plugin_file, $this->active_plugins ) ) { + return $actions; + } + + // Set a slug if the plugin lives in the plugins directory root. + if ( ! stristr( $plugin_file, '/' ) ) { + $plugin_data['slug'] = $plugin_file; + } + + $plugin_slug = ( isset( $plugin_data['slug'] ) ? $plugin_data['slug'] : sanitize_title( $plugin_data['Name'] ) ); + + if ( in_array( $plugin_slug, $this->allowed_plugins ) ) { + $actions['troubleshoot-disable'] = sprintf( + '<a href="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-troubleshoot-disable-plugin' => $plugin_slug, + ), admin_url( 'plugins.php' ) ) ), + esc_html__( 'Disable while troubleshooting', 'health-check' ) + ); + } else { + $actions['troubleshoot-disable'] = sprintf( + '<a href="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-troubleshoot-enable-plugin' => $plugin_slug, + ), admin_url( 'plugins.php' ) ) ), + esc_html__( 'Enable while troubleshooting', 'health-check' ) + ); + } + + return $actions; + } + + /** + * Get the actual list of active plugins. + * + * When in Troubleshooting Mode we override the list of plugins, + * this function lets us grab the active plugins list without + * any interference. + * + * @return array Array of active plugins. + */ + public function get_unfiltered_plugin_list() { + $this->override_active = false; + $all_plugins = get_option( 'active_plugins' ); + $this->override_active = true; + + return $all_plugins; + } + + /** + * Check if the user is currently in Troubleshooting Mode or not. + * + * @return bool + */ + public function is_troubleshooting() { + // Check if a session cookie to disable plugins has been set. + if ( isset( $_COOKIE['health-check-disable-plugins'] ) ) { + $_GET['health-check-disable-plugin-hash'] = $_COOKIE['health-check-disable-plugins']; + } + + // If the disable hash isn't set, no need to interact with things. + if ( ! isset( $_GET['health-check-disable-plugin-hash'] ) ) { + return false; + } + + if ( empty( $this->disable_hash ) ) { + return false; + } + + // If the plugin hash is not valid, we also break out + if ( $this->disable_hash !== $_GET['health-check-disable-plugin-hash'] ) { + return false; + } + + return true; + } + + /** + * Filter the plugins that are activated in WordPress. + * + * @param array $plugins An array of plugins marked as active. + * + * @return array + */ + function health_check_loopback_test_disable_plugins( $plugins ) { + if ( ! $this->is_troubleshooting() || ! $this->override_active ) { + return $plugins; + } + + // If we've received a comma-separated list of allowed plugins, we'll add them to the array of allowed plugins. + if ( isset( $_GET['health-check-allowed-plugins'] ) ) { + $this->allowed_plugins = explode( ',', $_GET['health-check-allowed-plugins'] ); + } + + foreach ( $plugins as $plugin_no => $plugin_path ) { + // Split up the plugin path, [0] is the slug and [1] holds the primary plugin file. + $plugin_parts = explode( '/', $plugin_path ); + + // We may want to allow individual, or groups of plugins, so introduce a skip-mechanic for those scenarios. + if ( in_array( $plugin_parts[0], $this->allowed_plugins ) ) { + continue; + } + + // Remove the reference to this plugin. + unset( $plugins[ $plugin_no ] ); + } + + // Return a possibly modified list of activated plugins. + return $plugins; + } + + /** + * Check if a default theme exists. + * + * If a default theme exists, return the most recent one, if not return `false`. + * + * @return bool|string + */ + function has_default_theme() { + foreach ( $this->default_themes as $default_theme ) { + if ( $this->theme_exists( $default_theme ) ) { + return $default_theme; + } + } + + return false; + } + + /** + * Check if a theme exists by looking for the slug. + * + * @param string $theme_slug + * + * @return bool + */ + function theme_exists( $theme_slug ) { + return is_dir( WP_CONTENT_DIR . '/themes/' . $theme_slug ); + } + + /** + * Check if theme overrides are active. + * + * @return bool + */ + function override_theme() { + if ( ! $this->is_troubleshooting() ) { + return false; + } + + return true; + } + + /** + * Override the default theme. + * + * Attempt to set one of the default themes, or a theme of the users choosing, as the active one + * during Troubleshooting Mode. + * + * @param $default + * + * @return bool|string + */ + function health_check_troubleshoot_theme_stylesheet( $default ) { + if ( $this->self_fetching_theme ) { + return $default; + } + + if ( ! $this->override_theme() ) { + return $default; + } + + if ( empty( $this->current_theme_details ) ) { + $this->self_fetching_theme = true; + $this->current_theme_details = wp_get_theme( $this->current_theme ); + $this->self_fetching_theme = false; + } + + // If no theme has been chosen, start off by troubleshooting as a default theme if one exists. + $default_theme = $this->has_default_theme(); + if ( false === $this->current_theme ) { + if ( $default_theme ) { + return $default_theme; + } + } + + return $this->current_theme; + } + + /** + * Override the default parent theme. + * + * If this is a child theme, override the parent and provide our users chosen themes parent instead. + * + * @param $default + * + * @return bool|string + */ + function health_check_troubleshoot_theme_template( $default ) { + if ( $this->self_fetching_theme ) { + return $default; + } + + if ( ! $this->override_theme() ) { + return $default; + } + + if ( empty( $this->current_theme_details ) ) { + $this->self_fetching_theme = true; + $this->current_theme_details = wp_get_theme( $this->current_theme ); + $this->self_fetching_theme = false; + } + + // If no theme has been chosen, start off by troubleshooting as a default theme if one exists. + $default_theme = $this->has_default_theme(); + if ( false === $this->current_theme ) { + if ( $default_theme ) { + return $default_theme; + } + } + + if ( $this->current_theme_details->parent() ) { + return $this->current_theme_details->get_template(); + } + + return $this->current_theme; + } + + /** + * Disable Troubleshooting Mode on logout. + * + * If logged in, disable the Troubleshooting Mode when the logout + * event is fired, this ensures we start with a clean slate on + * the next login. + * + * @return void + */ + function health_check_troubleshooter_mode_logout() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + if ( isset( $_COOKIE['health-check-disable-plugins'] ) ) { + $this->disable_troubleshooting_mode(); + } + } + + function disable_troubleshooting_mode() { + unset( $_COOKIE['health-check-disable-plugins'] ); + setcookie( 'health-check-disable-plugins', null, 0, COOKIEPATH, COOKIE_DOMAIN ); + delete_option( 'health-check-allowed-plugins' ); + delete_option( 'health-check-default-theme' ); + delete_option( 'health-check-current-theme' ); + + delete_option( 'health-check-backup-plugin-list' ); + } + + /** + * Catch query arguments. + * + * When in Troubleshooting Mode, look for various GET variables that trigger + * various plugin actions. + * + * @return void + */ + function health_check_troubleshoot_get_captures() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // Disable Troubleshooting Mode. + if ( isset( $_GET['health-check-disable-troubleshooting'] ) ) { + $this->disable_troubleshooting_mode(); + + wp_redirect( remove_query_arg( $this->available_query_args ) ); + die(); // phpcs:ignore + } + + // Dismiss notices. + if ( isset( $_GET['health-check-dismiss-notices'] ) && $this->is_troubleshooting() && is_admin() ) { + update_option( 'health-check-dashboard-notices', array() ); + + wp_redirect( admin_url() ); + die(); // phpcs:ignore + } + + // Enable an individual plugin. + if ( isset( $_GET['health-check-troubleshoot-enable-plugin'] ) ) { + $old_allowed_plugins = $this->allowed_plugins; + + $this->allowed_plugins[ $_GET['health-check-troubleshoot-enable-plugin'] ] = $_GET['health-check-troubleshoot-enable-plugin']; + + update_option( 'health-check-allowed-plugins', $this->allowed_plugins ); + + if ( ! $this->test_site_state() ) { + $this->allowed_plugins = $old_allowed_plugins; + update_option( 'health-check-allowed-plugins', $old_allowed_plugins ); + + $this->add_dashboard_notice( + sprintf( + // translators: %s: The plugin slug that was enabled. + __( 'When enabling the plugin, %s, a site failure occurred. Because of this the change was automatically reverted.', 'health-check' ), + $_GET['health-check-troubleshoot-enable-plugin'] + ), + 'warning' + ); + } + + wp_redirect( remove_query_arg( $this->available_query_args ) ); + die(); // phpcs:ignore + } + + // Disable an individual plugin. + if ( isset( $_GET['health-check-troubleshoot-disable-plugin'] ) ) { + $old_allowed_plugins = $this->allowed_plugins; + + unset( $this->allowed_plugins[ $_GET['health-check-troubleshoot-disable-plugin'] ] ); + + update_option( 'health-check-allowed-plugins', $this->allowed_plugins ); + + if ( ! $this->test_site_state() ) { + $this->allowed_plugins = $old_allowed_plugins; + update_option( 'health-check-allowed-plugins', $old_allowed_plugins ); + + $this->add_dashboard_notice( + sprintf( + // translators: %s: The plugin slug that was disabled. + __( 'When disabling the plugin, %s, a site failure occurred. Because of this the change was automatically reverted.', 'health-check' ), + $_GET['health-check-troubleshoot-enable-plugin'] + ), + 'warning' + ); + } + + wp_redirect( remove_query_arg( $this->available_query_args ) ); + die(); // phpcs:ignore + } + + // Change the active theme for this session. + if ( isset( $_GET['health-check-change-active-theme'] ) ) { + $old_theme = get_option( 'health-check-current-theme' ); + + update_option( 'health-check-current-theme', $_GET['health-check-change-active-theme'] ); + + if ( ! $this->test_site_state() ) { + update_option( 'health-check-current-theme', $old_theme ); + + $this->add_dashboard_notice( + sprintf( + // translators: %s: The theme slug that was switched to. + __( 'When switching the active theme to %s, a site failure occurred. Because of this we reverted the theme to the one you used previously.', 'health-check' ), + $_GET['health-check-change-active-theme'] + ), + 'warning' + ); + } + + wp_redirect( remove_query_arg( $this->available_query_args ) ); + die(); // phpcs:ignore + } + } + + private function add_dashboard_notice( $message, $severity = 'notice' ) { + $notices = get_option( 'health-check-dashboard-notices', array() ); + + $notices[] = array( + 'severity' => $severity, + 'message' => $message, + 'time' => date( 'Y-m-d H:i' ), + ); + + update_option( 'health-check-dashboard-notices', $notices ); + } + + /** + * Extend the admin bar. + * + * When in Troubleshooting Mode, introduce a new element to the admin bar to show + * enabled and disabled plugins (if conditions are met), switch between themes + * and disable Troubleshooting Mode altogether. + * + * @param WP_Admin_Bar $wp_menu + * + * @return void + */ + function health_check_troubleshoot_menu_bar( $wp_menu ) { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // We need some admin functions to make this a better user experience, so include that file. + if ( ! is_admin() ) { + require_once( trailingslashit( ABSPATH ) . 'wp-admin/includes/plugin.php' ); + } + + // Ensure the theme functions are available to us on every page. + include_once( trailingslashit( ABSPATH ) . 'wp-admin/includes/theme.php' ); + + // Add top-level menu item. + $wp_menu->add_menu( array( + 'id' => 'health-check', + 'title' => esc_html__( 'Troubleshooting Mode', 'health-check' ), + ) ); + + // Add a link to manage plugins if there are more than 20 set to be active. + if ( count( $this->active_plugins ) > 20 ) { + $wp_menu->add_node( array( + 'id' => 'health-check-plugins', + 'title' => esc_html__( 'Manage active plugins', 'health-check' ), + 'parent' => 'health-check', + 'href' => admin_url( 'plugins.php' ), + ) ); + } else { + $wp_menu->add_node( array( + 'id' => 'health-check-plugins', + 'title' => esc_html__( 'Plugins', 'health-check' ), + 'parent' => 'health-check', + ) ); + + $wp_menu->add_group( array( + 'id' => 'health-check-plugins-enabled', + 'parent' => 'health-check-plugins', + ) ); + $wp_menu->add_group( array( + 'id' => 'health-check-plugins-disabled', + 'parent' => 'health-check-plugins', + ) ); + + foreach ( $this->active_plugins as $single_plugin ) { + $plugin_slug = explode( '/', $single_plugin ); + $plugin_slug = $plugin_slug[0]; + + $plugin_data = get_plugin_data( trailingslashit( WP_PLUGIN_DIR ) . $single_plugin ); + + $enabled = true; + + if ( in_array( $plugin_slug, $this->allowed_plugins ) ) { + $label = sprintf( + // Translators: %s: Plugin slug. + esc_html__( 'Disable %s', 'health-check' ), + sprintf( + '<strong>%s</strong>', + $plugin_data['Name'] + ) + ); + $url = add_query_arg( array( + 'health-check-troubleshoot-disable-plugin' => $plugin_slug, + ) ); + } else { + $enabled = false; + $label = sprintf( + // Translators: %s: Plugin slug. + esc_html__( 'Enable %s', 'health-check' ), + sprintf( + '<strong>%s</strong>', + $plugin_data['Name'] + ) + ); + $url = add_query_arg( array( + 'health-check-troubleshoot-enable-plugin' => $plugin_slug, + ) ); + } + + $wp_menu->add_node( array( + 'id' => sprintf( + 'health-check-plugin-%s', + $plugin_slug + ), + 'title' => $label, + 'parent' => ( $enabled ? 'health-check-plugins-enabled' : 'health-check-plugins-disabled' ), + 'href' => $url, + ) ); + } + } + + $wp_menu->add_node( array( + 'id' => 'health-check-theme', + 'title' => esc_html__( 'Themes', 'health-check' ), + 'parent' => 'health-check', + ) ); + + $themes = wp_prepare_themes_for_js(); + + foreach ( $themes as $theme ) { + $node = array( + 'id' => sprintf( + 'health-check-theme-%s', + sanitize_title( $theme['id'] ) + ), + 'title' => sprintf( + '%s %s', + // translators: Prefix for the active theme in a listing. + ( $theme['active'] ? esc_html__( 'Active:', 'health-check' ) : '' ), + $theme['name'] + ), + 'parent' => 'health-check-theme', + ); + + if ( ! $theme['active'] ) { + $node['href'] = add_query_arg( array( + 'health-check-change-active-theme' => $theme['id'], + ) ); + } + + $wp_menu->add_node( $node ); + } + + // Add a link to disable Troubleshooting Mode. + $wp_menu->add_node( array( + 'id' => 'health-check-disable', + 'title' => esc_html__( 'Disable Troubleshooting Mode', 'health-check' ), + 'parent' => 'health-check', + 'href' => add_query_arg( array( + 'health-check-disable-troubleshooting' => true, + ) ), + ) ); + } + + public function test_site_state() { + + // Make sure the TD_Health_Check_Loopback class is available to us, in case the primary plugin is disabled. + if ( ! method_exists( 'TD_Health_Check_Loopback', 'can_perform_loopback' ) ) { + $plugin_file = trailingslashit( WP_PLUGIN_DIR ) . 'health-check/includes/class-health-check-loopback.php'; + + // Make sure the file exists, in case someone deleted the plugin manually, we don't want any errors. + if ( ! file_exists( $plugin_file ) ) { + + // If the plugin files are inaccessible, we can't guarantee for the state of the site, so the default is a bad response. + return false; + } + + require_once( $plugin_file ); + } + + $loopback_state = TD_Health_Check_Loopback::can_perform_loopback(); + + if ( 'good' !== $loopback_state->status ) { + return false; + } + + return true; + } + + public function dashboard_widget_styles() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // Check that it's the dashboard page, we don't want to disturb any other pages. + $screen = get_current_screen(); + if ( 'dashboard' !== $screen->id && 'plugins' !== $screen->id ) { + return; + } + ?> +<style type="text/css"> + @media all and (min-width: 783px) { + #health-check-dashboard-widget { + margin-top: 3rem; + } + } + + #health-check-dashboard-widget .welcome-panel-content { + max-width: initial; + } + + #health-check-dashboard-widget .notices .no-notices p { + color: #bfc3c7; + font-size: 1.2rem; + } + #health-check-dashboard-widget .notices .notice { + margin-left: 0; + } + #health-check-dashboard-widget .notices .dismiss-notices { + float: right; + margin-right: 1rem; + } + + #health-check-dashboard-widget .disable-troubleshooting-mode { + margin-bottom: 1rem; + } + @media all and (min-width: 960px) { + #health-check-dashboard-widget .disable-troubleshooting-mode { + position: absolute; + bottom: 1rem; + right: 1rem; + } + } + + #health-check-dashboard-widget .toggle-visibility { + display: none; + } + #health-check-dashboard-widget .toggle-visibility.visible { + display: block; + } + + #health-check-dashboard-widget .welcome-panel-column-container { + position: initial; + } + + #health-check-dashboard-widget .welcome-panel-column.is-standalone-button { + width: 100%; + text-align: right; + } + #health-check-dashboard-widget .welcome-panel-column.is-standalone-button .disable-troubleshooting-mode { + position: relative; + } +</style> + <?php + } + + public function dashboard_widget_scripts() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // Check that it's the dashboard page, we don't want to disturb any other pages. + $screen = get_current_screen(); + if ( 'dashboard' !== $screen->id && 'plugins' !== $screen->id ) { + return; + } + ?> +<script type="text/javascript"> + jQuery( document ).ready(function( $ ) { + $( '.health-check-toggle-visibility' ).click(function( e ) { + var $elements = $( '.toggle-visibility', $( '#' + $ ( this ).data( 'element' ) ) ); + + if ( $elements.is( ':visible' ) ) { + $elements.attr( 'aria-hidden', 'true' ).toggle(); + } else { + $elements.attr( 'aria-hidden', 'false' ).toggle(); + } + }); + }); +</script> + <?php + } + + public function display_dashboard_widget() { + if ( ! $this->is_troubleshooting() ) { + return; + } + + // Check that it's the dashboard page, we don't want to disturb any other pages. + $screen = get_current_screen(); + if ( 'dashboard' !== $screen->id && 'plugins' !== $screen->id ) { + return; + } + + $notices = get_option( 'health-check-dashboard-notices', array() ); + ?> + <div class="wrap"> + <div id="health-check-dashboard-widget" class="welcome-panel"> + <div class="welcome-panel-content"> + <h2> + <?php esc_html_e( 'Health Check — Troubleshooting Mode', 'health-check' ); ?> + </h2> + + <p class="about-description"> + <?php esc_html_e( 'Your site is currently in Troubleshooting Mode. This has no effect on your site visitors, they will continue to view your site as usual, but for you it will look as if you had just installed WordPress for the first time.', 'health-check' ); ?> + </p> + + <p class="about-description"> + <?php esc_html_e( 'Here you can enable individual plugins or themes, helping you to find out what might be causing strange behaviors on your site. Do note that any changes you make to settings will be kept when you disable Troubleshooting Mode.', 'health-check' ); ?> + </p> + + <div class="notices"> + <h3> + <span class="dashicons dashicons-flag"></span> + <?php esc_html_e( 'Notices', 'health-check' ); ?> + </h3> + + <?php if ( empty( $notices ) && 'plugins' !== $screen->id ) : ?> + <div class="no-notices"> + <p> + <?php esc_html_e( 'There are no notices to show.', 'health-check' ); ?> + </p> + </div> + <?php endif; ?> + + <?php if ( 'plugins' === $screen->id ) : ?> + <div class="notice notice-warning inline"> + <p> + <?php esc_html_e( 'Plugin actions, such as activating and deactivating, are not available while in Troubleshooting Mode.', 'health-check' ); ?> + </p> + </div> + <?php endif; ?> + + <?php + foreach ( $notices as $notice ) { + printf( + '<div class="notice notice-%s inline"><p>%s</p></div>', + esc_attr( $notice['severity'] ), + esc_html( $notice['message'] ) + ); + } + ?> + + <?php + if ( ! empty( $notices ) ) { + printf( + '<a href="%s" class="dismiss-notices">%s</a>', + esc_url( add_query_arg( array( + 'health-check-dismiss-notices' => true, + ) ) ), + esc_html__( 'Dismiss notices', 'health-check' ) + ); + } + ?> + </div> + + <div class="welcome-panel-column-container"> + <div class="welcome-panel-column"> + <?php if ( 'plugins' !== $screen->id ) : ?> + <h3> + <span class="dashicons dashicons-admin-plugins"></span> + <?php esc_html_e( 'Available Plugins', 'health-check' ); ?> + </h3> + + <ul id="health-check-plugins"> + <?php + $active_plugins = array(); + $inactive_plugins = array(); + + foreach ( $this->active_plugins as $count => $single_plugin ) { + $plugin_slug = explode( '/', $single_plugin ); + $plugin_slug = $plugin_slug[0]; + + $plugin_is_visible = true; + if ( $count >= 5 ) { + $plugin_is_visible = false; + } + + $plugin_data = get_plugin_data( trailingslashit( WP_PLUGIN_DIR ) . $single_plugin ); + + $actions = array(); + + if ( in_array( $plugin_slug, $this->allowed_plugins ) ) { + $actions[] = sprintf( + '<a href="%s" aria-label="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-troubleshoot-disable-plugin' => $plugin_slug, + ) ) ), + esc_attr( + sprintf( + // translators: %s: Plugin name. + __( 'Disable the plugin, %s, while troubleshooting.', 'health-check' ), + $plugin_data['Name'] + ) + ), + esc_html__( 'Disable', 'health-check' ) + ); + } else { + $actions[] = sprintf( + '<a href="%s" aria-label="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-troubleshoot-enable-plugin' => $plugin_slug, + ) ) ), + esc_attr( + sprintf( + // translators: %s: Plugin name. + __( 'Enable the plugin, %s, while troubleshooting.', 'health-check' ), + $plugin_data['Name'] + ) + ), + esc_html__( 'Enable', 'health-check' ) + ); + } + + printf( + '<li class="%s" aria-hidden="%s">%s - %s</li>', + ( ! $plugin_is_visible ? 'toggle-visibility' : '' ), + ( ! $plugin_is_visible ? 'true' : 'false' ), + esc_html( $plugin_data['Name'] ), + implode( ' | ', $actions ) + ); + } + ?> + </ul> + + <?php if ( count( $this->active_plugins ) > 5 ) : ?> + <p> + <button type="button" class="button button-link health-check-toggle-visibility toggle-visibility visible" aria-hidden="false" data-element="health-check-plugins"> + <?php esc_html_e( 'Show all plugins', 'health-check' ); ?> + </button> + + <button type="button" class="button button-link health-check-toggle-visibility toggle-visibility" aria-hidden="true" data-element="health-check-plugins"> + <?php esc_html_e( 'Show fewer plugins', 'health-check' ); ?> + </button> + </p> + <?php endif; ?> + <?php endif; ?> + </div> + + <div class="welcome-panel-column"> + <?php if ( 'plugins' !== $screen->id ) : ?> + <h3> + <span class="dashicons dashicons-admin-appearance"></span> + <?php esc_html_e( 'Available Themes', 'health-check' ); ?> + </h3> + + <ul id="health-check-themes"> + <?php + $themes = wp_prepare_themes_for_js(); + + foreach ( $themes as $count => $theme ) { + $active = $theme['active']; + + $theme_is_visible = true; + if ( $count >= 5 ) { + $theme_is_visible = false; + } + + $actions = sprintf( + '<a href="%s" aria-label="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-change-active-theme' => $theme['id'], + ) ) ), + esc_attr( + sprintf( + // translators: %s: Theme name. + __( 'Switch the active theme to %s', 'health-check' ), + $theme['name'] + ) + ), + esc_html__( 'Switch to this theme', 'health-check' ) + ); + + $plugin_label = sprintf( + '%s %s', + // translators: Prefix for the active theme in a listing. + ( $theme['active'] ? esc_html__( 'Active:', 'health-check' ) : '' ), + $theme['name'] + ); + + if ( ! $theme['active'] ) { + $plugin_label .= ' - ' . $actions; + } + + printf( + '<li class="%s" aria-hidden="%s">%s</li>', + ( $theme_is_visible ? '' : 'toggle-visibility' ), + ( $theme_is_visible ? 'false' : 'true' ), + $plugin_label + ); + } + ?> + </ul> + + <?php if ( count( $themes ) > 5 ) : ?> + <p> + <button type="button" class="button button-link health-check-toggle-visibility toggle-visibility visible" aria-hidden="false" data-element="health-check-themes"> + <?php esc_html_e( 'Show all themes', 'health-check' ); ?> + </button> + + <button type="button" class="button button-link health-check-toggle-visibility toggle-visibility" aria-hidden="true"> + <?php esc_html_e( 'Show fewer themes', 'health-check' ); ?> + </button> + </p> + <?php endif; ?> + <?php endif; ?> + </div> + + <div class="welcome-panel-column <?php echo ( 'plugins' === $screen->id ? 'is-standalone-button' : '' ); ?>"> + <?php + printf( + '<a href="%s" class="button button-primary button-hero disable-troubleshooting-mode">%s</a>', + esc_url( add_query_arg( array( + 'health-check-disable-troubleshooting' => true, + ) ) ), + esc_html__( 'Disable Troubleshooting Mode', 'health-check' ) + ); + ?> + </div> + </div> + </div> + </div> + </div> + <?php + } + +} + +new TD_Health_Check_Troubleshooting_MU(); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/changelog.txt b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/changelog.txt new file mode 100644 index 0000000..2acf20f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/changelog.txt @@ -0,0 +1,120 @@ += v 1.1.2 = +* Fixed child themes not displaying properly in Troubleshooting Mode. +* Improved styling for the backup warning, shown when activating the plugin, so it doesn't block mobile users. +* Added explanations to the plugins screen if you enter Troubleshooting Mode there, so users know what is going on. +* Fixed admin menu overflowing if too many plugins exist. + += v 1.1.1 = +* Fixed a fatal error that would occur if a user had an older version of Troubleshooting Mode on their system. + += v 1.1.0 = +* Check for theme, plugin and WordPress updates when visiting the debug tab. +* Improved wording on some failure situations. +* Made the Debug Information tab a bit easier to read with fixed table styles. +* Redesigned tools page, with added accordion to avoid information overload, and different features mixing together. +* Mail test tool now allows you to include an optional customized message. +* Users can now change between any installed theme while in troubleshooting mode. +* Renamed the Must-Use plugin, making it align with what features present in the file. +* Improved the plugin cleanup process, when the plugin is deleted. +* Show full plugin names, and not slugs, in the troubleshooting admin bar menu. +* Check if the .htaccess file contains any rules not added by WordPress core in the debug section. +* Allow the disabling of Troubleshooting Mode from the same page as you previously enabled it from. +* Removed cURL checks from the automated test page, this was more confusion than help. +* Add installation size to the debug information. + += v 1.0.1 = +* Fixed email tester having the wrong class reference, preventing it from running. +* Add some missing text domains preventing full translations. + += v 1.0.0 = +* Added minimum PHP version checks with documentation links. +* Added testing with a default theme to the loopback checker. +* Added cURL version checker to the health check tab. +* Added simple e-mail tester. +* Added core file integrity checker. +* Added capability checks, to avoid installing things that may modify the database while troubleshooting. +* Added a prompt to install a default theme if none exist. +* Added a warning encouraging users to maintain up to date backups when troubleshooting. +* Fixed MU plugin not always updating (if available) when a user tries to troubleshoot. +* Fixed fatal error when trying to troubleshoot "too early". +* Updated troubleshooting drop down, it no longer shows theme switching if no default theme exists. +* Removed the checkbox requirement from the Troubleshooting tab, it wasn't needed any more, and added pointless complexity now. + += v 0.9.0 = +* Various string changes, typo fixes and translation enhancements. +* Added conditional hiding of the plugins list from the admin bar, if there's too many plugins it becomes a bad experience. (Hidden if there are more than 20 active plugins) +* Added ability to enable/disable plugins in Troubleshooting Mode from the plugins list. +* Added filter to remove actions from the plugin list in Troubleshooting Mode. +* Fixed notices on the plugin screen when plugin data may be inconsistent. +* Fixed jumping directly to troubleshooting mode for single file plugins placed directly in the plugin directory root. +* Fixed issue where troubleshooting a plugin directly made it impossible to disable it while in Troubleshooting Mode. +* Fixed so that the original language is returned when translating the debug data for copying. +* Fixed issue where the Debug screen would turn to half-English when using a non-English language. +* Fixed an issue where plugins could become truly disabled on a site when in Troubleshooting Mode. +* Fixed so that enabled/disabled plugins don't carry over between troubleshooting sessions. + += v 0.8.0 = +* Updated recommended PHP version to mirror WordPress.org. +* Updated texts for troubleshooting mode. +* Re-labeled database terms to be more user friendly. +* Added media information to the debug tab. +* Added individual `Troubleshoot` links for the list of active plugins. +* Added automatic copy to clipboard with supported browsers in the debug tab. + += v 0.7.0 = +* Troubleshooting mode now also switches to a default theme. +* Introduced a method for toggling default or active theme use when in troubleshooting mode. +* Introduced a method for enabling/disabling plugins while in troubleshooting mode. +* Introduced a method for disabling troubleshooting mode without needing to log out and back in again. + += v 0.6.0 = +* Improved loopback tests + * Check if loopbacks can be completed without plugins activated + * Test individual plugins to identify loopback blockers +* Add troubleshooting mode, test your website without any plugins for your session without disabling functionality for visitors. + += v 0.5.1 = +* Introduced loopback check to the health checker status. + += v 0.5.0 = +* Added clarity to many text strings. +* Avoid listing MU directories if it's not being used. +* Add a Table of Contents heading and make navigating the debug page from it smoother. +* Only enqueue our CSS and JavaScript if we are on the health check pages. +* Add some missing version numbers nor being included in text strings. +* Avoid fatal errors if accessing files directly, caused by translation functions being used when they don't exist. +* Avoid "empty" strings when author or version is missing from plugins or themes. +* Make the health checker test background updates. +* Make the health checker look for missed scheduled events. +* If using a localized version of WordPress, also display the copy and paste field in English if using an international support resource. +* Indicate if 64bit values are supported by PHP in the debug section. +* Improved MariaDB version detection/comparison. + += v 0.4.1 = +* Better SQL version detection to account for MariaDB versions +* Added translation support +* Removed unintentional indentations in the debug copying field + += v 0.4 = +* Added debug section +* Added PHP info section +* Cleaned up the health check +* Added WordPress.org connectivity check +* Added HTTPS check + += v 0.3.1 = +* Fixed a few typos + += v 0.3 = +* Added recommended PHP and MySQL versions +* Check for utf8mb4 support +* Fixed a bunch of PHP warnings + += v 0.2.1 = +* Fixed version comparision bug - When the server had the exact required versions we reported it as out of date. + += v 0.2 = +* Updated with actual PHP and MySQL version requirements for WordPress 3.2 + += v 0.1 = +* Initial release with checks for the PHP and MySQL versions we will likely target for WordPress 3.2 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/health-check.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/health-check.php new file mode 100644 index 0000000..be2b46d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/health-check.php @@ -0,0 +1,63 @@ +<?php +/** + * Plugins primary file, in charge of including all other dependencies. + * + * @package Health Check + * + * @wordpress-plugin + * Plugin Name: Health Check & Troubleshooting + * Plugin URI: http://wordpress.org/plugins/health-check/ + * Description: Checks the health of your WordPress install. + * Author: The WordPress.org community + * Version: 1.2.1 + * Author URI: http://wordpress.org/plugins/health-check/ + * Text Domain: health-check + */ + +// Check that the file is nto accessed directly. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +// Set the minimum PHP version WordPress supports. +define( 'TD_HEALTH_CHECK_PHP_MIN_VERSION', '5.6' ); + +// Set the lowest PHP version still receiving security updates. +define( 'TD_HEALTH_CHECK_PHP_SUPPORTED_VERSION', '5.6' ); + +// Set the PHP version WordPress recommends. +define( 'TD_HEALTH_CHECK_PHP_REC_VERSION', '8.0' ); + +// Set the minimum MySQL version WordPress supports. +define( 'TD_HEALTH_CHECK_MYSQL_MIN_VERSION', '5.0' ); + +// Set the MySQL version WordPress recommends. +define( 'TD_HEALTH_CHECK_MYSQL_REC_VERSION', '5.6' ); + +// Set the plugin version. +define( 'TD_HEALTH_CHECK_PLUGIN_VERSION', '1.2.1' ); + +// Set the absolute path for the plugin. +define( 'TD_HEALTH_CHECK_PLUGIN_DIRECTORY', plugin_dir_path( __FILE__ ) ); + +// Set the plugin URL root. +define( 'TD_HEALTH_CHECK_PLUGIN_URL', plugins_url( '/', __FILE__ ) ); + +// Set the current cURL version. +define( 'TD_HEALTH_CHECK_CURL_VERSION', '7.58' ); + +// Set the minimum cURL version that we've tested that core works with. +define( 'TD_HEALTH_CHECK_CURL_MIN_VERSION', '7.38' ); + +// Include class-files used by our plugin. +require_once( dirname( __FILE__ ) . '/includes/class-health-check.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-auto-updates.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-wp-cron.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-debug-data.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-loopback.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-troubleshoot.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-files-integrity.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-mail-check.php' ); +require_once( dirname( __FILE__ ) . '/includes/class-health-check-site-status.php' ); + +// Initialize our plugin. \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-auto-updates.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-auto-updates.php new file mode 100644 index 0000000..9c53f80 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-auto-updates.php @@ -0,0 +1,531 @@ +<?php +/** + * Class for testing automatic updates in the WordPress code. + * + * @package Health Check + */ + +/** + * Class TD_Health_Check_Auto_Updates + */ +class TD_Health_Check_Auto_Updates { + /** + * TD_Health_Check_Auto_Updates constructor. + * + * @uses TD_Health_Check::init() + * + * @return void + */ + public function __construct() { + $this->init(); + } + + /** + * Initiate the plugin class. + * + * @return void + */ + public function init() { + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + } + + /** + * Run tests to determine if auto-updates can run. + * + * @uses get_class_methods() + * @uses substr() + * @uses call_user_func() + * + * @return array + */ + public function run_tests() { + $tests = array(); + + foreach ( get_class_methods( $this ) as $method ) { + if ( 'test_' !== substr( $method, 0, 5 ) ) { + continue; + } + + $result = call_user_func( array( $this, $method ) ); + + if ( false === $result || null === $result ) { + continue; + } + + $result = (object) $result; + + if ( empty( $result->severity ) ) { + $result->severity = 'warning'; + } + + $tests[ $method ] = $result; + } + + return $tests; + } + + /** + * Test if file modifications are possible. + * + * @uses defined() + * @uses sprintf() + * @uses esc_html__() + * + * @return array + */ + function test_constant_FILE_MODS() { + if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the constant used. */ + esc_html__( 'The %s constant is defined and enabled.', 'health-check' ), + '<code>DISALLOW_FILE_MODS</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic updates are disabled with a constant. + * + * @uses defined() + * @uses sprintf() + * @uses esc_html__() + * + * @return array + */ + function test_constant_AUTOMATIC_UPDATER_DISABLED() { + if ( defined( 'AUTOMATIC_UPDATER_DISABLED' ) && AUTOMATIC_UPDATER_DISABLED ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the constant used. */ + esc_html__( 'The %s constant is defined and enabled.', 'health-check' ), + '<code>AUTOMATIC_UPDATER_DISABLED</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic core updates are disabled with a constant. + * + * @uses defined() + * @uses sprintf() + * @uses esc_html__() + * + * @return array + */ + function test_constant_WP_AUTO_UPDATE_CORE() { + if ( defined( 'WP_AUTO_UPDATE_CORE' ) && false === WP_AUTO_UPDATE_CORE ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the constant used. */ + esc_html__( 'The %s constant is defined and enabled.', 'health-check' ), + '<code>WP_AUTO_UPDATE_CORE</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if updates are intercepted by a filter. + * + * @uses has_filter() + * @uses sprintf() + * @uses esc_html__() + * + * @return array + */ + function test_wp_version_check_attached() { + $cookies = wp_unslash( $_COOKIE ); + $timeout = 10; + $headers = array( + 'Cache-Control' => 'no-cache', + ); + + // Include Basic auth in loopback requests. + if ( isset( $_SERVER['PHP_AUTH_USER'] ) && isset( $_SERVER['PHP_AUTH_PW'] ) ) { + $headers['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) ); + } + + $url = add_query_arg( array( + 'health-check-test-wp_version_check' => true, + ), admin_url() ); + + $test = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + + $response = wp_remote_retrieve_body( $test ); + + if ( 'yes' !== $response ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the filter used. */ + esc_html__( 'A plugin has prevented updates by disabling %s.', 'health-check' ), + '<code>wp_version_check()</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic updates are disabled by a filter. + * + * @uses apply_filters() + * @uses sprintf() + * @uses esc_html__() + * + * @return array + */ + function test_filters_automatic_updater_disabled() { + if ( apply_filters( 'automatic_updater_disabled', false ) ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the filter used. */ + esc_html__( 'The %s filter is enabled.', 'health-check' ), + '<code>automatic_updater_disabled</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if automatic updates have tried to run, but failed, previously. + * + * @uses get_site_option() + * @uses esc_html__() + * @uses sprintf() + * + * @return array|bool + */ + function test_if_failed_update() { + $failed = get_site_option( 'auto_core_update_failed' ); + + if ( ! $failed ) { + return false; + } + + if ( ! empty( $failed['critical'] ) ) { + $desc = esc_html__( 'A previous automatic background update ended with a critical failure, so updates are now disabled.', 'health-check' ); + $desc .= ' ' . esc_html__( 'You would have received an email because of this.', 'health-check' ); + $desc .= ' ' . esc_html__( "When you've been able to update using the \"Update Now\" button on Dashboard > Updates, we'll clear this error for future update attempts.", 'health-check' ); + $desc .= ' ' . sprintf( + /* translators: %s: Code of error shown. */ + esc_html__( 'The error code was %s.', 'health-check' ), + '<code>' . $failed['error_code'] . '</code>' + ); + return array( + 'desc' => $desc, + 'severity' => 'warning', + ); + } + + $desc = esc_html__( 'A previous automatic background update could not occur.', 'health-check' ); + if ( empty( $failed['retry'] ) ) { + $desc .= ' ' . esc_html__( 'You would have received an email because of this.', 'health-check' ); + } + + $desc .= ' ' . esc_html__( "We'll try again with the next release.", 'health-check' ); + $desc .= ' ' . sprintf( + /* translators: %s: Code of error shown. */ + esc_html__( 'The error code was %s.', 'health-check' ), + '<code>' . $failed['error_code'] . '</code>' + ); + return array( + 'desc' => $desc, + 'severity' => 'warning', + ); + } + + /** + * Check if WordPress is controlled by a VCS (Git, Subversion etc). + * + * @uses dirname() + * @uses array_unique() + * @uses is_dir() + * @uses rtrim() + * @uses apply_filters() + * @uses sprintf() + * @uses esc_html__() + * + * @param string $context The path to check from. + * + * @return array + */ + function _test_is_vcs_checkout( $context ) { + $context_dirs = array( ABSPATH ); + $vcs_dirs = array( '.svn', '.git', '.hg', '.bzr' ); + $check_dirs = array(); + + foreach ( $context_dirs as $context_dir ) { + // Walk up from $context_dir to the root. + do { + $check_dirs[] = $context_dir; + + // Once we've hit '/' or 'C:\', we need to stop. dirname will keep returning the input here. + if ( dirname( $context_dir ) == $context_dir ) { + break; + } + + // Continue one level at a time. + } while ( $context_dir = dirname( $context_dir ) ); + } + + $check_dirs = array_unique( $check_dirs ); + + // Search all directories we've found for evidence of version control. + foreach ( $vcs_dirs as $vcs_dir ) { + foreach ( $check_dirs as $check_dir ) { + // phpcs:ignore + if ( $checkout = @is_dir( rtrim( $check_dir, '\\/' ) . "/$vcs_dir" ) ) { + break 2; + } + } + } + + if ( $checkout && ! apply_filters( 'automatic_updates_is_vcs_checkout', true, $context ) ) { + return array( + 'desc' => sprintf( + // translators: %1$s: Folder name. %2$s: Version control directory. %3$s: Filter name. + esc_html__( 'The folder %1$s was detected as being under version control (%2$s), but the %3$s filter is allowing updates.', 'health-check' ), + '<code>' . $check_dir . '</code>', + "<code>$vcs_dir</code>", + '<code>automatic_updates_is_vcs_checkout</code>' + ), + 'severity' => 'info', + ); + } + + if ( $checkout ) { + return array( + 'desc' => sprintf( + // translators: %1$s: Folder name. %2$s: Version control directory. + esc_html__( 'The folder %1$s was detected as being under version control (%2$s).', 'health-check' ), + '<code>' . $check_dir . '</code>', + "<code>$vcs_dir</code>" + ), + 'severity' => 'fail', + ); + } + + return array( + 'desc' => esc_html__( 'No version control systems were detected.', 'health-check' ), + 'severity' => 'pass', + ); + } + + /** + * Check if the absolute path is under Version Control. + * + * @uses TD_Health_Check_Auto_Updates::_test_is_vcs_checkout() + * + * @return array + */ + function test_vcs_ABSPATH() { + $result = $this->_test_is_vcs_checkout( ABSPATH ); + return $result; + } + + /** + * Check if we can access files without providing credentials. + * + * @uses Automatic_Upgrader_Skin + * @uses Automatic_Upgrader_Skin::request_filesystem_credentials() + * @uses esc_html__() + * + * @return array + */ + function test_check_wp_filesystem_method() { + $skin = new Automatic_Upgrader_Skin; + $success = $skin->request_filesystem_credentials( false, ABSPATH ); + + if ( ! $success ) { + $desc = esc_html__( 'Your installation of WordPress prompts for FTP credentials to perform updates.', 'health-check' ); + $desc .= ' ' . esc_html__( '(Your site is performing updates over FTP due to file ownership. Talk to your hosting company.)', 'health-check' ); + + return array( + 'desc' => $desc, + 'severity' => 'fail', + ); + } + + return array( + 'desc' => esc_html__( "Your installation of WordPress doesn't require FTP credentials to perform updates.", 'health-check' ), + 'severity' => 'pass', + ); + } + + /** + * Check if core files are writeable by the web user/group. + * + * @global $wp_filesystem + * + * @uses Automatic_Upgrader_Skin + * @uses Automatic_Upgrader_Skin::request_filesystem_credentials() + * @uses WP_Filesystem + * @uses WP_Filesystem::method + * @uses get_core_checksums() + * @uses strpos() + * @uses sprintf() + * @uses esc_html__() + * @uses array_keys() + * @uses substr() + * @uses file_exists() + * @uses is_writable() + * @uses count() + * @uses array_slice() + * @uses implode() + * + * @return array|bool + */ + function test_all_files_writable() { + global $wp_filesystem; + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + + $skin = new Automatic_Upgrader_Skin; + $success = $skin->request_filesystem_credentials( false, ABSPATH ); + + if ( ! $success ) { + return false; + } + + WP_Filesystem(); + + if ( 'direct' != $wp_filesystem->method ) { + return false; + } + + $checksums = get_core_checksums( $wp_version, 'en_US' ); + $dev = ( false !== strpos( $wp_version, '-' ) ); + // Get the last stable version's files and test against that + if ( ! $checksums && $dev ) { + $checksums = get_core_checksums( (float) $wp_version - 0.1, 'en_US' ); + } + + // There aren't always checksums for development releases, so just skip the test if we still can't find any + if ( ! $checksums && $dev ) { + return false; + } + + if ( ! $checksums ) { + $desc = sprintf( + // translators: %s: WordPress version + esc_html__( "Couldn't retrieve a list of the checksums for WordPress %s.", 'health-check' ), + $wp_version + ); + $desc .= ' ' . esc_html__( 'This could mean that connections are failing to WordPress.org.', 'health-check' ); + return array( + 'desc' => $desc, + 'severity' => 'warning', + ); + } + + $unwritable_files = array(); + foreach ( array_keys( $checksums ) as $file ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) { + continue; + } + if ( ! file_exists( ABSPATH . '/' . $file ) ) { + continue; + } + if ( ! is_writable( ABSPATH . '/' . $file ) ) { + $unwritable_files[] = $file; + } + } + + if ( $unwritable_files ) { + if ( count( $unwritable_files ) > 20 ) { + $unwritable_files = array_slice( $unwritable_files, 0, 20 ); + $unwritable_files[] = '...'; + } + return array( + 'desc' => esc_html__( 'Some files are not writable by WordPress:', 'health-check' ) . ' <ul><li>' . implode( '</li><li>', $unwritable_files ) . '</li></ul>', + 'severity' => 'fail', + ); + } else { + return array( + 'desc' => esc_html__( 'All of your WordPress files are writable.', 'health-check' ), + 'severity' => 'pass', + ); + } + } + + /** + * Check if the install is using a development branch and can use nightly packages. + * + * @uses strpos() + * @uses defined() + * @uses sprintf() + * @uses esc_html__() + * @uses apply_filters() + * + * @return array|bool + */ + function test_accepts_dev_updates() { + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + // Only for dev versions + if ( false === strpos( $wp_version, '-' ) ) { + return false; + } + + if ( defined( 'WP_AUTO_UPDATE_CORE' ) && ( 'minor' === WP_AUTO_UPDATE_CORE || false === WP_AUTO_UPDATE_CORE ) ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the constant used. */ + esc_html__( 'WordPress development updates are blocked by the %s constant.', 'health-check' ), + '<code>WP_AUTO_UPDATE_CORE</code>' + ), + 'severity' => 'fail', + ); + } + + if ( ! apply_filters( 'allow_dev_auto_core_updates', $wp_version ) ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the filter used. */ + esc_html__( 'WordPress development updates are blocked by the %s filter.', 'health-check' ), + '<code>allow_dev_auto_core_updates</code>' + ), + 'severity' => 'fail', + ); + } + } + + /** + * Check if the site supports automatic minor updates. + * + * @uses defined() + * @uses sprintf() + * @uses esc_html__() + * @uses apply_filters() + * + * @return array + */ + function test_accepts_minor_updates() { + if ( defined( 'WP_AUTO_UPDATE_CORE' ) && false === WP_AUTO_UPDATE_CORE ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the constant used. */ + esc_html__( 'WordPress security and maintenance releases are blocked by %s.', 'health-check' ), + "<code>define( 'WP_AUTO_UPDATE_CORE', false );</code>" + ), + 'severity' => 'fail', + ); + } + + if ( ! apply_filters( 'allow_minor_auto_core_updates', true ) ) { + return array( + 'desc' => sprintf( + /* translators: %s: Name of the filter used. */ + esc_html__( 'WordPress security and maintenance releases are blocked by the %s filter.', 'health-check' ), + '<code>allow_minor_auto_core_updates</code>' + ), + 'severity' => 'fail', + ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-debug-data.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-debug-data.php new file mode 100644 index 0000000..135d17c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-debug-data.php @@ -0,0 +1,843 @@ +<?php +/** + * Class for providing debug data based on a users WordPress environment. + * + * @package Health Check + */ + +/** + * Class TD_Health_Check_Debug_Data + */ +class TD_Health_Check_Debug_Data { + + /** + * Calls all core funtions to check for updates + * + * @uses wp_version_check() + * @uses wp_update_plugins() + * @uses wp_update_themes() + * + * @return void + */ + static function check_for_updates() { + + wp_version_check(); + wp_update_plugins(); + wp_update_themes(); + + } + + static function debug_data( $locale = null ) { + if ( ! empty( $locale ) ) { + // Change the language used for translations + if ( function_exists( 'switch_to_locale' ) ) { + $original_locale = get_locale(); + $switched_locale = switch_to_locale( $locale ); + } + } + global $wpdb; + + $upload_dir = wp_upload_dir(); + if ( file_exists( ABSPATH . 'wp-config.php' ) ) { + $wp_config_path = ABSPATH . 'wp-config.php'; + // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged + } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) { + $wp_config_path = dirname( ABSPATH ) . '/wp-config.php'; + } + + $core_current_version = get_bloginfo( 'version' ); + $core_updates = get_core_updates(); + $core_update_needed = ''; + + foreach ( $core_updates as $core => $update ) { + if ( 'upgrade' === $update->response ) { + // translators: %s: Latest WordPress version number. + $core_update_needed = ' ' . sprintf( __( '( Latest version: %s )', 'health-check' ), $update->version ); + } else { + $core_update_needed = ''; + } + } + + $info = array( + 'wp-core' => array( + 'label' => __( 'WordPress', 'health-check' ), + 'fields' => array( + array( + 'label' => __( 'Version', 'health-check' ), + 'value' => $core_current_version . $core_update_needed, + ), + array( + 'label' => __( 'Language', 'health-check' ), + 'value' => ( ! empty( $locale ) ? $original_locale : get_locale() ), + ), + array( + 'label' => __( 'Home URL', 'health-check' ), + 'value' => get_bloginfo( 'url' ), + 'private' => true, + ), + array( + 'label' => __( 'Site URL', 'health-check' ), + 'value' => get_bloginfo( 'wpurl' ), + 'private' => true, + ), + array( + 'label' => __( 'Permalink structure', 'health-check' ), + 'value' => get_option( 'permalink_structure' ), + ), + array( + 'label' => __( 'Is this site using HTTPS?', 'health-check' ), + 'value' => ( is_ssl() ? __( 'Yes', 'health-check' ) : __( 'No', 'health-check' ) ), + ), + array( + 'label' => __( 'Can anyone register on this site?', 'health-check' ), + 'value' => ( get_option( 'users_can_register' ) ? __( 'Yes', 'health-check' ) : __( 'No', 'health-check' ) ), + ), + array( + 'label' => __( 'Default comment status', 'health-check' ), + 'value' => get_option( 'default_comment_status' ), + ), + array( + 'label' => __( 'Is this a multisite?', 'health-check' ), + 'value' => ( is_multisite() ? __( 'Yes', 'health-check' ) : __( 'No', 'health-check' ) ), + ), + ), + ), + 'wp-install-size' => array( + 'label' => __( 'Installation size', 'health-check' ), + 'fields' => array(), + ), + 'wp-dropins' => array( + 'label' => __( 'Drop-ins', 'health-check' ), + 'description' => __( 'Drop-ins are single files that replace or enhance WordPress features in ways that are not possible for traditional plugins', 'health-check' ), + 'fields' => array(), + ), + 'wp-active-theme' => array( + 'label' => __( 'Active Theme', 'health-check' ), + 'fields' => array(), + ), + 'wp-themes' => array( + 'label' => __( 'Other themes', 'health-check' ), + 'show_count' => true, + 'fields' => array(), + ), + 'wp-mu-plugins' => array( + 'label' => __( 'Must Use Plugins', 'health-check' ), + 'show_count' => true, + 'fields' => array(), + ), + 'wp-plugins-active' => array( + 'label' => __( 'Active Plugins', 'health-check' ), + 'show_count' => true, + 'fields' => array(), + ), + 'wp-plugins-inactive' => array( + 'label' => __( 'Inactive Plugins', 'health-check' ), + 'show_count' => true, + 'fields' => array(), + ), + 'wp-media' => array( + 'label' => __( 'Media handling', 'health-check' ), + 'fields' => array(), + ), + 'wp-server' => array( + 'label' => __( 'Server', 'health-check' ), + 'description' => __( 'The options shown below relate to your server setup. If changes are required, you may need your web host\'s assistance.', 'health-check' ), + 'fields' => array(), + ), + 'wp-database' => array( + 'label' => __( 'Database', 'health-check' ), + 'fields' => array(), + ), + 'wp-constants' => array( + 'label' => __( 'WordPress Constants', 'health-check' ), + 'description' => __( 'These values represent values set in your websites code which affect WordPress in various ways that may be of importance when seeking help with your site.', 'health-check' ), + 'fields' => array( + array( + 'label' => 'ABSPATH', + 'value' => ( ! defined( 'ABSPATH' ) ? __( 'Undefined', 'health-check' ) : ABSPATH ), + ), + array( + 'label' => 'WP_HOME', + 'value' => ( ! defined( 'WP_HOME' ) ? __( 'Undefined', 'health-check' ) : WP_HOME ), + ), + array( + 'label' => 'WP_SITEURL', + 'value' => ( ! defined( 'WP_SITEURL' ) ? __( 'Undefined', 'health-check' ) : WP_SITEURL ), + ), + array( + 'label' => 'WP_DEBUG', + 'value' => ( ! defined( 'WP_DEBUG' ) ? __( 'Undefined', 'health-check' ) : ( WP_DEBUG ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'WP_MAX_MEMORY_LIMIT', + 'value' => ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ? __( 'Undefined', 'health-check' ) : WP_MAX_MEMORY_LIMIT ), + ), + array( + 'label' => 'WP_DEBUG_DISPLAY', + 'value' => ( ! defined( 'WP_DEBUG_DISPLAY' ) ? __( 'Undefined', 'health-check' ) : ( WP_DEBUG_DISPLAY ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'WP_DEBUG_LOG', + 'value' => ( ! defined( 'WP_DEBUG_LOG' ) ? __( 'Undefined', 'health-check' ) : ( WP_DEBUG_LOG ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'SCRIPT_DEBUG', + 'value' => ( ! defined( 'SCRIPT_DEBUG' ) ? __( 'Undefined', 'health-check' ) : ( SCRIPT_DEBUG ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'WP_CACHE', + 'value' => ( ! defined( 'WP_CACHE' ) ? __( 'Undefined', 'health-check' ) : ( WP_CACHE ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'CONCATENATE_SCRIPTS', + 'value' => ( ! defined( 'CONCATENATE_SCRIPTS' ) ? __( 'Undefined', 'health-check' ) : ( CONCATENATE_SCRIPTS ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'COMPRESS_SCRIPTS', + 'value' => ( ! defined( 'COMPRESS_SCRIPTS' ) ? __( 'Undefined', 'health-check' ) : ( COMPRESS_SCRIPTS ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'COMPRESS_CSS', + 'value' => ( ! defined( 'COMPRESS_CSS' ) ? __( 'Undefined', 'health-check' ) : ( COMPRESS_CSS ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + array( + 'label' => 'WP_LOCAL_DEV', + 'value' => ( ! defined( 'WP_LOCAL_DEV' ) ? __( 'Undefined', 'health-check' ) : ( WP_LOCAL_DEV ? __( 'Enabled', 'health-check' ) : __( 'Disabled', 'health-check' ) ) ), + ), + ), + ), + 'wp-filesystem' => array( + 'label' => __( 'Filesystem Permissions', 'health-check' ), + 'description' => __( 'The status of various locations WordPress needs to write files in various scenarios.', 'health-check' ), + 'fields' => array( + array( + 'label' => __( 'The main WordPress directory', 'health-check' ), + 'value' => ( wp_is_writable( ABSPATH ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ), + array( + 'label' => __( 'The wp-content directory', 'health-check' ), + 'value' => ( wp_is_writable( WP_CONTENT_DIR ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ), + array( + 'label' => __( 'The uploads directory', 'health-check' ), + 'value' => ( wp_is_writable( $upload_dir['basedir'] ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ), + array( + 'label' => __( 'The plugins directory', 'health-check' ), + 'value' => ( wp_is_writable( WP_PLUGIN_DIR ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ), + array( + 'label' => __( 'The themes directory', 'health-check' ), + 'value' => ( wp_is_writable( get_template_directory() . '/..' ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ), + ), + ), + ); + + if ( is_multisite() ) { + $network_query = new WP_Network_Query(); + $network_ids = $network_query->query( array( + 'fields' => 'ids', + 'number' => 100, + 'no_found_rows' => false, + ) ); + + $site_count = 0; + foreach ( $network_ids as $network_id ) { + $site_count += get_blog_count( $network_id ); + } + + $info['wp-core']['fields'][] = array( + 'label' => __( 'User Count', 'health-check' ), + 'value' => get_user_count(), + ); + $info['wp-core']['fields'][] = array( + 'label' => __( 'Site Count', 'health-check' ), + 'value' => $site_count, + ); + $info['wp-core']['fields'][] = array( + 'label' => __( 'Network Count', 'health-check' ), + 'value' => $network_query->found_networks, + ); + } else { + $user_count = count_users(); + + $info['wp-core']['fields'][] = array( + 'label' => __( 'User Count', 'health-check' ), + 'value' => $user_count['total_users'], + ); + } + + // WordPress features requiring processing. + $wp_dotorg = wp_remote_get( 'https://wordpress.org', array( + 'timeout' => 10, + ) ); + if ( ! is_wp_error( $wp_dotorg ) ) { + $info['wp-core']['fields'][] = array( + 'label' => __( 'Communication with WordPress.org', 'health-check' ), + 'value' => sprintf( + __( 'WordPress.org is reachable', 'health-check' ) + ), + ); + } else { + $info['wp-core']['fields'][] = array( + 'label' => __( 'Communication with WordPress.org', 'health-check' ), + 'value' => sprintf( + // translators: %1$s: The IP address WordPress.org resolves to. %2$s: The error returned by the lookup. + __( 'Unable to reach WordPress.org at %1$s: %2$s', 'health-check' ), + gethostbyname( 'wordpress.org' ), + $wp_dotorg->get_error_message() + ), + ); + } + + $loopback = TD_Health_Check_Loopback::can_perform_loopback(); + $info['wp-core']['fields'][] = array( + 'label' => __( 'Create loopback requests', 'health-check' ), + 'value' => $loopback->message, + ); + + // Get drop-ins. + $dropins = get_dropins(); + $dropin_description = _get_dropins(); + foreach ( $dropins as $dropin_key => $dropin ) { + $info['wp-dropins']['fields'][] = array( + 'label' => $dropin_key, + 'value' => $dropin_description[ $dropin_key ][0], + ); + } + + // Populate the media fields. + $info['wp-media']['fields'][] = array( + 'label' => __( 'Active editor', 'health-check' ), + 'value' => _wp_image_editor_choose(), + ); + + // Get ImageMagic information, if available. + if ( class_exists( 'Imagick' ) ) { + // Save the Imagick instance for later use. + $imagick = new Imagick(); + $imagick_version = $imagick->getVersion(); + } else { + $imagick_version = 'Imagick not available'; + } + $info['wp-media']['fields'][] = array( + 'label' => __( 'Imagick Module Version', 'health-check' ), + 'value' => ( is_array( $imagick_version ) ? $imagick_version['versionNumber'] : $imagick_version ), + ); + $info['wp-media']['fields'][] = array( + 'label' => __( 'ImageMagick Version', 'health-check' ), + 'value' => ( is_array( $imagick_version ) ? $imagick_version['versionString'] : $imagick_version ), + ); + + // If Imagick is used as our editor, provide some more information about its limitations. + if ( 'WP_Image_Editor_Imagick' === _wp_image_editor_choose() && isset( $imagick ) && $imagick instanceof Imagick ) { + $limits = array( + 'area' => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : 'Not Available' ), + 'disk' => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : 'Not Available' ), + 'file' => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : 'Not Available' ), + 'map' => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : 'Not Available' ), + 'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : 'Not Available' ), + 'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : 'Not Available' ), + ); + + $info['wp-media']['fields'][] = array( + 'label' => __( 'Imagick Resource Limits', 'health-check' ), + 'value' => $limits, + ); + } + + // Get GD information, if available. + if ( function_exists( 'gd_info' ) ) { + $gd = gd_info(); + } else { + $gd = false; + } + $info['wp-media']['fields'][] = array( + 'label' => __( 'GD Version', 'health-check' ), + 'value' => ( is_array( $gd ) ? $gd['GD Version'] : __( 'GD not available', 'health-check' ) ), + ); + + // Get Ghostscript information, if available. + if ( function_exists( 'exec' ) ) { + $gs = exec( 'gs --version' ); + $gs = ( ! empty( $gs ) ? $gs : __( 'Not available', 'health-check' ) ); + } else { + $gs = __( 'Unable to determine if Ghostscript is installed', 'health-check' ); + } + $info['wp-media']['fields'][] = array( + 'label' => __( 'Ghostscript Version', 'health-check' ), + 'value' => $gs, + ); + + // Populate the server debug fields. + $info['wp-server']['fields'][] = array( + 'label' => __( 'Server architecture', 'health-check' ), + 'value' => ( ! function_exists( 'php_uname' ) ? __( 'Unable to determine server architecture', 'health-check' ) : sprintf( '%s %s %s', php_uname( 's' ), php_uname( 'r' ), php_uname( 'm' ) ) ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP Version', 'health-check' ), + 'value' => ( ! function_exists( 'phpversion' ) ? __( 'Unable to determine PHP version', 'health-check' ) : sprintf( + '%s %s', + phpversion(), + ( 64 === PHP_INT_SIZE * 8 ? __( '(Supports 64bit values)', 'health-check' ) : '' ) + ) + ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP SAPI', 'health-check' ), + 'value' => ( ! function_exists( 'php_sapi_name' ) ? __( 'Unable to determine PHP SAPI', 'health-check' ) : php_sapi_name() ), + ); + + if ( ! function_exists( 'ini_get' ) ) { + $info['wp-server']['fields'][] = array( + 'label' => __( 'Server settings', 'health-check' ), + 'value' => __( 'Unable to determine some settings as the ini_get() function has been disabled', 'health-check' ), + ); + } else { + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP max input variables', 'health-check' ), + 'value' => ini_get( 'max_input_vars' ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP time limit', 'health-check' ), + 'value' => ini_get( 'max_execution_time' ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP memory limit', 'health-check' ), + 'value' => ini_get( 'memory_limit' ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'Max input time', 'health-check' ), + 'value' => ini_get( 'max_input_time' ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'Upload max filesize', 'health-check' ), + 'value' => ini_get( 'upload_max_filesize' ), + ); + $info['wp-server']['fields'][] = array( + 'label' => __( 'PHP post max size', 'health-check' ), + 'value' => ini_get( 'post_max_size' ), + ); + } + + if ( function_exists( 'curl_version' ) ) { + $curl = curl_version(); + $info['wp-server']['fields'][] = array( + 'label' => __( 'cURL Version', 'health-check' ), + 'value' => sprintf( '%s %s', $curl['version'], $curl['ssl_version'] ), + ); + } else { + $info['wp-server']['fields'][] = array( + 'label' => __( 'cURL Version', 'health-check' ), + 'value' => __( 'Your server does not support cURL', 'health-check' ), + ); + } + + $info['wp-server']['fields'][] = array( + 'label' => __( 'SUHOSIN installed', 'health-check' ), + 'value' => ( ( extension_loaded( 'suhosin' ) || ( defined( 'SUHOSIN_PATCH' ) && constant( 'SUHOSIN_PATCH' ) ) ) ? __( 'Yes', 'health-check' ) : __( 'No', 'health-check' ) ), + ); + + $info['wp-server']['fields'][] = array( + 'label' => __( 'Is the Imagick library available', 'health-check' ), + 'value' => ( extension_loaded( 'imagick' ) ? __( 'Yes', 'health-check' ) : __( 'No', 'health-check' ) ), + ); + + // Check if a .htaccess file exists. + if ( is_file( ABSPATH . '/.htaccess' ) ) { + // If the file exists, grab the content of it. + $htaccess_content = file_get_contents( ABSPATH . '/.htaccess' ); + + // Filter away the core WordPress rules. + $filtered_htaccess_content = trim( preg_replace( '/\# BEGIN WordPress[\s\S]+?# END WordPress/si', '', $htaccess_content ) ); + + $info['wp-server']['fields'][] = array( + 'label' => __( 'htaccess rules', 'health-check' ), + 'value' => ( ! empty( $filtered_htaccess_content ) ? __( 'Custom rules have been added to your htaccess file', 'health-check' ) : __( 'Your htaccess file only contains core WordPress features', 'health-check' ) ), + ); + } + + // Populate the database debug fields. + if ( is_resource( $wpdb->dbh ) ) { + // Old mysql extension. + $extension = 'mysql'; + } elseif ( is_object( $wpdb->dbh ) ) { + // mysqli or PDO. + $extension = get_class( $wpdb->dbh ); + } else { + // Unknown sql extension. + $extension = null; + } + + if ( method_exists( $wpdb, 'db_version' ) ) { + if ( $wpdb->use_mysqli ) { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_server_info + $server = mysqli_get_server_info( $wpdb->dbh ); + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_server_info + $server = mysql_get_server_info( $wpdb->dbh ); // phpcs:ignore + } + } else { + $server = null; + } + + if ( isset( $wpdb->use_mysqli ) && $wpdb->use_mysqli ) { + $client_version = $wpdb->dbh->client_info; + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + if ( preg_match( '|[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}|', mysql_get_client_info(), $matches ) ) { // phpcs:ignore + $client_version = $matches[0]; + } else { + $client_version = null; + } + } + + $info['wp-database']['fields'][] = array( + 'label' => __( 'Extension', 'health-check' ), + 'value' => $extension, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Server version', 'health-check' ), + 'value' => $server, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Client version', 'health-check' ), + 'value' => $client_version, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Database user', 'health-check' ), + 'value' => $wpdb->dbuser, + 'private' => true, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Database host', 'health-check' ), + 'value' => $wpdb->dbhost, + 'private' => true, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Database name', 'health-check' ), + 'value' => $wpdb->dbname, + 'private' => true, + ); + $info['wp-database']['fields'][] = array( + 'label' => __( 'Database prefix', 'health-check' ), + 'value' => $wpdb->prefix, + ); + + // List must use plugins if there are any. + $mu_plugins = get_mu_plugins(); + + foreach ( $mu_plugins as $plugin_path => $plugin ) { + $plugin_version = $plugin['Version']; + $plugin_author = $plugin['Author']; + + $plugin_version_string = __( 'No version or author information available', 'health-check' ); + + if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: %1$s: Plugin version number. %2$s: Plugin author name. + $plugin_version_string = sprintf( __( 'Version %1$s by %2$s', 'health-check' ), $plugin_version, $plugin_author ); + } + if ( empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: %s: Plugin author name. + $plugin_version_string = sprintf( __( 'By %s', 'health-check' ), $plugin_author ); + } + if ( ! empty( $plugin_version ) && empty( $plugin_author ) ) { + // translators: %s: Plugin version number. + $plugin_version_string = sprintf( __( 'Version %s', 'health-check' ), $plugin_version ); + } + + $info['wp-mu-plugins']['fields'][] = array( + 'label' => $plugin['Name'], + 'value' => $plugin_version_string, + ); + } + + // List all available plugins. + $plugins = get_plugins(); + $plugin_updates = get_plugin_updates(); + + foreach ( $plugins as $plugin_path => $plugin ) { + $plugin_part = ( is_plugin_active( $plugin_path ) ) ? 'wp-plugins-active' : 'wp-plugins-inactive'; + + $plugin_version = $plugin['Version']; + $plugin_author = $plugin['Author']; + + $plugin_version_string = __( 'No version or author information available', 'health-check' ); + + if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: %1$s: Plugin version number. %2$s: Plugin author name. + $plugin_version_string = sprintf( __( 'Version %1$s by %2$s', 'health-check' ), $plugin_version, $plugin_author ); + } + if ( empty( $plugin_version ) && ! empty( $plugin_author ) ) { + // translators: %s: Plugin author name. + $plugin_version_string = sprintf( __( 'By %s', 'health-check' ), $plugin_author ); + } + if ( ! empty( $plugin_version ) && empty( $plugin_author ) ) { + // translators: %s: Plugin version number. + $plugin_version_string = sprintf( __( 'Version %s', 'health-check' ), $plugin_version ); + } + + if ( array_key_exists( $plugin_path, $plugin_updates ) ) { + // translators: %s: Latest plugin version number. + $plugin_update_needed = ' ' . sprintf( __( '( Latest version: %s )', 'health-check' ), $plugin_updates[ $plugin_path ]->update->new_version ); + } else { + $plugin_update_needed = ''; + } + + $info[ $plugin_part ]['fields'][] = array( + 'label' => $plugin['Name'], + 'value' => $plugin_version_string . $plugin_update_needed, + ); + } + + // Populate the section for the currently active theme. + global $_wp_theme_features; + $theme_features = array(); + if ( ! empty( $_wp_theme_features ) ) { + foreach ( $_wp_theme_features as $feature => $options ) { + $theme_features[] = $feature; + } + } + + $active_theme = wp_get_theme(); + $theme_updates = get_theme_updates(); + + if ( array_key_exists( $active_theme->stylesheet, $theme_updates ) ) { + // translators: %s: Latest theme version number. + $theme_update_needed_active = ' ' . sprintf( __( '( Latest version: %s )', 'health-check' ), $theme_updates[ $active_theme->stylesheet ]->update['new_version'] ); + } else { + $theme_update_needed_active = ''; + } + + $info['wp-active-theme']['fields'] = array( + array( + 'label' => __( 'Name', 'health-check' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + 'value' => $active_theme->Name, + ), + array( + 'label' => __( 'Version', 'health-check' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + 'value' => $active_theme->Version . $theme_update_needed_active, + ), + array( + 'label' => __( 'Author', 'health-check' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + 'value' => wp_kses( $active_theme->Author, array() ), + ), + array( + 'label' => __( 'Author website', 'health-check' ), + 'value' => ( $active_theme->offsetGet( 'Author URI' ) ? $active_theme->offsetGet( 'Author URI' ) : __( 'Undefined', 'health-check' ) ), + ), + array( + 'label' => __( 'Parent theme', 'health-check' ), + 'value' => ( $active_theme->parent_theme ? $active_theme->parent_theme : __( 'Not a child theme', 'health-check' ) ), + ), + array( + 'label' => __( 'Supported theme features', 'health-check' ), + 'value' => implode( ', ', $theme_features ), + ), + ); + + // Populate a list of all themes available in the install. + $all_themes = wp_get_themes(); + + foreach ( $all_themes as $theme_slug => $theme ) { + // Ignore the currently active theme from the list of all themes. + if ( $active_theme->stylesheet == $theme_slug ) { + continue; + } + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + $theme_version = $theme->Version; + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + $theme_author = $theme->Author; + + $theme_version_string = __( 'No version or author information available', 'health-check' ); + + if ( ! empty( $theme_version ) && ! empty( $theme_author ) ) { + // translators: %1$s: Theme version number. %2$s: Theme author name. + $theme_version_string = sprintf( __( 'Version %1$s by %2$s', 'health-check' ), $theme_version, wp_kses( $theme_author, array() ) ); + } + if ( empty( $theme_version ) && ! empty( $theme_author ) ) { + // translators: %s: Theme author name. + $theme_version_string = sprintf( __( 'By %s', 'health-check' ), wp_kses( $theme_author, array() ) ); + } + if ( ! empty( $theme_version ) && empty( $theme_author ) ) { + // translators: %s: Theme version number. + $theme_version_string = sprintf( __( 'Version %s', 'health-check' ), $theme_version ); + } + + if ( array_key_exists( $theme_slug, $theme_updates ) ) { + // translators: %s: Latest theme version number. + $theme_update_needed = ' ' . sprintf( __( '( Latest version: %s )', 'health-check' ), $theme_updates[ $theme_slug ]->update['new_version'] ); + } else { + $theme_update_needed = ''; + } + + $info['wp-themes']['fields'][] = array( + 'label' => sprintf( + // translators: %1$s: Theme name. %2$s: Theme slug. + __( '%1$s (%2$s)', 'health-check' ), + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar + $theme->Name, + $theme_slug + ), + 'value' => $theme_version_string . $theme_update_needed, + ); + } + + // Add more filesystem checks + if ( defined( 'WPMU_PLUGIN_DIR' ) && is_dir( WPMU_PLUGIN_DIR ) ) { + $info['wp-filesystem']['fields'][] = array( + 'label' => __( 'The Must Use Plugins directory', 'health-check' ), + 'value' => ( wp_is_writable( WPMU_PLUGIN_DIR ) ? __( 'Writable', 'health-check' ) : __( 'Not writable', 'health-check' ) ), + ); + } + + $info['wp-install-size']['fields'] = TD_Health_Check_Debug_Data::get_installation_size(); + + /** + * Add or modify new debug sections. + * + * Plugin or themes may wish to introduce their own debug information without creating additional admin pages for this + * kind of information as it is rarely needed, they can then utilize this filter to introduce their own sections. + * + * This filter intentionally does not include the fields introduced by core as those should always be un-modified + * and reliable for support related scenarios, take note that the core fields will take priority if a filtered value + * is trying to use the same array keys. + * + * Array keys added by core are all prefixed with `wp-`, plugins and themes are encouraged to use their own slug as + * a prefix, both for consistency as well as avoiding key collisions. + * + * @since 4.9.0 + * + * @param array $args { + * The debug information to be added to the core information page. + * + * @type string $label The title for this section of the debug output. + * @type string $description Optional. A description for your information section which may contain basic HTML + * markup: `em`, `strong` and `a` for linking to documentation or putting emphasis. + * @type boolean $show_count Optional. If set to `true` the amount of fields will be included in the title for + * this section. + * @type boolean $private Optional. If set to `true` the section and all associated fields will be excluded + * from the copy-paste text area. + * @type array $fields { + * An associative array containing the data to be displayed. + * + * @type string $label The label for this piece of information. + * @type string $value The output that is of interest for this field. + * @type boolean $private Optional. If set to `true` the field will not be included in the copy-paste text area + * on top of the page, allowing you to show, for example, API keys here. + * } + * } + */ + $external_info = apply_filters( 'debug_information', array() ); + + // Merge the core and external debug fields. + $info = array_replace_recursive( $info, array_replace_recursive( $external_info, $info ) ); + + if ( ! empty( $locale ) ) { + // Change the language used for translations + if ( function_exists( 'restore_previous_locale' ) && $switched_locale ) { + restore_previous_locale(); + } + } + + return $info; + } + + public static function get_installation_size() { + $uploads_dir = wp_upload_dir(); + + $sizes = array( + 'wp' => array( + 'path' => ABSPATH, + 'size' => 0, + ), + 'themes' => array( + 'path' => trailingslashit( get_theme_root() ), + 'size' => 0, + ), + 'plugins' => array( + 'path' => WP_PLUGIN_DIR, + 'size' => 0, + ), + 'uploads' => array( + 'path' => $uploads_dir['basedir'], + 'size' => 0, + ), + ); + + $inaccurate = false; + + foreach ( $sizes as $size => $attributes ) { + try { + $sizes[ $size ]['size'] = TD_Health_Check_Debug_Data::get_directory_size( $attributes['path'] ); + } catch ( Exception $e ) { + $inaccurate = true; + } + } + + $size_db = TD_Health_Check_Debug_Data::get_database_size(); + + $size_total = $sizes['wp']['size'] + $size_db; + + $result = array( + array( + 'label' => __( 'Uploads Directory', 'health-check' ), + 'value' => size_format( $sizes['uploads']['size'], 2 ), + ), + array( + 'label' => __( 'Themes Directory', 'health-check' ), + 'value' => size_format( $sizes['themes']['size'], 2 ), + ), + array( + 'label' => __( 'Plugins Directory', 'health-check' ), + 'value' => size_format( $sizes['plugins']['size'], 2 ), + ), + array( + 'label' => __( 'Database size', 'health-check' ), + 'value' => size_format( $size_db, 2 ), + ), + array( + 'label' => __( 'Whole WordPress Directory', 'health-check' ), + 'value' => size_format( $sizes['wp']['size'], 2 ), + ), + array( + 'label' => __( 'Total installation size', 'health-check' ), + 'value' => sprintf( + '%s%s', + size_format( $size_total, 2 ), + ( false === $inaccurate ? '' : __( '- Some errors, likely caused by invalid permissions, were encountered when determining the size of your installation. This means the values represented may be inaccurate.', 'health-check' ) ) + ), + ), + ); + + return $result; + } + + public static function get_directory_size( $path ) { + $size = 0; + + foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) ) as $file ) { + $size += $file->getSize(); + } + + return $size; + } + + public static function get_database_size() { + global $wpdb; + $size = 0; + $rows = $wpdb->get_results( 'SHOW TABLE STATUS', ARRAY_A ); + + if ( $wpdb->num_rows > 0 ) { + foreach ( $rows as $row ) { + $size += $row['Data_length'] + $row['Index_length']; + } + } + + return $size; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-files-integrity.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-files-integrity.php new file mode 100644 index 0000000..3ce9640 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-files-integrity.php @@ -0,0 +1,183 @@ +<?php + +/** + * Check all core files against the checksums provided by WordPress API. + * + * @package Health Check + */ + +/** + * Class Files_Integrity + */ +class TD_Health_Check_Files_Integrity { + + /** + * Gathers checksums from WordPress API and cross checks the core files in the current installation. + * + * @return void + */ + static function run_files_integrity_check() { + + $checksums = TD_Health_Check_Files_Integrity::call_checksum_api(); + + $files = TD_Health_Check_Files_Integrity::parse_checksum_results( $checksums ); + + TD_Health_Check_Files_Integrity::create_the_response( $files ); + + } + + /** + * Calls the WordPress API on the checksums endpoint + * + * @uses get_bloginfo() + * @uses get_locale() + * @uses ABSPATH + * @uses wp_remote_get() + * @uses get_bloginfo() + * @uses strpos() + * @uses unset() + * + * @return array + */ + static function call_checksum_api() { + // Setup variables. + $wpversion = get_bloginfo( 'version' ); + $wplocale = get_locale(); + + // Setup API Call. + $checksumapi = wp_remote_get( 'https://api.wordpress.org/core/checksums/1.0/?version=' . $wpversion . '&locale=' . $wplocale, array( 'timeout' => 10000 ) ); + + // Encode the API response body. + $checksumapibody = json_decode( wp_remote_retrieve_body( $checksumapi ), true ); + + // Remove the wp-content/ files from checking + foreach ( $checksumapibody['checksums'] as $file => $checksum ) { + if ( false !== strpos( $file, 'wp-content/' ) ) { + unset( $checksumapibody['checksums'][ $file ] ); + } + } + + return $checksumapibody; + } + + /** + * Parses the results from the WordPress API call + * + * @uses file_exists() + * @uses md5_file() + * @uses ABSPATH + * + * @param array $checksums + * + * @return array + */ + static function parse_checksum_results( $checksums ) { + $filepath = ABSPATH; + $files = array(); + // Parse the results. + foreach ( $checksums['checksums'] as $file => $checksum ) { + // Check the files. + if ( file_exists( $filepath . $file ) && md5_file( $filepath . $file ) !== $checksum ) { + $reason = esc_html__( 'Content changed', 'health-check' ) . ' <a href="#health-check-diff" data-file="' . $file . '">' . esc_html__( '(View Diff)', 'health-check' ) . '</a>'; + array_push( $files, array( $file, $reason ) ); + } elseif ( ! file_exists( $filepath . $file ) ) { + $reason = esc_html__( 'File not found', 'health-check' ); + array_push( $files, array( $file, $reason ) ); + } + } + return $files; + } + + /** + * Generates the response + * + * @uses wp_send_json_success() + * @uses wp_die() + * @uses ABSPATH + * + * @param null|array $files + * + * @return void + */ + static function create_the_response( $files ) { + $filepath = ABSPATH; + $output = ''; + + if ( empty( $files ) ) { + $output .= '<div class="notice notice-success inline"><p>'; + $output .= esc_html__( 'All files passed the check. Everything seems to be ok!', 'health-check' ); + $output .= '</p></div>'; + } else { + $output .= '<div class="notice notice-error inline"><p>'; + $output .= esc_html__( 'It appears as if some files may have been modified.', 'health-check' ); + $output .= '<br>' . esc_html__( 'One possible reason for this may be that your installation contains translated versions. An easy way to clear this is to reinstall WordPress. Don\'t worry. This will only affect WordPress\' own files, not your themes, plugins or uploaded media.', 'health-check' ); + $output .= '</p></div><table class="widefat striped file-integrity-table"><thead><tr><th>'; + $output .= esc_html__( 'Status', 'health-check' ); + $output .= '</th><th>'; + $output .= esc_html__( 'File', 'health-check' ); + $output .= '</th><th>'; + $output .= esc_html__( 'Reason', 'health-check' ); + $output .= '</th></tr></thead><tfoot><tr><td>'; + $output .= esc_html__( 'Status', 'health-check' ); + $output .= '</td><td>'; + $output .= esc_html__( 'File', 'health-check' ); + $output .= '</td><td>'; + $output .= esc_html__( 'Reason', 'health-check' ); + $output .= '</td></tr></tfoot><tbody>'; + foreach ( $files as $tampered ) { + $output .= '<tr>'; + $output .= '<td><span class="error"></span></td>'; + $output .= '<td>' . $filepath . $tampered[0] . '</td>'; + $output .= '<td>' . $tampered[1] . '</td>'; + $output .= '</tr>'; + } + $output .= '</tbody>'; + $output .= '</table>'; + } + + $response = array( + 'message' => $output, + ); + + wp_send_json_success( $response ); + + wp_die(); + } + + /** + * Add the Files integrity checker to the tools tab. + * + * @param array $tabs + * + * return array + */ + static function tools_tab( $tabs ) { + ob_start(); + ?> + + <div> + <p> + <?php _e( 'The File Integrity checks all the core files with the <code>checksums</code> provided by the WordPress API to see if they are intact. If there are changes you will be able to make a Diff between the files hosted on WordPress.org and your installation to see what has been changed.', 'health-check' ); ?> + </p> + <form action="#" id="health-check-file-integrity" method="POST"> + <p> + <input type="submit" class="button button-primary" value="<?php esc_html_e( 'Check the Files Integrity', 'health-check' ); ?>"> + </p> + </form> + + <div id="tools-file-integrity-response-holder"> + <span class="spinner"></span> + </div> + </div> + + <?php + $tab_content = ob_get_clean(); + + $tabs[] = array( + 'label' => esc_html__( 'File Integrity', 'health-check' ), + 'content' => $tab_content, + ); + + return $tabs; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-loopback.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-loopback.php new file mode 100644 index 0000000..510b8b7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-loopback.php @@ -0,0 +1,323 @@ +<?php +/** + * Tests to determine if the WordPress loopbacks are able to run unhindered. + * + * @package Health Check + */ + +/** + * Class TD_Health_Check_Loopback + */ +class TD_Health_Check_Loopback { + /** + * Run a loopback test on our site. + * + * @uses wp_unslash() + * @uses base64_encode() + * @uses admin_url() + * @uses add_query_arg() + * @uses is_array() + * @uses implode() + * @uses wp_remote_get() + * @uses compact() + * @uses is_wp_error() + * @uses wp_remote_retrieve_response_code() + * @uses sprintf() + * + * @param null|string $disable_plugin_hash Optional. A hash to send with our request to disable any plugins. + * @param null|string|array $allowed_plugins Optional. A string or array of approved plugin slugs that can run even when we globally ignore plugins. + * + * @return object + */ + static function can_perform_loopback( $disable_plugin_hash = null, $allowed_plugins = null ) { + $cookies = wp_unslash( $_COOKIE ); + $timeout = 10; + $headers = array( + 'Cache-Control' => 'no-cache', + ); + + // Include Basic auth in loopback requests. + if ( isset( $_SERVER['PHP_AUTH_USER'] ) && isset( $_SERVER['PHP_AUTH_PW'] ) ) { + $headers['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) ); + } + + $url = admin_url(); + + if ( ! empty( $disable_plugin_hash ) ) { + $url = add_query_arg( array( + 'health-check-disable-plugin-hash' => $disable_plugin_hash, + ), $url ); + } + if ( ! empty( $allowed_plugins ) ) { + if ( ! is_array( $allowed_plugins ) ) { + $allowed_plugins = (array) $allowed_plugins; + } + + $url = add_query_arg( + array( + 'health-check-allowed-plugins' => implode( ',', $allowed_plugins ), + ), + $url + ); + } + + $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); + + if ( is_wp_error( $r ) ) { + return (object) array( + 'status' => 'error', + 'message' => sprintf( + '%s<br>%s', + esc_html__( 'The loopback request to your site failed, this may prevent WP_Cron from working, along with theme and plugin editors.', 'health-check' ), + sprintf( + /* translators: %1$d: The HTTP response code. %2$s: The error message returned. */ + esc_html__( 'Error encountered: (%1$d) %2$s', 'health-check' ), + wp_remote_retrieve_response_code( $r ), + $r->get_error_message() + ) + ), + ); + } + + if ( 200 !== wp_remote_retrieve_response_code( $r ) ) { + return (object) array( + 'status' => 'warning', + 'message' => sprintf( + /* translators: %d: The HTTP response code returned. */ + esc_html__( 'The loopback request returned an unexpected status code, %d, this may affect tools such as WP_Cron, or theme and plugin editors.', 'health-check' ), + wp_remote_retrieve_response_code( $r ) + ), + ); + } + + return (object) array( + 'status' => 'good', + 'message' => __( 'The loopback request to your site completed successfully.', 'health-check' ), + ); + } + + /** + * Perform the loopback check, but ensure no plugins are enabled when we do so. + * + * @uses ob_start() + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses TD_Health_Check_Troubleshoot::setup_must_use_plugin() + * @uses TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() + * @uses ob_get_clean() + * @uses wp_send_json_error() + * @uses md5() + * @uses rand() + * @uses update_option() + * @uses TD_Health_Check_Loopback::can_perform_loopback() + * @uses sprintf() + * @uses esc_attr() + * @uses esc_html__() + * @uses esc_html() + * @uses wp_send_json_success() + * + * @return void + */ + static function loopback_no_plugins() { + ob_start(); + + $needs_creds = false; + + if ( ! TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + $needs_creds = true; + } else { + $check_output = TD_Health_Check_Troubleshoot::setup_must_use_plugin(); + if ( false === $check_output ) { + $needs_creds = true; + } + } + } else { + if ( ! TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() ) { + $needs_creds = true; + } + } + + $result = ob_get_clean(); + + if ( $needs_creds ) { + wp_send_json_error( $result ); + die(); // phpcs:ignore + } + + $loopback_hash = md5( rand() ); + update_option( 'health-check-disable-plugin-hash', $loopback_hash ); + update_option( 'health-check-default-theme', 'yes' ); + + $no_plugin_test = TD_Health_Check_Loopback::can_perform_loopback( $loopback_hash ); + + $message = sprintf( + '<br><span class="%s"></span> %s: %s', + esc_attr( $no_plugin_test->status ), + esc_html__( 'Result from testing without any plugins active and a default theme', 'health-check' ), + $no_plugin_test->message + ); + + if ( 'error' !== $no_plugin_test->status ) { + $plugins = wp_get_active_and_valid_plugins(); + $theme = wp_get_theme(); + + $message .= '<table id="loopback-individual-plugins-list">'; + + foreach ( $plugins as $single_plugin ) { + $plugin = get_plugin_data( $single_plugin ); + + $message .= sprintf( + '<tr data-test-plugin="%s" class="not-tested"><td>%s</td><td class="individual-loopback-test-status">%s</td></tr>', + esc_attr( plugin_basename( $single_plugin ) ), + esc_html( $plugin['Name'] ), + esc_html__( 'Waiting...', 'health-check' ) + ); + } + + $message .= sprintf( + '<tr id="test-single-no-theme"><td>%s</td><td class="individual-loopback-test-status">%s</td></tr>', + sprintf( + // translators: %s: The active theme name. + esc_html__( 'Active theme: %s', 'health-check' ), + $theme->name + ), + esc_html__( 'Waiting...', 'health-check' ) + ); + + $message .= '</table>'; + + $message .= '<br><button type="button" id="loopback-individual-plugins" class="button button-primary">Test individual plugins</button>'; + } + + $response = array( + 'message' => $message, + ); + + delete_option( 'health-check-default-theme' ); + + wp_send_json_success( $response ); + + die(); // phpcs:ignore + } + + /** + * Test individual plugins for loopback compatibility issues. + * + * This function will perform the loopback check, without any plugins, then conditionally enables one plugin at a time. + * + * @uses ob_start() + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses TD_Health_Check_Troubleshoot::setup_must_use_plugin() + * @uses ob_get_clean() + * @uses wp_send_json_error() + * @uses delete_option() + * @uses get_option() + * @uses md5() + * @uses rand() + * @uses update_option() + * @uses explode() + * @uses TD_Health_Check_Loopback::can_perform_loopback() + * @uses sprintf() + * @uses esc_attr() + * @uses esc_html__() + * @uses esc_html() + * @uses wp_send_json_success() + * + * @return void + */ + static function loopback_test_individual_plugins() { + ob_start(); + + $needs_creds = false; + + if ( ! TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + $needs_creds = true; + } else { + TD_Health_Check_Troubleshoot::setup_must_use_plugin(); + } + } + + $result = ob_get_clean(); + + if ( $needs_creds ) { + wp_send_json_error( $result ); + die(); // phpcs:ignore + } + + delete_option( 'health-check-disable-plugin-hash' ); + + $loopback_hash = md5( rand() ); + update_option( 'health-check-disable-plugin-hash', $loopback_hash ); + + $plugin_slug = explode( '/', $_POST['plugin'] ); + $plugin_slug = $plugin_slug[0]; + + $single_test = TD_Health_Check_Loopback::can_perform_loopback( $loopback_hash, $plugin_slug ); + + $message = sprintf( + '<span class="%s"></span> %s', + esc_attr( $single_test->status ), + $single_test->message + ); + + $response = array( + 'message' => $message, + ); + + wp_send_json_success( $response ); + + die(); // phpcs:ignore + } + + static function loopback_test_default_theme() { + ob_start(); + + $needs_creds = false; + + if ( ! TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + $needs_creds = true; + } else { + TD_Health_Check_Troubleshoot::setup_must_use_plugin(); + } + } + + $result = ob_get_clean(); + + if ( $needs_creds ) { + wp_send_json_error( $result ); + die(); // phpcs:ignore + } + + delete_option( 'health-check-disable-plugin-hash' ); + + $loopback_hash = md5( rand() ); + update_option( 'health-check-disable-plugin-hash', $loopback_hash ); + + $message = ''; + + // Test without a theme active. + update_option( 'health-check-default-theme', 'yes' ); + + $theme_test = TD_Health_Check_Loopback::can_perform_loopback( $loopback_hash, '' ); + + $message .= sprintf( + '<span class="%s"></span> %s', + esc_attr( $theme_test->status ), + $theme_test->message + ); + + delete_option( 'health-check-default-theme' ); + + $response = array( + 'message' => $message, + ); + + wp_send_json_success( $response ); + + die(); // phpcs:ignore + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-mail-check.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-mail-check.php new file mode 100644 index 0000000..29f8b7d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-mail-check.php @@ -0,0 +1,122 @@ +<?php + +/** + * Checks if wp_mail() works. + * + * @package Health Check + */ + +/** + * Class Mail Check + */ +class TD_Health_Check_Mail_Check { + + /** + * Checks if wp_mail() works. + * + * @uses sanitize_email() + * @uses wp_mail() + * @uses wp_send_json_success() + * @uses wp_die() + * + * @return void + */ + static function run_mail_check() { + $output = ''; + $sendmail = false; + $email = sanitize_email( $_POST['email'] ); + $email_message = sanitize_text_field( $_POST['email_message'] ); + $wp_address = get_bloginfo( 'url' ); + $wp_name = get_bloginfo( 'name' ); + $date = date( 'F j, Y' ); + $time = date( 'g:i a' ); + + // translators: %s: website url. + $email_subject = sprintf( esc_html__( 'Health Check – Test Message from %s', 'health-check' ), $wp_address ); + + $email_body = sprintf( + // translators: %1$s: website name. %2$s: website url. %3$s: The date the message was sent. %4$s: The time the message was sent. %5$s: Additional custom message from the administrator. + __( 'Hi! This test message was sent by the Health Check plugin from %1$s (%2$s) on %3$s at %4$s. Since you’re reading this, it obviously works. Additional message from admin: %5$s', 'health-check' ), + $wp_name, + $wp_address, + $date, + $time, + $email_message + ); + + $sendmail = wp_mail( $email, $email_subject, $email_body ); + + if ( ! empty( $sendmail ) ) { + $output .= '<div class="notice notice-success inline"><p>'; + $output .= __( 'We have just sent an e-mail using <code>wp_mail()</code> and it seems to work. Please check your inbox and spam folder to see if you received it.', 'health-check' ); + $output .= '</p></div>'; + } else { + $output .= '<div class="notice notice-error inline"><p>'; + $output .= esc_html__( 'It seems there was a problem sending the e-mail.', 'health-check' ); + $output .= '</p></div>'; + } + + $response = array( + 'message' => $output, + ); + + wp_send_json_success( $response ); + + wp_die(); + + } + + /** + * Add the Mail Checker to the tools tab. + * + * @param array $tabs + * + * return array + */ + public static function tools_tab( $tabs ) { + ob_start(); + ?> + + <div> + <p> + <?php _e( 'The Mail Check will invoke the <code>wp_mail()</code> function and check if it succeeds. We will use the E-mail address you have set up, but you can change it below if you like.', 'health-check' ); ?> + </p> + <form action="#" id="health-check-mail-check" method="POST"> + <table class="widefat tools-email-table"> + <tr> + <td> + <p> + <?php + $current_user = wp_get_current_user(); + ?> + <label for="email"><?php _e( 'E-mail', 'health-check' ); ?></label> + <input type="text" name="email" id="email" value="<?php echo $current_user->user_email; ?>"> + </p> + </td> + <td> + <p> + <label for="email_message"><?php _e( 'Additional message', 'health-check' ); ?></label> + <input type="text" name="email_message" id="email_message" value=""> + </p> + </td> + </tr> + </table> + <input type="submit" class="button button-primary" value="<?php esc_html_e( 'Send test mail', 'health-check' ); ?>"> + </form> + + <div id="tools-mail-check-response-holder"> + <span class="spinner"></span> + </div> + </div> + + <?php + $tab_content = ob_get_clean(); + + $tabs[] = array( + 'label' => esc_html__( 'Mail Check', 'health-check' ), + 'content' => $tab_content, + ); + + return $tabs; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-site-status.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-site-status.php new file mode 100644 index 0000000..df606d2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-site-status.php @@ -0,0 +1,869 @@ +<?php + +class TD_Health_Check_Site_Status { + private $php_min_version_check; + private $php_supported_version_check; + private $php_rec_version_check; + + private $mysql_min_version_check; + private $mysql_rec_version_check; + + public $mariadb = false; + private $mysql_server_version = null; + private $health_check_mysql_rec_version = null; + + public function __construct() { + $this->init(); + } + + public function init() { + $this->php_min_version_check = version_compare( TD_HEALTH_CHECK_PHP_MIN_VERSION, PHP_VERSION, '<=' ); + $this->php_supported_version_check = version_compare( TD_HEALTH_CHECK_PHP_SUPPORTED_VERSION, PHP_VERSION, '<=' ); + $this->php_rec_version_check = version_compare( TD_HEALTH_CHECK_PHP_REC_VERSION, PHP_VERSION, '<=' ); + + $this->prepare_sql_data(); + } + + private function prepare_sql_data() { + global $wpdb; + + if ( method_exists( $wpdb, 'db_version' ) ) { + $mysql_server_type = $wpdb->db_server_info(); + $this->mysql_server_version = $wpdb->get_var( 'SELECT VERSION()' ); + } + + $this->health_check_mysql_rec_version = TD_HEALTH_CHECK_MYSQL_REC_VERSION; + + if ( stristr( $mysql_server_type, 'mariadb' ) ) { + $this->mariadb = true; + $this->health_check_mysql_rec_version = '10.0'; + } + + $this->mysql_min_version_check = version_compare( TD_HEALTH_CHECK_MYSQL_MIN_VERSION, $this->mysql_server_version, '<=' ); + $this->mysql_rec_version_check = version_compare( $this->health_check_mysql_rec_version, $this->mysql_server_version, '<=' ); + } + + public function check_wp_version_check_exists() { + if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'ssa_manage_site_settings' ) || ! isset( $_GET['health-check-test-wp_version_check'] ) ) { + return; + } + + echo ( has_filter( 'wp_version_check', 'wp_version_check' ) ? 'yes' : 'no' ); + + die(); // phpcs:ignore + } + + public function site_status() { + $function = sprintf( + 'test_%s', + $_POST['feature'] + ); + + if ( ! method_exists( $this, $function ) || ! is_callable( array( $this, $function ) ) ) { + die(); // phpcs:ignore + } + + $call = call_user_func( array( $this, $function ) ); + + die(); // phpcs:ignore + } + + public function test_wordpress_version() { + if ( ! function_exists( 'get_core_updates' ) ) { + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + include_once ABSPATH . 'wp-admin/includes/update.php'; + } + $core_current_version = get_bloginfo( 'version' ); + $core_updates = get_core_updates(); + + if ( ! is_array( $core_updates ) ) { + return array( + 'status' => 'error', + 'value' => '--', + 'notices' => array( + sprintf( + // translators: %1$s: Your current version of WordPress. %2$s The latest version of WordPress available. + esc_html__( 'We were unable to check if any new versions are available' ), + $core_current_version, + $update->version + ) + ), + ); + } else { + foreach ( $core_updates as $core => $update ) { + if ( 'upgrade' === $update->response ) { + $current_version = explode( '.', $core_current_version ); + $new_version = explode( '.', $update->version ); + + $current_major = $current_version[0] . '.' . $current_version[1]; + $new_major = $new_version[0] . '.' . $new_version[1]; + if ( $current_major !== $new_major ) { + // This is a major version mismatch. + return array( + 'status' => 'warning', + 'value' => $core_current_version, + 'notices' => array( + sprintf( + // translators: %1$s: Your current version of WordPress. %2$s The latest version of WordPress available. + esc_html__( '%1$s ( Latest version: %2$s )', 'simply-schedule-appointments' ), + $core_current_version, + $update->version + ) + ), + ); + } else { + // This is a minor version, sometimes considered more critical. + return array( + 'status' => 'error', + 'value' => $core_current_version, + 'notices' => array( + sprintf( + // translators: %1$s: Your current version of WordPress. %2$s The latest version of WordPress available. + esc_html__( '%1$s ( Latest version: %2$s ) - We strongly urge you to update, as minor updates are often security related.', 'simply-schedule-appointments' ), + $core_current_version, + $update->version + ) + ), + ); + } + } else { + return array( + 'status' => 'good', + 'value' => $core_current_version, + 'notices' => array( + sprintf( + // translators: %1$s: Your current version of WordPress. + esc_html__( 'You are running WordPress %1$s.', 'simply-schedule-appointments' ), + $core_current_version + ) + ), + ); + } + } + } + + return array( + 'status' => 'warning', + 'value' => '--', + 'notices' => array( + __( 'We were unable to check if any new versions are available' ), + ), + ); + } + + /** + * Check if the user is currently in Troubleshooting Mode or not. + * + * @return bool + */ + public function is_troubleshooting() { + // Check if a session cookie to disable plugins has been set. + if ( isset( $_COOKIE['health-check-disable-plugins'] ) ) { + $_GET['health-check-disable-plugin-hash'] = $_COOKIE['health-check-disable-plugins']; + } + + // If the disable hash isn't set, no need to interact with things. + if ( ! isset( $_GET['health-check-disable-plugin-hash'] ) ) { + return false; + } + + $disable_hash = get_option( 'health-check-disable-plugin-hash', null ); + + if ( empty( $disable_hash ) ) { + return false; + } + + // If the plugin hash is not valid, we also break out + if ( $disable_hash !== $_GET['health-check-disable-plugin-hash'] ) { + return false; + } + + return true; + } + + public function test_plugin_version() { + $plugins = get_plugins(); + $plugin_updates = get_plugin_updates(); + + $show_unused_plugins = true; + $plugins_have_updates = false; + $plugins_active = 0; + $plugins_total = 0; + $plugins_needs_update = 0; + + if ( $this->is_troubleshooting() ) { + $show_unused_plugins = false; + } + + foreach ( $plugins as $plugin_path => $plugin ) { + $plugins_total++; + + if ( is_plugin_active( $plugin_path ) ) { + $plugins_active++; + } + + $plugin_version = $plugin['Version']; + + if ( array_key_exists( $plugin_path, $plugin_updates ) ) { + $plugins_needs_update++; + $plugins_have_updates = true; + } + } + + echo '<ul>'; + + if ( $plugins_needs_update > 0 ) { + printf( + '<li><span class="error"></span> %s', + sprintf( + // translators: %d: The amount of outdated plugins. + esc_html( _n( + 'Your site has %d plugin waiting to be updated.', + 'Your site has %d plugins waiting to be updated.', + $plugins_needs_update, + 'health-check' + ) ), + $plugins_needs_update + ) + ); + } else { + printf( + '<li><span class="good"></span> %s', + sprintf( + // translators: %d: The amount of plugins. + esc_html( _n( + 'Your site has %d active plugin, and it is up to date.', + 'Your site has %d active plugins, and they are all up to date.', + $plugins_total, + 'health-check' + ) ), + $plugins_total + ) + ); + } + + if ( ( $plugins_total > $plugins_active ) && $show_unused_plugins ) { + $unused_plugins = $plugins_total - $plugins_active; + printf( + '<li><span class="warning"></span> %s', + sprintf( + // translators: %d: The amount of inactive plugins. + esc_html( _n( + 'Your site has %d inactive plugin, it is recommended to remove any unused plugins to enhance your site security.', + 'Your site has %d inactive plugins, it is recommended to remove any unused plugins to enhance your site security.', + $unused_plugins, + 'health-check' + ) ), + $unused_plugins + ) + ); + } + + echo '</ul>'; + } + + /** + * Check if the current SSA plugin version is up to date. + * + * @since 4.8.9 + * + * @return array + */ + public function test_ssa_plugin_version() { + if ( ! function_exists( 'get_plugin_updates' ) ) { + include_once ABSPATH . 'wp-admin/includes/plugin.php'; + include_once ABSPATH . 'wp-admin/includes/update.php'; + } + + $current_version = ssa()->get_current_version(); + $update_version = $current_version; + $plugin_updates = get_plugin_updates(); + $status = 'good'; + $value = Simply_Schedule_Appointments::VERSION; + $edition_str = ssa()->get_current_edition_str(); + $message = sprintf( + // translators: 1: SSA Plugin version, 2: Edition name + __( 'Your version of Simply Schedule Appointments %2$s Edition (v%1$s) is up to date.', 'simply-schedule-appointments' ), + $current_version, + $edition_str, + get_admin_url( null, 'update-core.php' ) + ); + + // if the SSA plugin is included on the array of possible updates, then let's check the update version. + if ( array_key_exists( SSA_PLUGIN_BASENAME, $plugin_updates ) ) { + if ( isset( $plugin_updates[ SSA_PLUGIN_BASENAME ]->update->new_version ) ) { + $update_version = $plugin_updates[ SSA_PLUGIN_BASENAME ]->update->new_version; + } + } + + // if current version is lower than the version found on WP.org, then the user should update. + if ( version_compare( $current_version, $update_version, '<' ) ) { + $status = 'warning'; + $value = false; + $message = sprintf( + // translators: 1: SSA Plugin version, 2: Edition name, 3: WordPress's Update screen + __( 'Your version of Simply Schedule Appointments %2$s Edition (v%1$s) is out of date. <a href="%3$s">Upgrade to the latest version (v%4$s)</a>', 'simply-schedule-appointments' ), + $current_version, + $edition_str, + get_admin_url( null, 'update-core.php' ), + $update_version + ); + } + + return array( + 'status' => $status, + 'value' => $value, + 'notices' => array( $message ), + ); + } + + public function test_theme_version() { + $theme_updates = get_theme_updates(); + + $themes_total = 0; + $themes_need_updates = 0; + $themes_inactive = 0; + + // This value is changed dduring processing to determine how many themes are considered a reasonable amount. + $allowed_theme_count = 1; + + $has_default_theme = false; + $has_unused_themes = false; + $show_unused_themes = true; + + if ( $this->is_troubleshooting() ) { + $show_unused_themes = false; + } + + // Populate a list of all themes available in the install. + $all_themes = wp_get_themes(); + $active_theme = wp_get_theme(); + + foreach ( $all_themes as $theme_slug => $theme ) { + $themes_total++; + + if ( WP_DEFAULT_THEME === $theme_slug ) { + $has_default_theme = true; + } + + if ( array_key_exists( $theme_slug, $theme_updates ) ) { + $themes_need_updates++; + } + } + + // If this is a child theme, increase the allowed theme count by one, to account for the parent. + if ( $active_theme->parent() ) { + $allowed_theme_count++; + } + + // If there's a default theme installed, we count that as allowed as well. + if ( $has_default_theme ) { + $allowed_theme_count++; + } + + if ( $themes_total > $allowed_theme_count ) { + $has_unused_themes = true; + $themes_inactive = ( $themes_total - $allowed_theme_count ); + } + + echo '<ul>'; + + if ( $themes_need_updates > 0 ) { + printf( + '<li><span class="error"></span> %s', + sprintf( + // translators: %d: The amount of outdated themes. + esc_html( _n( + 'Your site has %d theme waiting to be updated.', + 'Your site has %d themes waiting to be updated.', + $themes_need_updates, + 'health-check' + ) ), + $themes_need_updates + ) + ); + } else { + printf( + '<li><span class="good"></span> %s', + sprintf( + // translators: %d: The amount of themes. + esc_html( _n( + 'Your site has %d installed theme, and it is up to date.', + 'Your site has %d installed themes, and they are all up to date.', + $themes_total, + 'health-check' + ) ), + $themes_total + ) + ); + } + + if ( $has_unused_themes && $show_unused_themes ) { + + // This is a child theme, so we want to be a bit more explicit in our messages. + if ( $active_theme->parent() ) { + printf( + '<li><span class="warning"></span> %s', + sprintf( + // translators: %1$d: The amount of inactive themes. %2$s: The default theme for WordPress. %3$s: The currently active theme. %4$s: The active themes parent theme. + esc_html( _n( + 'Your site has %1$d inactive theme. To enhance your sites security it is recommended to remove any unused themes. You should keep %2$s, the default WordPress theme, %3$s, your current theme and %4$s, the parent theme.', + 'Your site has %1$d inactive themes. To enhance your sites security it is recommended to remove any unused themes. You should keep %2$s, the default WordPress theme, %3$s, your current theme and %4$s, the parent theme.', + $themes_inactive, + 'health-check' + ) ), + $themes_inactive, + WP_DEFAULT_THEME, + $active_theme->name, + $active_theme->parent()->name + ) + ); + + } else { + printf( + '<li><span class="warning"></span> %s', + sprintf( + // translators: %1$d: The amount of inactive themes. %2$s: The default theme for WordPress. %3$s: The currently active theme. + esc_html( _n( + 'Your site has %1$d inactive theme, other than %2$s, the default WordPress theme, and %3$s, your active theme. It is recommended to remove any unused themes to enhance your sites security.', + 'Your site has %1$d inactive themes, other than %2$s, the default WordPress theme, and %3$s, your active theme. It is recommended to remove any unused themes to enhance your sites security.', + $themes_inactive, + 'health-check' + ) ), + $themes_inactive, + WP_DEFAULT_THEME, + $active_theme->name + ) + ); + + } + } + + if ( ! $has_default_theme ) { + printf( + '<li><span class="warning"></span> %s', + esc_html__( 'Your site does not have a default theme, default themes are used by WordPress automatically if anything is wrong with your normal theme.', 'simply-schedule-appointments' ) + ); + } + + echo '</ul>'; + } + + public function test_php_version() { + $status = 'good'; + $notice = array(); + + if ( ! $this->php_min_version_check ) { + $status = 'error'; + $notice[] = sprintf( + '<a href="%s">%s</a>', + esc_url( + _x( 'https://wordpress.org/support/upgrade-php/', 'The link to the Update PHP page, which may be localized.', 'simply-schedule-appointments' ) + ), + sprintf( + // translators: %1$s: Current PHP version. %2$s: Recommended PHP version. %3$s: Minimum PHP version. + esc_html__( 'Your version of PHP, %1$s, is very outdated and no longer receiving security updates and is not supported by WordPress. You should contact your host for an upgrade, WordPress recommends using PHP version %2$s, but will work with version %3$s or newer.', 'simply-schedule-appointments' ), + PHP_VERSION, + TD_HEALTH_CHECK_PHP_REC_VERSION, + TD_HEALTH_CHECK_PHP_MIN_VERSION + ) + ); + } elseif ( ! $this->php_supported_version_check ) { + $status = 'warning'; + $notice[] = sprintf( + '<a href="%s">%s</a>', + esc_url( + _x( 'https://wordpress.org/support/upgrade-php/', 'The link to the Update PHP page, which may be localized.', 'simply-schedule-appointments' ) + ), + sprintf( + // translators: %1$s: Current PHP version. %2$s: Recommended PHP version. + esc_html__( 'Your version of PHP, %1$s, is very outdated and no longer receiving security updates. You should contact your host for an upgrade, WordPress recommends using PHP version %2$s.', 'simply-schedule-appointments' ), + PHP_VERSION, + TD_HEALTH_CHECK_PHP_REC_VERSION + ) + ); + } elseif ( ! $this->php_rec_version_check ) { + $status = 'good'; + $notice[] = sprintf( + // translators: %s: Recommended PHP version + esc_html__( 'Your version of PHP, %s is current and meets all requirements. For even better performance, you can upgrade to PHP %s or higher.', 'simply-schedule-appointments' ), + PHP_VERSION, + TD_HEALTH_CHECK_PHP_REC_VERSION + ); + } else { + $status = 'good'; + $notice[] = sprintf( + // translators: %s: Recommended PHP version + esc_html__( 'Your version of PHP, %s is current and meets all requirements', 'simply-schedule-appointments' ), + PHP_VERSION, + TD_HEALTH_CHECK_PHP_REC_VERSION + ); + } + + return array( + 'status' => $status, + 'value' => PHP_VERSION, + 'notices' => $notice, + ); + + } + + public function test_json_extension() { + $json_check = TD_Health_Check::json_check(); + + $status = 'good'; + $notice = array(); + + if ( ! $json_check ) { + return array( + 'status' => 'error', + 'value' => false, + 'notices' => array( + esc_html__( 'The PHP install on your server has the JSON extension disabled and is therefore not compatible with WordPress 3.2 or newer.', 'simply-schedule-appointments' ) + ), + ); + } else { + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'Your PHP install supports JSON.', 'simply-schedule-appointments' ) + ), + ); + } + } + + public function test_sql_server() { + $status = 'good'; + $notice = array(); + + $db_dropin = file_exists( WP_CONTENT_DIR . '/db.php' ); + + if ( ! $this->mysql_rec_version_check ) { + $status = 'warning'; + $notice[] = sprintf( + // translators: %1$s: The database engine in use (MySQL or MariaDB). %2$s: Database server recommended version number. + esc_html__( 'For performance and security reasons, we strongly recommend running %1$s version %2$s or higher.', 'simply-schedule-appointments' ), + ( $this->mariadb ? 'MariaDB' : 'MySQL' ), + $this->health_check_mysql_rec_version + ); + } + + if ( ! $this->mysql_min_version_check ) { + $status = 'error'; + $notice[] = sprintf( + // translators: %1$s: The database engine in use (MySQL or MariaDB). %2$s: Database server minimum version number. + esc_html__( 'WordPress 3.2+ requires %1$s version %2$s or higher.', 'simply-schedule-appointments' ), + ( $this->mariadb ? 'MariaDB' : 'MySQL' ), + TD_HEALTH_CHECK_MYSQL_MIN_VERSION + ); + } + + if ( $db_dropin ) { + // translators: %s: The database engine in use (MySQL or MariaDB). + $notice[] = wp_kses( + sprintf( + // translators: %s: The name of the database engine being used. + __( 'You are using a <code>wp-content/db.php</code> drop-in which might mean that a %s database is not being used.', 'simply-schedule-appointments' ), + ( $this->mariadb ? 'MariaDB' : 'MySQL' ) + ), + array( + 'code' => true, + ) + ); + } + + return array( + 'status' => $status, + 'value' => $this->mysql_server_version, + 'notices' => array( + sprintf( + '%s%s', + esc_html( $this->mysql_server_version ), + ( ! empty( $notice ) ? '<br> - ' . implode( '<br>', $notice ) : '' ) + ) + ) + ); + } + + public function test_utf8mb4_support() { + global $wpdb; + + if ( ! $this->mariadb ) { + if ( version_compare( $this->mysql_server_version, '5.5.3', '<' ) ) { + return array( + 'status' => 'warning', + 'value' => $this->mysql_server_version, + 'notices' => array( + sprintf( + /* translators: %s: Number of version. */ + esc_html__( 'WordPress\' utf8mb4 support requires MySQL version %s or greater', 'simply-schedule-appointments' ), + '5.5.3' + ) + ), + ); + } else { + return array( + 'status' => 'good', + 'value' => $this->mysql_server_version, + 'notices' => array( + esc_html__( 'Your MySQL version supports utf8mb4', 'simply-schedule-appointments' ) + ), + ); + } + } else { // MariaDB introduced utf8mb4 support in 5.5.0 + if ( version_compare( $this->mysql_server_version, '5.5.0', '<' ) ) { + return array( + 'status' => 'warning', + 'value' => $this->mysql_server_version, + 'notices' => array( + sprintf( + /* translators: %s: Number of version. */ + esc_html__( 'WordPress\' utf8mb4 support requires MariaDB version %s or greater', 'simply-schedule-appointments' ), + '5.5.0' + ) + ), + ); + } else { + return array( + 'status' => 'good', + 'value' => $this->mysql_server_version, + 'notices' => array( + esc_html__( 'Your MariaDB version supports utf8mb4', 'simply-schedule-appointments' ) + ), + ); + } + } + + if ( $wpdb->use_mysqli ) { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_client_info + $mysql_client_version = mysqli_get_client_info(); + } else { + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + $mysql_client_version = mysql_get_client_info(); // phpcs:ignore + } + + /* + * libmysql has supported utf8mb4 since 5.5.3, same as the MySQL server. + * mysqlnd has supported utf8mb4 since 5.0.9. + */ + if ( false !== strpos( $mysql_client_version, 'mysqlnd' ) ) { + $mysql_client_version = preg_replace( '/^\D+([\d.]+).*/', '$1', $mysql_client_version ); + if ( version_compare( $mysql_client_version, '5.0.9', '<' ) ) { + return array( + 'status' => 'warning', + 'value' => $mysql_client_version, + 'notices' => array( + sprintf( + /* translators: %1$s: Name of the library, %2$s: Number of version. */ + __( 'WordPress\' utf8mb4 support requires MySQL client library (%1$s) version %2$s or newer.', 'simply-schedule-appointments' ), + 'mysqlnd', + '5.0.9' + ) + ), + ); + } + } else { + if ( version_compare( $mysql_client_version, '5.5.3', '<' ) ) { + return array( + 'status' => 'warning', + 'value' => $mysql_client_version, + 'notices' => array( + sprintf( + /* translators: %1$s: Name of the library, %2$s: Number of version. */ + __( 'WordPress\' utf8mb4 support requires MySQL client library (%1$s) version %2$s or newer.', 'simply-schedule-appointments' ), + 'libmysql', + '5.5.3' + ) + ), + ); + } + } + } + + public function test_dotorg_communication() { + $wp_dotorg = wp_remote_get( 'https://wordpress.org', array( + 'timeout' => 10, + ) ); + if ( ! is_wp_error( $wp_dotorg ) ) { + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'WordPress.org is reachable from your server.', 'simply-schedule-appointments' ) + ), + ); + } else { + return array( + 'status' => 'error', + 'value' => false, + 'notices' => array( + sprintf( + // translators: %1$s: The IP address WordPress.org resolves to. %2$s: The error returned by the lookup. + __( 'Unable to reach WordPress.org at %1$s: %2$s', 'simply-schedule-appointments' ), + gethostbyname( 'wordpress.org' ), + $wp_dotorg->get_error_message() + ) + ), + ); + } + } + + public function test_https_status() { + if ( is_ssl() ) { + $wp_url = get_bloginfo( 'wpurl' ); + $site_url = get_bloginfo( 'url' ); + + if ( 'https' !== substr( $wp_url, 0, 5 ) || 'https' !== substr( $site_url, 0, 5 ) ) { + return array( + 'status' => 'warning', + 'value' => false, + 'notices' => array( + sprintf( + // translators: %s: URL to Settings > General to change options. + __( 'You are accessing this website using HTTPS, but your <a href="%s">WordPress Address</a> is not set up to use HTTPS by default.', 'simply-schedule-appointments' ), + esc_url( admin_url( 'options-general.php' ) ) + ) + ), + ); + } else { + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'You are accessing this website using HTTPS.', 'simply-schedule-appointments' ) + ), + ); + } + } else { + return array( + 'status' => 'warning', + 'value' => false, + 'notices' => array( + esc_html__( 'You are not using HTTPS to access this website.', 'simply-schedule-appointments' ) + ), + ); + } + } + + public function test_ssl_support() { + $supports_https = wp_http_supports( array( 'ssl' ) ); + + if ( $supports_https ) { + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'Your WordPress install can communicate securely with other services.', 'simply-schedule-appointments' ) + ), + ); + } else { + return array( + 'status' => 'error', + 'value' => false, + 'notices' => array( + esc_html__( 'Your WordPress install cannot communicate securely with other services. Talk to your web host about OpenSSL support for PHP.', 'simply-schedule-appointments' ) + ), + ); + } + } + + public function test_scheduled_events() { + $scheduled_events = new TD_Health_Check_WP_Cron(); + + if ( is_wp_error( $scheduled_events->has_missed_cron() ) ) { + return array( + 'status' => 'error', + 'value' => false, + 'notices' => array( + esc_html( $scheduled_events->has_missed_cron()->get_error_message() ) + ), + ); + } else { + if ( $scheduled_events->has_missed_cron() ) { + return array( + 'status' => 'warning', + 'value' => false, + 'notices' => array( + sprintf( + // translators: %s: The name of the failed cron event. + esc_html__( 'A scheduled event (%s) has failed to run. Your site still works, but this may indicate that notifications and synchronization with 3rd party services may not work as intended.', 'simply-schedule-appointments' ), + $scheduled_events->last_missed_cron + ) + ), + ); + } else { + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'No scheduled events have been missed.', 'simply-schedule-appointments' ) + ), + ); + } + } + } + + public function test_background_updates() { + $automatic_updates = new TD_Health_Check_Auto_Updates(); + $tests = $automatic_updates->run_tests(); + + echo '<ul>'; + + foreach ( $tests as $test ) { + printf( + '<li><span class="%s"></span> %s</li>', + esc_attr( $test->severity ), + $test->desc + ); + } + + echo '</ul>'; + } + + public function test_loopback_requests() { + $check_loopback = TD_Health_Check_Loopback::can_perform_loopback(); + + printf( + '<span class="%s"></span> %s', + esc_attr( $check_loopback->status ), + $check_loopback->message + ); + + if ( 'error' === $check_loopback->status ) { + echo '<br><button type="button" id="loopback-no-plugins" class="button button-primary">Test without plugins</button>'; + } + } + + public function test_php_default_timezone() { + $health_check = WP_Site_Health::get_instance(); + + $timezone_check = $health_check->get_test_php_default_timezone(); + + return array( + 'status' => $timezone_check['status'] !== 'good' ? 'error' : 'good', + 'value' => $timezone_check['status'] === 'good', + 'notices' => [strip_tags($timezone_check['description'])] , + ); + } + + public function test_ssa_quick_connect_status() { + $google_calendar_settings = ssa()->google_calendar_settings->get(); + if( $google_calendar_settings["quick_connect_backoff"] !== 0 ){ + return array( + 'status' => 'error', + 'value' => false, + 'notices' => array( + esc_html__( 'SSA Quick Connect authorization service is currently unavailable. Your site still works, but notifications and synchronization with google calendar may not work as intended.', 'simply-schedule-appointments' ) + ), + ); + } + return array( + 'status' => 'good', + 'value' => true, + 'notices' => array( + esc_html__( 'SSA Quick Connect authorization service is working as expected.', 'simply-schedule-appointments' ) + ), + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-troubleshoot.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-troubleshoot.php new file mode 100644 index 0000000..5902983 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-troubleshoot.php @@ -0,0 +1,320 @@ +<?php +/** + * Handle troubleshooting options. + * + * @package Health Check + */ + +/** + * Class TD_Health_Check_Troubleshoot + */ +class TD_Health_Check_Troubleshoot { + + /** + * Initiate the troubleshooting mode by setting meta data and cookies. + * + * @uses is_array() + * @uses md5() + * @uses rand() + * @uses update_option() + * @uses setcookie() + * + * @param array $allowed_plugins An array of plugins that may be active right away. + * + * @return void + */ + static function initiate_troubleshooting_mode( $allowed_plugins = array() ) { + if ( ! is_array( $allowed_plugins ) ) { + $allowed_plugins = (array) $allowed_plugins; + } + + $loopback_hash = md5( rand() ); + + update_option( 'health-check-allowed-plugins', $allowed_plugins ); + + update_option( 'health-check-disable-plugin-hash', $loopback_hash ); + + setcookie( 'health-check-disable-plugins', $loopback_hash, 0, COOKIEPATH, COOKIE_DOMAIN ); + } + + /** + * Check if our Must-Use plugin exists. + * + * @uses file_exists() + * + * @return bool + */ + static function mu_plugin_exists() { + return file_exists( WPMU_PLUGIN_DIR . '/health-check-troubleshooting-mode.php' ); + } + + /** + * Check if the old Must-Use plugin exists. + * + * @uses file_exists() + * + * @return bool + */ + static function old_mu_plugin_exists() { + return file_exists( WPMU_PLUGIN_DIR . '/health-check-disable-plugins.php' ); + } + + /** + * Check if the user has been shown the backup warning. + * + * @uses get_user_meta() + * @uses get_current_user_id() + * + * @return bool + */ + static function has_seen_warning() { + /** + * Filter who may see the backup warning from the plugin. + * + * The plugin displays a warning reminding users to keep backups when active. + * This filter allows anyone to declare what capability is needed to view the warning, it is set to + * the `manage_options` capability by default. This means the feature is available to any site admin, + * even in a multisite environment. + * + * @param string $capability Default manage_options. The capability required to see the warning. + */ + $capability_to_see = apply_filters( 'health_check_backup_warning_required_capability', 'manage_options' ); + + // If the current user lacks the capabilities to use the plugin, pretend they've seen the warning so it isn't displayed. + if ( ! current_user_can( $capability_to_see ) ) { + return true; + } + + $meta = get_user_meta( get_current_user_id(), 'health-check', true ); + if ( empty( $meta ) ) { + return false; + } + + if ( 'seen' === $meta['warning']['backup'] ) { + return true; + } + + return false; + } + + /** + * Save the confirmation of having seen a warning. + * + * @uses get_user_meta() + * @uses get_current_user_id() + * @uses update_user_meta() + * + * @return void + */ + static function confirm_warning() { + $user_meta = get_user_meta( get_current_user_id(), 'health-check', true ); + if ( empty( $user_meta ) ) { + $user_meta = array( + 'warning', + ); + } + + $user_meta['warning'][ $_POST['warning'] ] = 'seen'; + + update_user_meta( get_current_user_id(), 'health-check', $user_meta ); + } + + /** + * Introduce our Must-Use plugin. + * + * Move the Must-Use plugin out to the correct directory, and prompt for credentials if required. + * + * @global $wp_filesystem + * + * @uses is_dir() + * @uses WP_Filesystem::mkdir() + * @uses TD_Health_Check::display_notice() + * @uses esc_html__() + * @uses WP_Filesystem::copy() + * @uses trailingslashit() + * @uses TD_Health_Check_Troubleshoot::session_started() + * + * @return bool + */ + static function setup_must_use_plugin( $redirect = true ) { + global $wp_filesystem; + + // Make sure the `mu-plugins` directory exists. + if ( ! is_dir( WPMU_PLUGIN_DIR ) ) { + if ( ! $wp_filesystem->mkdir( WPMU_PLUGIN_DIR ) ) { + TD_Health_Check::display_notice( esc_html__( 'We were unable to create the mu-plugins directory.', 'health-check' ), 'error' ); + return false; + } + } + + // Remove instances of the old plugin, to avoid collisions. + if ( TD_Health_Check_Troubleshoot::old_mu_plugin_exists() ) { + if ( ! $wp_filesystem->delete( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-disable-plugins.php' ) ) { + TD_Health_Check::display_notice( esc_html__( 'We could not remove the old must-use plugin.', 'health-check' ), 'error' ); + return false; + } + } + + // Copy the must-use plugin to the local directory. + if ( ! $wp_filesystem->copy( trailingslashit( TD_HEALTH_CHECK_PLUGIN_DIRECTORY ) . 'assets/mu-plugin/health-check-troubleshooting-mode.php', trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-troubleshooting-mode.php' ) ) { + TD_Health_Check::display_notice( esc_html__( 'We were unable to copy the plugin file required to enable the Troubleshooting Mode.', 'health-check' ), 'error' ); + return false; + } + + if ( $redirect ) { + TD_Health_Check_Troubleshoot::session_started(); + } + + return true; + } + + /** + * Check if our Must-Use plugin needs updating, and do so if necessary. + * + * @global $wp_filesystem + * + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses get_plugin_data() + * @uses trailingslashit() + * @uses version_compare() + * @uses WP_Filesystem::copy() + * @uses esc_html__() + * + * @return bool + */ + static function maybe_update_must_use_plugin() { + if ( ! TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + return false; + } + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + return false; + } + + $current = get_plugin_data( trailingslashit( TD_HEALTH_CHECK_PLUGIN_DIRECTORY ) . 'assets/mu-plugin/health-check-troubleshooting-mode.php' ); + $active = get_plugin_data( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-troubleshooting-mode.php' ); + + $current_version = ( isset( $current['Version'] ) ? $current['Version'] : '0.0' ); + $active_version = ( isset( $active['Version'] ) ? $active['Version'] : '0.0' ); + + if ( version_compare( $current_version, $active_version, '>' ) ) { + global $wp_filesystem; + + if ( ! $wp_filesystem->copy( trailingslashit( TD_HEALTH_CHECK_PLUGIN_DIRECTORY ) . 'assets/mu-plugin/health-check-troubleshooting-mode.php', trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-troubleshooting-mode.php', true ) ) { + TD_Health_Check::display_notice( esc_html__( 'We were unable to replace the plugin file required to enable the Troubleshooting Mode.', 'health-check' ), 'error' ); + return false; + } + } + + return true; + } + + /** + * Output a notice if our Troubleshooting Mode has been initiated. + * + * @uses TD_Health_Check::display_notice() + * @uses sprintf() + * @uses esc_html__() + * @uses esc_url() + * @uses admin_url() + * + * @return void + */ + static function session_started() { + TD_Health_Check::display_notice( + sprintf( + '%s<br>%s', + esc_html__( 'You have successfully enabled Troubleshooting Mode, all plugins will appear inactive until you disable Troubleshooting Mode, or log out and back in again.', 'health-check' ), + sprintf( + '<a href="%1$s">%2$s</a><script type="text/javascript">window.location = "%1$s";</script>', + esc_url( admin_url( '/' ) ), + esc_html__( 'Return to the Dashboard', 'health-check' ) + ) + ) + ); + } + + /** + * Display the form for enabling troubleshooting mode. + * + * @uses printf() + * @uses esc_html__() + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() + * @uses TD_Health_Check_Troubleshoot::session_started() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses TD_Health_Check_Troubleshoot::setup_must_use_plugin() + * @uses esc_html_e() + * + * @return void + */ + + /** + * Display the form for enabling troubleshooting mode. + * + * @uses printf() + * @uses esc_html__() + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() + * @uses TD_Health_Check_Troubleshoot::session_started() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses TD_Health_Check_Troubleshoot::setup_must_use_plugin() + * @uses TD_Health_Check_Troubleshooting_MU::is_troubleshooting() + * @uses esc_url() + * @uses add_query_arg() + * @uses esc_html_e() + * + * @return void + */ + static function show_enable_troubleshoot_form() { + if ( isset( $_POST['health-check-troubleshoot-mode'] ) ) { + if ( TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + if ( ! TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() ) { + return; + } + TD_Health_Check_Troubleshoot::session_started(); + } else { + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + return; + } else { + TD_Health_Check_Troubleshoot::setup_must_use_plugin(); + } + } + } + + ?> + <div class="notice inline"> + + <?php + $troubleshooting = null; + + if ( class_exists( 'TD_Health_Check_Troubleshooting_MU' ) ) { + $troubleshooting = new TD_Health_Check_Troubleshooting_MU(); + } + + if ( null !== $troubleshooting && is_callable( array( $troubleshooting, 'is_troubleshooting' ) ) && $troubleshooting->is_troubleshooting() ) : + ?> + <p style="text-align: center;"> + <a class="button button-primary" href="<?php echo esc_url( add_query_arg( array( 'health-check-disable-troubleshooting' => true ) ) ); ?>"> + <?php esc_html_e( 'Disable Troubleshooting Mode', 'health-check' ); ?> + </a> + </p> + + <?php else : ?> + + <form action="" method="post" class="form" style="text-align: center;"> + <input type="hidden" name="health-check-troubleshoot-mode" value="true"> + <p> + <button type="submit" class="button button-primary"> + <?php esc_html_e( 'Enable Troubleshooting Mode', 'health-check' ); ?> + </button> + </p> + </form> + + <?php endif; ?> + + </div> + + <?php + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-wp-cron.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-wp-cron.php new file mode 100644 index 0000000..dc943ab --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check-wp-cron.php @@ -0,0 +1,100 @@ +<?php +/** + * Perform tests to see if WP_Cron is operating as it should. + * + * @package Health Check + */ + +/** + * Class TD_Health_Check_WP_Cron + */ +class TD_Health_Check_WP_Cron { + public $schedules; + public $crons; + public $last_missed_cron = null; + + /** + * TD_Health_Check_WP_Cron constructor. + */ + public function __construct() { + $this->init(); + } + + /** + * Initiate the class + * + * @uses wp_get_schedules() + * @uses TD_Health_Check_WP_Cron::get_cron_tasks() + * + * @return void + */ + public function init() { + $this->schedules = wp_get_schedules(); + $this->get_cron_tasks(); + } + + /** + * Populate our list of cron events and store them to a class-wide variable. + * + * Derived from `get_cron_events()` in WP Crontrol (https://plugins.svn.wordpress.org/wp-crontrol) + * by John Blackburn. + * + * @uses _get_cron_array() + * @uses WP_Error + * + * @return void + */ + private function get_cron_tasks() { + $cron_tasks = _get_cron_array(); + + if ( empty( $cron_tasks ) ) { + $this->crons = new WP_Error( 'no_tasks', __( 'No scheduled events exist on this site.', 'health-check' ) ); + return; + } + + $this->crons = array(); + + foreach ( $cron_tasks as $time => $cron ) { + foreach ( $cron as $hook => $dings ) { + foreach ( $dings as $sig => $data ) { + + $this->crons[ "$hook-$sig-$time" ] = (object) array( + 'hook' => $hook, + 'time' => $time, + 'sig' => $sig, + 'args' => $data['args'], + 'schedule' => $data['schedule'], + 'interval' => isset( $data['interval'] ) ? $data['interval'] : null, + ); + + } + } + } + } + + /** + * Check if any scheduled tasks have been missed. + * + * Returns a boolean value of `true` if a scheduled task has been missed and ends processing. + * If the list of crons is an instance of WP_Error, return the instance instead of a boolean value. + * + * @uses is_wp_error() + * @uses time() + * + * @return bool|WP_Error + */ + public function has_missed_cron() { + if ( is_wp_error( $this->crons ) ) { + return $this->crons; + } + + foreach ( $this->crons as $id => $cron ) { + if ( ( $cron->time - time() ) < 0 ) { + $this->last_missed_cron = $cron->hook; + return true; + } + } + + return false; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check.php new file mode 100644 index 0000000..2b8f0c7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/includes/class-health-check.php @@ -0,0 +1,435 @@ +<?php +/** + * Primary class file for the Health Check plugin. + * + * @package Health Check + */ + +/** + * Class HealthCheck + */ +class TD_Health_Check { + + /** + * Notices to show at the head of the admin screen. + * + * @access public + * + * @var array + */ + public $admin_notices = array(); + + /** + * HealthCheck constructor. + * + * @uses TD_Health_Check::init() + * + * @return void + */ + public function __construct() { + $this->init(); + } + + /** + * Plugin initiation. + * + * A helper function, called by `HealthCheck::__construct()` to initiate actions, hooks and other features needed. + * + * @uses add_action() + * @uses add_filter() + * + * @return void + */ + public function init() { + // add_action( 'wp_ajax_health-check-loopback-no-plugins', array( 'TD_Health_Check_Loopback', 'loopback_no_plugins' ) ); + // add_action( 'wp_ajax_health-check-loopback-individual-plugins', array( 'TD_Health_Check_Loopback', 'loopback_test_individual_plugins' ) ); + // add_action( 'wp_ajax_health-check-loopback-default-theme', array( 'TD_Health_Check_Loopback', 'loopback_test_default_theme' ) ); + // add_action( 'wp_ajax_health-check-files-integrity-check', array( 'TD_Health_Check_Files_Integrity', 'run_files_integrity_check' ) ); + // add_action( 'wp_ajax_health-check-mail-check', array( 'TD_Health_Check_Mail_Check', 'run_mail_check' ) ); + // add_action( 'wp_ajax_health-check-confirm-warning', array( 'TD_Health_Check_Troubleshoot', 'confirm_warning' ) ); + } + + /** + * Show a warning modal about keeping backups. + * + * @uses TD_Health_Check_Troubleshoot::has_seen_warning() + * + * @return void + */ + public function show_backup_warning() { + if ( TD_Health_Check_Troubleshoot::has_seen_warning() ) { + return; + } + + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/modals/backup-warning.php' ); + } + + /** + * Initiate troubleshooting mode. + * + * Catch when the troubleshooting form has been submitted, and appropriately set required options and cookies. + * + * @uses current_user_can() + * @uses TD_Health_Check_Troubleshoot::initiate_troubleshooting_mode() + * + * @return void + */ + public function start_troubleshoot_mode() { + if ( ! isset( $_POST['health-check-troubleshoot-mode'] ) || ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + TD_Health_Check_Troubleshoot::initiate_troubleshooting_mode(); + } + + /** + * Initiate troubleshooting mode for a specific plugin. + * + * Catch when the troubleshooting link on an individual plugin has been clicked, and appropriately sets the + * required options and cookies. + * + * @uses current_user_can() + * @uses ob_start() + * @uses TD_Health_Check_Troubleshoot::mu_plugin_exists() + * @uses TD_Health_Check::get_filesystem_credentials() + * @uses TD_Health_Check_Troubleshoot::setup_must_use_plugin() + * @uses TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() + * @uses ob_get_clean() + * @uses TD_Health_Check_Troubleshoot::initiate_troubleshooting_mode() + * @uses wp_redirect() + * @uses admin_url() + * + * @return void + */ + public function start_troubleshoot_single_plugin_mode() { + if ( ! isset( $_GET['health-check-troubleshoot-plugin'] ) || ! current_user_can( 'ssa_manage_site_settings' ) ) { + return; + } + + ob_start(); + + $needs_credentials = false; + + if ( ! TD_Health_Check_Troubleshoot::mu_plugin_exists() ) { + if ( ! TD_Health_Check::get_filesystem_credentials() ) { + $needs_credentials = true; + } else { + $check_output = TD_Health_Check_Troubleshoot::setup_must_use_plugin( false ); + if ( false === $check_output ) { + $needs_credentials = true; + } + } + } else { + if ( ! TD_Health_Check_Troubleshoot::maybe_update_must_use_plugin() ) { + $needs_credentials = true; + } + } + + $result = ob_get_clean(); + + if ( $needs_credentials ) { + $this->admin_notices[] = (object) array( + 'message' => $result, + 'type' => 'warning', + ); + return; + } + + TD_Health_Check_Troubleshoot::initiate_troubleshooting_mode( array( + $_GET['health-check-troubleshoot-plugin'] => $_GET['health-check-troubleshoot-plugin'], + ) ); + + wp_redirect( admin_url( 'plugins.php' ) ); + } + + /** + * Load translations. + * + * Loads the textdomain needed to get translations for our plugin. + * + * @uses load_plugin_textdomain() + * @uses basename() + * @uses dirname() + * + * @return void + */ + public function load_i18n() { + load_plugin_textdomain( 'health-check', false, basename( dirname( __FILE__ ) ) . '/languages/' ); + } + + /** + * Enqueue assets. + * + * Conditionally enqueue our CSS and JavaScript when viewing plugin related pages in wp-admin. + * + * @uses wp_enqueue_style() + * @uses plugins_url() + * @uses wp_enqueue_script() + * @uses wp_localize_script() + * @uses esc_html__() + * + * @return void + */ + public function enqueues() { + // Don't enqueue anything unless we're on the health check page + if ( ! isset( $_GET['page'] ) || 'health-check' !== $_GET['page'] ) { + + /* + * Special consideration, if warnings are not dismissed we need to display + * our modal, and thus require our styles, in other locations, before bailing. + */ + if ( ! TD_Health_Check_Troubleshoot::has_seen_warning() ) { + wp_enqueue_style( 'health-check', TD_HEALTH_CHECK_PLUGIN_URL . '/assets/css/health-check.css', array(), TD_HEALTH_CHECK_PLUGIN_VERSION ); + } + return; + } + + wp_enqueue_style( 'health-check', TD_HEALTH_CHECK_PLUGIN_URL . '/assets/css/health-check.css', array(), TD_HEALTH_CHECK_PLUGIN_VERSION ); + + wp_enqueue_script( 'health-check', TD_HEALTH_CHECK_PLUGIN_URL . '/assets/javascript/health-check.js', array( 'jquery' ), TD_HEALTH_CHECK_PLUGIN_VERSION, true ); + + wp_localize_script( 'health-check', 'HealthCheck', array( + 'string' => array( + 'please_wait' => esc_html__( 'Please wait...', 'health-check' ), + 'copied' => esc_html__( 'Copied', 'health-check' ), + 'running_tests' => esc_html__( 'Currently being tested...', 'health-check' ), + ), + 'warning' => array( + 'seen_backup' => TD_Health_Check_Troubleshoot::has_seen_warning(), + ), + ) ); + } + + /** + * Add item to the admin menu. + * + * @uses add_dashboard_page() + * @uses __() + * + * @return void + */ + public function action_admin_menu() { + add_dashboard_page( _x( 'Health Check', 'Menu, Section and Page Title', 'health-check' ), _x( 'Health Check', 'Menu, Section and Page Title', 'health-check' ), 'ssa_manage_site_settings', 'health-check', array( $this, 'dashboard_page' ) ); + } + + /** + * Add a quick-access link under our plugin name on the plugins-list. + * + * @uses plugin_basename() + * @uses sprintf() + * @uses menu_page_url() + * + * @param array $meta An array containing meta links. + * @param string $name The plugin slug that these metas relate to. + * + * @return array + */ + public function settings_link( $meta, $name ) { + if ( plugin_basename( __FILE__ ) === $name ) { + $meta[] = sprintf( '<a href="%s">' . _x( 'Health Check', 'Menu, Section and Page Title', 'health-check' ) . '</a>', menu_page_url( 'health-check', false ) ); + } + + return $meta; + } + + /** + * Add a troubleshooting action link to plugins. + * + * @param $actions + * @param $plugin_file + * @param $plugin_data + * @param $context + * + * @return array + */ + public function troubeshoot_plugin_action( $actions, $plugin_file, $plugin_data, $context ) { + // Don't add anything if this is a Must-Use plugin, we can't touch those. + if ( 'mustuse' === $context ) { + return $actions; + } + + // Only add troubleshooting actions to active plugins. + if ( ! is_plugin_active( $plugin_file ) ) { + return $actions; + } + + // Set a slug if the plugin lives in the plugins directory root. + if ( ! stristr( $plugin_file, '/' ) ) { + $plugin_data['slug'] = $plugin_file; + } + + $actions['troubleshoot'] = sprintf( + '<a href="%s">%s</a>', + esc_url( add_query_arg( array( + 'health-check-troubleshoot-plugin' => ( isset( $plugin_data['slug'] ) ? $plugin_data['slug'] : sanitize_title( $plugin_data['Name'] ) ), + ), admin_url( 'plugins.php' ) ) ), + esc_html__( 'Troubleshoot', 'health-check' ) + ); + + return $actions; + } + + /** + * Render our admin page. + * + * @uses _e() + * @uses esc_html__() + * @uses printf() + * @uses sprintf() + * @uses menu_page_url() + * @uses dirname() + * + * @return void + */ + public function dashboard_page() { + ?> + <div class="wrap"> + <h1> + <?php _ex( 'Health Check', 'Menu, Section and Page Title', 'health-check' ); ?> + </h1> + + <?php + $tabs = array( + 'site-status' => esc_html__( 'Site Status', 'health-check' ), + 'debug' => esc_html__( 'Debug Information', 'health-check' ), + 'troubleshoot' => esc_html__( 'Troubleshooting', 'health-check' ), + 'phpinfo' => esc_html__( 'PHP Information', 'health-check' ), + 'tools' => esc_html__( 'Tools', 'health-check' ), + ); + + $current_tab = ( isset( $_GET['tab'] ) ? $_GET['tab'] : 'site-status' ); + ?> + + <h2 class="nav-tab-wrapper wp-clearfix"> + <?php + foreach ( $tabs as $tab => $label ) { + printf( + '<a href="%s" class="nav-tab %s">%s</a>', + sprintf( + '%s&tab=%s', + menu_page_url( 'health-check', false ), + $tab + ), + ( $current_tab === $tab ? 'nav-tab-active' : '' ), + $label + ); + } + ?> + </h2> + + <?php + switch ( $current_tab ) { + case 'debug': + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/pages/debug-data.php' ); + break; + case 'phpinfo': + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/pages/phpinfo.php' ); + break; + case 'troubleshoot': + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/pages/troubleshoot.php' ); + break; + case 'tools': + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/pages/tools.php' ); + break; + case 'site-status': + default: + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/pages/site-status.php' ); + } + ?> + </div> + <?php + } + + /** + * Display styled admin notices. + * + * @uses printf() + * + * @param string $message A sanitized string containing our notice message. + * @param string $status A string representing the status type. + * + * @return void + */ + static function display_notice( $message, $status = 'success' ) { + printf( + '<div class="notice notice-%s inline">', + $status + ); + + printf( + '<p>%s</p>', + $message + ); + + echo '</div>'; + } + + /** + * Display admin notices if we have any queued. + * + * @return void + */ + public function admin_notices() { + foreach ( $this->admin_notices as $admin_notice ) { + printf( + '<div class="notice notice-%s"><p>%s</p></div>', + esc_attr( $admin_notice->type ), + $admin_notice->message + ); + } + } + + + /** + * Conditionally show a form for providing filesystem credentials when introducing our troubleshooting mode plugin. + * + * @uses wp_nonce_url() + * @uses add_query_arg() + * @uses admin_url() + * @uses request_filesystem_credentials() + * @uses WP_Filesystem + * + * @param array $args Any WP_Filesystem arguments you wish to pass. + * + * @return bool + */ + static function get_filesystem_credentials( $args = array() ) { + $args = array_merge( + array( + 'page' => 'health-check', + 'tab' => 'troubleshoot', + ), + $args + ); + + $url = wp_nonce_url( add_query_arg( $args, admin_url() ) ); + $creds = request_filesystem_credentials( $url, '', false, WP_CONTENT_DIR, array( 'health-check-troubleshoot-mode', 'action' ) ); + if ( false === $creds ) { + return false; + } + + if ( ! WP_Filesystem( $creds ) ) { + request_filesystem_credentials( $url, '', true, WPMU_PLUGIN_DIR, array( 'health-check-troubleshoot-mode', 'action' ) ); + return false; + } + + return true; + } + + /** + * Perform a check to see is JSON is enabled. + * + * @uses extension_loaded() + * @uses function_Exists() + * @uses son_encode() + * + * @return bool + */ + static function json_check() { + $extension_loaded = extension_loaded( 'json' ); + $functions_exist = function_exists( 'json_encode' ) && function_exists( 'json_decode' ); + $functions_work = function_exists( 'json_encode' ) && ( '' != json_encode( 'my test string' ) ); + + return $extension_loaded && $functions_exist && $functions_work; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/backup-warning.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/backup-warning.php new file mode 100644 index 0000000..7b516fc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/backup-warning.php @@ -0,0 +1,45 @@ +<div class="health-check-modal" id="health-check-backup-warning" data-modal-action="" data-parent-field=""> + <div class="modal-content"> + <h2> + <?php esc_html_e( 'Remember to keep backups', 'health-check' ); ?> + </h2> + + <p> + <?php _e( 'Because of how Troubleshooting Mode functions, unforeseen conflicts with other plugins or themes may in rare cases occur, leading to unexpected behaviors.', 'health-check' ); ?> + </p> + + <p> + <?php _e( 'We therefore strongly recommend <a href="https://codex.wordpress.org/WordPress_Backups">making a backup of your site</a> before you enable troubleshooting mode.', 'health-check' ); ?> + </p> + + <p> + <?php _e( 'Additionally, since we really want to make this plugin as safe as possible, if you should have any problems with the troubleshooting mode, please create a new topic in the <a href="https://wordpress.org/support/plugin/health-check">plugins support forum</a> with details about what theme and what plugins you’re using and the steps needed to reproduce the problem. This will help us to analyze and fix such problems.', 'health-check' ); ?> + </p> + + <p> + <button class="button button-primary" id="health-check-accept-backup-warning"><?php esc_html_e( 'I understand', 'health-check' ); ?></button> + </p> + </div> +</div> + +<script type="text/javascript"> + jQuery( document ).ready(function( $ ) { + if ( 'undefined' === typeof( health_check ) || false === health_check.warning.seen_backup ) { + $( "#health-check-backup-warning" ).show(); + } + + $( "#health-check-accept-backup-warning" ).click(function( e ) { + $( "#health-check-backup-warning" ).hide(); + + var data = { + action: 'health-check-confirm-warning', + warning: 'backup' + }; + + $.post( + ajaxurl, + data + ); + }); + }); +</script> diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/diff.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/diff.php new file mode 100644 index 0000000..43111d1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/diff.php @@ -0,0 +1,9 @@ +<div id="health-check-diff-modal"> + <div id="health-check-diff-modal-content"> + <a id="health-check-diff-modal-close-ref" href="#health-check-diff-modal-close"><span class="dashicons dashicons-no"></span></a> + <span class="spinner"></span> + <h3></h3> + <div id="health-check-diff-modal-diff"> + </div> + </div> +</div> \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/js-result-warnings.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/js-result-warnings.php new file mode 100644 index 0000000..6580df1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/modals/js-result-warnings.php @@ -0,0 +1,8 @@ +<div class="health-check-modal" data-modal-action="" data-parent-field=""> + <div class="modal-content"> + <span class="modal-close">×</span> + <div id="dynamic-content"> +   + </div> + </div> +</div> \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/debug-data.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/debug-data.php new file mode 100644 index 0000000..cd2d70a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/debug-data.php @@ -0,0 +1,222 @@ +<?php +/** + * Debug tab contents. + * + * @package Health Check + */ + +// Make sure the file is not directly accessible. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +TD_Health_Check_Debug_Data::check_for_updates(); + +$info = TD_Health_Check_Debug_Data::debug_data(); +?> + + + <div class="notice notice-info inline"> + <p> + <?php esc_html_e( 'The system information shown below can also be copied and pasted into support requests such as on the WordPress.org forums, or to your theme and plugin developers.', 'health-check' ); ?> + </p> + <p> + <button type="button" class="button button-primary" onclick="document.getElementById('system-information-copy-wrapper').style.display = 'block'; this.style.display = 'none';"><?php esc_html_e( 'Show copy and paste field', 'health-check' ); ?></button> + <?php if ( 'en_US' !== get_locale() && version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) : ?> + <button type="button" class="button" onclick="document.getElementById('system-information-english-copy-wrapper').style.display = 'block'; this.style.display = 'none';"><?php esc_html_e( 'Show copy and paste field in English', 'health-check' ); ?></button> + <?php endif; ?> + </p> + + <?php + if ( 'en_US' !== get_locale() && version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) : + + $english_info = TD_Health_Check_Debug_Data::debug_data( 'en_US' ); + + // Workaround for locales not being properly loaded back, see issue #30 on GitHub. + if ( ! is_textdomain_loaded( 'health-check' ) && _get_path_to_translation( 'health-check' ) ) { + load_textdomain( 'health-check', _get_path_to_translation( 'health-check' ) ); + } + ?> + <div id="system-information-english-copy-wrapper" style="display: none;"> + <textarea id="system-information-english-copy-field" class="widefat" rows="10">` + <?php + foreach ( $english_info as $section => $details ) { + // Skip this section if there are no fields, or the section has been declared as private. + if ( empty( $details['fields'] ) || ( isset( $details['private'] ) && $details['private'] ) ) { + continue; + } + + printf( + "### %s%s ###\n\n", + $details['label'], + ( isset( $details['show_count'] ) && $details['show_count'] ? sprintf( ' (%d)', count( $details['fields'] ) ) : '' ) + ); + + foreach ( $details['fields'] as $field ) { + if ( isset( $field['private'] ) && true === $field['private'] ) { + continue; + } + + $values = $field['value']; + if ( is_array( $field['value'] ) ) { + $values = ''; + + foreach ( $field['value'] as $name => $value ) { + $values .= sprintf( + "\n\t%s: %s", + $name, + $value + ); + } + } + + printf( + "%s: %s\n", + $field['label'], + $values + ); + } + echo "\n"; + } + ?> +`</textarea> + <p> + <?php esc_html_e( 'Some information may be filtered out from the list you are about to copy, this is information that may be considered private, and is not meant to be shared in a public forum.', 'health-check' ); ?> + <br> + <button type="button" class="button button-primary health-check-copy-field"><?php esc_html_e( 'Mark field for copying', 'health-check' ); ?></button> + </p> + </div> + + <?php endif; ?> + + <div id="system-information-copy-wrapper" style="display: none;"> + <textarea id="system-information-copy-field" class="widefat" rows="10">` + <?php + foreach ( $info as $section => $details ) { + // Skip this section if there are no fields, or the section has been declared as private. + if ( empty( $details['fields'] ) || ( isset( $details['private'] ) && $details['private'] ) ) { + continue; + } + + printf( + "### %s%s ###\n\n", + $details['label'], + ( isset( $details['show_count'] ) && $details['show_count'] ? sprintf( ' (%d)', count( $details['fields'] ) ) : '' ) + ); + + foreach ( $details['fields'] as $field ) { + if ( isset( $field['private'] ) && true === $field['private'] ) { + continue; + } + + $values = $field['value']; + if ( is_array( $field['value'] ) ) { + $values = ''; + + foreach ( $field['value'] as $name => $value ) { + $values .= sprintf( + "\n\t%s: %s", + $name, + $value + ); + } + } + + printf( + "%s: %s\n", + $field['label'], + $values + ); + } + echo "\n"; + } + ?> +`</textarea> + <p> + <?php esc_html_e( 'Some information may be filtered out from the list you are about to copy, this is information that may be considered private, and is not meant to be shared in a public forum.', 'health-check' ); ?> + <br> + <button type="button" class="button button-primary health-check-copy-field"><?php esc_html_e( 'Mark field for copying', 'health-check' ); ?></button> + </p> + </div> + </div> + + <h2 id="system-information-table-of-contents"> + <?php esc_html_e( 'Table Of Contents', 'health-check' ); ?> + </h2> + <div> + <?php + $toc = array(); + + foreach ( $info as $section => $details ) { + if ( empty( $details['fields'] ) ) { + continue; + } + + $toc[] = sprintf( + '<a href="#%s" class="health-check-toc">%s</a>', + esc_attr( $section ), + esc_html( $details['label'] ) + ); + } + + echo implode( ' | ', $toc ); + ?> + </div> + +<?php +foreach ( $info as $section => $details ) { + if ( ! isset( $details['fields'] ) || empty( $details['fields'] ) ) { + continue; + } + + printf( + '<h2 id="%s">%s%s</h2>', + esc_attr( $section ), + esc_html( $details['label'] ), + ( isset( $details['show_count'] ) && $details['show_count'] ? sprintf( ' (%d)', count( $details['fields'] ) ) : '' ) + ); + + if ( isset( $details['description'] ) && ! empty( $details['description'] ) ) { + printf( + '<p>%s</p>', + wp_kses( $details['description'], array( + 'a' => array( + 'href' => true, + ), + 'strong' => true, + 'em' => true, + ) ) + ); + } + ?> + <table class="widefat striped health-check-table"> + <tbody> + <?php + foreach ( $details['fields'] as $field ) { + if ( is_array( $field['value'] ) ) { + $values = ''; + foreach ( $field['value'] as $name => $value ) { + $values .= sprintf( + '<li>%s: %s</li>', + esc_html( $name ), + esc_html( $value ) + ); + } + } else { + $values = esc_html( $field['value'] ); + } + + printf( + '<tr><td>%s</td><td>%s</td></tr>', + esc_html( $field['label'] ), + $values + ); + } + ?> + </tbody> + </table> + <span style="display: block; width: 100%; text-align: <?php echo ( is_rtl() ? 'left' : 'right' ); ?>"> + <a href="#system-information-table-of-contents" class="health-check-toc"><?php esc_html_e( 'Return to table of contents', 'health-check' ); ?></a> + </span> + <?php +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/phpinfo.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/phpinfo.php new file mode 100644 index 0000000..90d7a93 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/phpinfo.php @@ -0,0 +1,55 @@ +<?php +/** + * The PHPInfo tab contents. + * + * @package Health Check + */ + +// Make sure the file is not directly accessible. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +if ( ! function_exists( 'phpinfo' ) ) { + ?> + + <div class="notice notice-error inline"> + <p> + <?php esc_html_e( 'The phpinfo() function has been disabled by your host. Please contact the host if you need more information about your setup.', 'health-check' ); ?> + </p> + </div> + +<?php } else { ?> + + <?php + ob_start(); + phpinfo(); + $phpinfo_raw = ob_get_clean(); + + // Extract the body of the `phpinfo()` call, to avoid all the styles they introduce. + preg_match_all( '/<body[^>]*>(.*)<\/body>/siU', $phpinfo_raw, $phpinfo ); + + // Extract the styles `phpinfo()` creates for this page. + preg_match_all( '/<style[^>]*>(.*)<\/style>/siU', $phpinfo_raw, $styles ); + + // We remove various styles that break the visual flow of wp-admin. + $remove_patterns = array( + "/a:.+?\n/si", + "/body.+?\n/si", + ); + + // Output the styles as an inline style block. + if ( isset( $styles[1][0] ) ) { + $styles = preg_replace( $remove_patterns, '', $styles[1][0] ); + + echo '<style type="text/css">' . $styles . '</style>'; + } + + // Output the actual phpinfo data. + if ( isset( $phpinfo[1][0] ) ) { + echo $phpinfo[1][0]; + } + ?> + + <?php +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/site-status.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/site-status.php new file mode 100644 index 0000000..7deb725 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/site-status.php @@ -0,0 +1,118 @@ +<?php +/** + * Health Check tab contents. + * + * @package Health Check + */ + +// Make sure the file is not directly accessible. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} +?> + + <div class="notice notice-info inline"> + <p> + <?php esc_html_e( 'The health check shows critical information about your WordPress configuration and items that require your attention.', 'health-check' ); ?> + </p> + </div> + + <table class="widefat striped health-check-table"> + <tbody> + <tr> + <td><?php esc_html_e( 'WordPress Version', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="wordpress_version"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Plugin Versions', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="plugin_version"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Theme Versions', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="theme_version"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'PHP Version', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="php_version"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td> + <?php esc_html_e( 'Database Server version', 'health-check' ); ?> + </td> + <td class="health-check-site-status-test" data-site-status="sql_server"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'JSON Extension', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="json_extension"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'MySQL utf8mb4 support', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="utf8mb4_support"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Communication with WordPress.org', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="dotorg_communication"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'HTTPS status', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="https_status"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Secure communication', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="ssl_support"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Scheduled events', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="scheduled_events"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Background updates', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="background_updates"> + <span class="spinner is-active"></span> + </td> + </tr> + + <tr> + <td><?php esc_html_e( 'Loopback request', 'health-check' ); ?></td> + <td class="health-check-site-status-test" data-site-status="loopback_requests"> + <span class="spinner is-active"></span> + </td> + </tr> + </tbody> + </table> + + <?php + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/modals/js-result-warnings.php' ); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/tools.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/tools.php new file mode 100644 index 0000000..fdb20e1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/tools.php @@ -0,0 +1,58 @@ +<?php +/** + * Health Check tab contents. + * + * @package Health Check + */ + +// Make sure the file is not directly accessible. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +?> + +<dl id="health-check-tools" role="presentation" class="health-check-accordion"> + <?php + /** + * Filter the features available under the Tools tab. + * + * You may introduce your own, or modify the behavior of existing tools here, + * although we recommend not modifying anything provided by the plugin it self. + * + * Any interactive elements should be introduced using JavaScript and/or CSS, either + * inline, or by enqueueing them via the appropriate actions. + * + * @param array $args { + * An unassociated array of tabs, listed in the order they are registered. + * + * @type array $tab { + * An associated array containing the tab title, and content. + * + * @type string $label A pre-escaped string used to label your tool section. + * @type string $content The content of your tool tab, with any code you may need. + * } + * } + */ + $tabs = apply_filters( 'health_check_tools_tab', array() ); + + foreach ( $tabs as $count => $tab ) : + ?> + + <dt role="heading" aria-level="2"> + <button aria-expanded="false" class="health-check-accordion-trigger" aria-controls="health-check-accordion-block-<?php echo esc_attr( $count ); ?>" id="health-check-accordion-heading-<?php echo esc_attr( $count ); ?>" type="button"> + <span class="title"> + <?php echo $tab['label']; ?> + </span> + <span class="icon"></span> + </button> + </dt> + <dd id="health-check-accordion-block-<?php echo esc_attr( $count ); ?>" role="region" aria-labelledby="health-check-accordion-heading-<?php echo esc_attr( $count ); ?>" class="health-check-accordion-panel" hidden="hidden"> + <?php echo $tab['content']; ?> + </dd> + + <?php endforeach; ?> +</dl> + +<?php +include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/modals/diff.php' ); diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/troubleshoot.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/troubleshoot.php new file mode 100644 index 0000000..078c64d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/pages/troubleshoot.php @@ -0,0 +1,38 @@ +<?php +/** + * The Troubleshooting tab contents. + * + * @package Health Check + */ + +// Make sure the file is not directly accessible. +if ( ! defined( 'ABSPATH' ) ) { + die( 'We\'re sorry, but you can not directly access this file.' ); // phpcs:ignore +} + +?> +<div class="notice notice-warning inline"> + <p> + <?php esc_html_e( 'When troubleshooting issues on your site, you are likely to be told to disable all plugins and switch to the default theme.', 'health-check' ); ?> + <?php esc_html_e( 'Understandably, you do not wish to do so as it may affect your site visitors, leaving them with lost functionality.', 'health-check' ); ?> + </p> + + <p> + <?php esc_html_e( 'By enabling the Troubleshooting Mode, all plugins will appear inactive and your site will switch to the default theme only for you. All other users will see your site as usual.', 'health-check' ); ?> + </p> + + <p> + <?php esc_html_e( 'A Troubleshooting Mode menu is added to your admin bar, which will allow you to enable plugins individually, switch back to your current theme, and disable Troubleshooting Mode.', 'health-check' ); ?> + </p> + + <p> + <?php esc_html_e( 'Please note, that due to how Must Use plugins work, any such plugin will not be disabled for the troubleshooting session.', 'health-check' ); ?> + </p> +</div> + +<?php +TD_Health_Check_Troubleshoot::show_enable_troubleshoot_form(); + +if ( ! TD_Health_Check_Troubleshoot::has_seen_warning() ) { + include_once( TD_HEALTH_CHECK_PLUGIN_DIRECTORY . '/modals/backup-warning.php' ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/readme.txt b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/readme.txt new file mode 100644 index 0000000..51d26a4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/readme.txt @@ -0,0 +1,55 @@ +=== Health Check & Troubleshooting === +Tags: health check +Contributors: wordpressdotorg, westi, pento, Clorith +Requires at least: 4.0 +Tested up to: 4.9 +Stable tag: 1.2.1 +License: GPLv2 +License URI: https://www.gnu.org/licenses/gpl-2.0.html + +== Description == + +This plugin will perform a number of checks on your WordPress install to detect common configuration errors and known issues. + +It currently checks your PHP and MySQL versions, some extensions which are needed or may improve WordPress, and that the WordPress.org services are accessible to you. + +The debug section, which allows you to gather information about your WordPress and server configuration that you may easily share with support representatives for themes, plugins or on the official WordPress.org support forums. + +Troubleshooting allows you to have a vanilla WordPress session, where all plugins are disabled, and a default theme is used, but only for your user. + +For a more extensive example of how to efficiently use the Health Check plugin, check out the [WordPress.org support team handbook page about this plugin](https://make.wordpress.org/support/handbook/appendix/troubleshooting-using-the-health-check/). + +In the future we may introduce more checks, and welcome feedback both through the [WordPress.org forums](https://wordpress.org/support/plugin/health-check), and the [GitHub project page](https://github.com/WordPress/health-check). + +== Frequently Asked Questions == + += I am unable to access my site after enabling troubleshooting = + +If you should find your self stuck in Troubleshooting Mode for any reason, you can easily disable it by clearing your cookies. + +Are you unfamiliar with how to clear your cookies? No worries, you may also close all your browser windows, or perform a computer restart and it will clear this specific cookie automatically. + +== Screenshots == + +1. The health check screen after the automated tests have gone over the system. +2. The debug information, with the copy and paste field expanded. +3. The generic PHP information tab, when more detailed information is required. + +== Changelog == + += v 1.2.1 = +* Make sure only those with access to the plugin see the backup encouragement notice. +* Make sure the `is_troubleshooting()` checks are available to the Site Status tester when the MU plugin may not have updated yet. +* Avoid a warning of an undefined variable if you have the latest WordPress version installed. + += v 1.2.0 = +* Changed plugin name, it now better describes the plugins two primary purposes. +* Changed the `Health Check` tab, it's now named `Site Status`, as we used the old name too many places and it was confusing. +* Site status tests now run asynchronously, making the page load much faster. +* The HTTPS tests now also check your Site URL settings to make sure they are following recommended best practices. +* Fixed a warning preventing plugin names from displaying on the front-end in some cases. +* Fixed an issue where you might get a 500 error if you tried using Troubleshooting Mode while using a child theme. +* Automatically disable/enable a plugin or theme in Troubleshooting Mode if they are detected to cause errors. +* Introduce a new dashboard widget during Troubleshooting Mode (and a simplified version on the plugins screen) to better explain what is going on, and make available actions more discoverable than the admin menu is. +* Some text improvements throughout the plugin. +* When loopback tests fail, we previously tested all plugins at once, for sites that have many plugins this may fail as the request times out. We now test one plugin at a time to avoid this, while also showing more information at the tests are running to the end user. diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/uninstall.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/uninstall.php new file mode 100644 index 0000000..12d61f6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-health-check/uninstall.php @@ -0,0 +1,40 @@ +<?php +/** + * Perform plugin installation routines. + * + * @package Health Check + */ + +global $wpdb; + +// Make sure the uninstall file can't be accessed directly. +if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { + die; // phpcs:ignore +} + +// Remove options introduced by the plugin. +delete_option( 'health-check-disable-plugin-hash' ); +delete_option( 'health-check-default-theme' ); +delete_option( 'health-check-current-theme' ); +delete_option( 'health-check-dashboard-notices' ); + +/* + * Remove any user meta entries we made, done with a custom query as core + * does not provide an option to clear them for all users. + */ +$wpdb->delete( + $wpdb->usermeta, + array( + 'meta_key' => 'health-check', + ) +); + +// Remove the old Must-Use plugin if it was implemented. +if ( file_exists( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-disable-plugins.php' ) ) { + wp_delete_file( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-disable-plugins.php' ); +} + +// Remove the renamed Must-Use plugin if it exists +if ( file_exists( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-troubleshooting-mode.php' ) ) { + wp_delete_file( trailingslashit( WPMU_PLUGIN_DIR ) . 'health-check-troubleshooting-mode.php' ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-api-model.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-api-model.php new file mode 100644 index 0000000..25061c7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-api-model.php @@ -0,0 +1,500 @@ +<?php +/* + * don't extend TD_API_Model + * instead extend TD_DB_Model + */ +abstract class TD_API_Model extends TD_Model { + protected $plugin; + + protected $api_enabled = true; + protected $api_namespace; + protected $api_version = '1'; + protected $api_base; + + public function __construct( $plugin ) { + parent::__construct( $plugin ); + + $this->plugin = $plugin; + $this->api_hooks(); + } + + public function api_hooks() { + if ( empty( $this->api_enabled ) ) { + return; + } + + if ( empty( $this->api_namespace ) ) { + die( 'define $this->api_namespace in ' . get_class( $this ) ); // phpcs:ignore + } + + add_action( 'rest_api_init', array( $this, 'rest_api_init' ) ); + } + + public function rest_api_init() { + $this->register_routes(); + } + + public function get_api_base() { + if ( !empty( $this->api_base ) ) { + return $this->api_base; + } + + $this->api_base = $this->get_pluralized_slug(); + return $this->api_base; + } + + /** + * Register the routes for the objects of the controller. + */ + public function register_routes() { + $namespace = $this->api_namespace.'/v' . $this->api_version; + $base = $this->get_api_base(); + + register_rest_route( $namespace, '/' . $base, array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => array( + + ), + ), + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'create_item' ), + 'permission_callback' => array( $this, 'create_item_permissions_check' ), + 'args' => array(), + ), + ) ); + + register_rest_route( $namespace, '/' . $base . '/bulk', array( + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_items' ), + 'permission_callback' => array( $this, 'create_item_permissions_check' ), + 'args' => array(), + ), + ) ); + + register_rest_route( $namespace, '/' . $base . '/(?P<id>[\d]+)', array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this, 'get_item_permissions_check' ), + 'args' => array( + 'context' => array( + 'default' => 'view', + ), + ), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_item' ), + 'permission_callback' => array( $this, 'update_item_permissions_check' ), + 'args' => array(), + ), + array( + 'methods' => WP_REST_Server::DELETABLE, + 'callback' => array( $this, 'delete_item' ), + 'permission_callback' => array( $this, 'delete_item_permissions_check' ), + 'args' => array( + 'force' => array( + 'default' => false, + ), + ), + ), + ) ); + + // Some servers have DELETE method disabled for some reason. + // It's common enough that this workaround is nice to have as an option. + register_rest_route( $namespace, '/' . $base . '/(?P<id>[\d]+)/delete', array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'delete_item' ), + 'permission_callback' => array( $this, 'delete_item_permissions_check' ), + 'args' => array( + 'force' => array( + 'default' => false, + ), + ), + ), + ) ); + + $this->register_custom_routes(); + // register_rest_route( $namespace, '/' . $base . '/schema', array( + // 'methods' => WP_REST_Server::READABLE, + // 'callback' => array( $this, 'get_public_item_schema' ), + // ) ); + } + + public function register_custom_routes() { + + } + + /** + * Get a collection of items + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Response + */ + public function get_items( $request ) { + $params = $request->get_params(); + + $schema = $this->get_schema(); + + $data = $this->query( $params ); + $data = $this->prepare_collection_for_api_response( $data ); + + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $data, + ); + + return new WP_REST_Response( $response, 200 ); + } + + /** + * Get one item from the collection + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Response + */ + public function get_item( $request ) { + $params = $request->get_params(); + $recursive = ( !empty( $params['recursive'] ) ) ? $params['recursive'] : 0; + $data = $this->get( $params['id'], $recursive ); + $data = $this->prepare_item_for_api_response( $data ); + + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $data, + ); + + return new WP_REST_Response( $response, 200 ); + } + + public function prepare_item_for_api_response( $item, $recursive=0 ) { + $keys_to_redact = array(); + foreach ($item as $key => $value) { + if ( empty( $this->schema[$key]['required_capability'] ) ) { + continue; + } + + if ( current_user_can( $this->schema[$key]['required_capability'] ) ) { + continue; + } + + $keys_to_redact[$key] = $key; + } + + $item = array_diff_key( $item, $keys_to_redact ); + return $item; + } + + public function prepare_collection_for_api_response( $items, $recursive=0 ) { + $prepared_items = array(); + foreach ($items as $key => $item) { + $prepared_items[$key] = $this->prepare_item_for_api_response( $item ); + } + + return $prepared_items; + } + + /** + * Create one item from the collection + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Request + */ + public function create_item( $request ) { + $params = $request->get_params(); + $insert_id = $this->insert( $params ); + + if ( empty( $insert_id ) ) { + $response = array( + 'response_code' => '500', + 'error' => 'Not created', + 'data' => array(), + ); + } elseif( is_wp_error( $insert_id ) ) { + $response = array( + 'response_code' => '500', + 'error' => true, + 'data' => $insert_id, + ); + } elseif( is_array( $insert_id ) && ! empty( $insert_id['error']['code'] ) ) { + $response = array( + 'response_code' => $insert_id['error']['code'], + 'error' => $insert_id['error']['message'], + 'data' => $insert_id['error']['data'], + ); + } else { + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $this->get( $insert_id ), + ); + } + + return new WP_REST_Response( $response, 200 ); + + } + + /** + * Update one item from the collection + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Request + */ + public function update_item( $request ) { + $item_id = $request['id']; + $params = $request->get_params(); + // To remove afte testing (this should happen in the db abstraction level) + // $schema = $this->get_schema(); + + // $default_item = $this->get_field_defaults(); + // if ( isset( $default_item[$this->primary_key] ) ) { + // unset( $default_item[$this->primary_key] ); + // } + + // $updated_item = array(); + // foreach ($default_item as $key => $value) { + // if ( isset( $params[$key] ) ) { + // $updated_item[$key] = $params[$key]; + // } + // } + + // if ( !empty( $schema['date_modified'] ) && empty( $updated_item['date_modified'] ) ) { + // $updated_item['date_modified'] = date('Y-m-d H:i:s' ); + // } + $response = $this->update( $item_id, $params ); + + // Note that $this->update will not update the db if an error key is detected + // It just returns the data back to frontend + if ( ! empty( $response['error'] ) ) { + $error = $response['error']; + unset($response['error']); + + $response = array( + 'response_code' => 500, + 'error' => $error, + 'data' => $response, + ); + } else { + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $this->get( $item_id ), + ); + } + + return new WP_REST_Response( $response, 200 ); + } + +/** + * Update one item from the collection + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Request + */ + public function update_items( $request ) { + $item_id = $request['id']; + $params = $request->get_params(); + if ( empty( $params['items']['0']['id'] ) ) { + return array( + 'response_code' => 500, + 'error' => 'Please specify data: { items: [{ id: 1, title: ...}, {id: 2, title: ...} ...]', + 'data' => '', + ); + } + + $updated = array(); + foreach ($params['items'] as $key => $item) { + $item_id = $item['id']; + unset( $item['id'] ); + $this->update( $item_id, $item ); + } + + // Return all appointment types + $schema = $this->get_schema(); + + $data = $this->query( $params ); + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $data, + ); + + return new WP_REST_Response( $response, 200 ); + } + + /** + * Delete one item from the collection + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|WP_REST_Request + */ + public function delete_item( $request ) { + if ( empty( $request['id'] ) && $request['id'] !== 0 ) { + return false; + } + + $response = array( + 'response_code' => 200, + 'error' => '', + 'data' => $this->delete( $request['id'] ), + ); + + return new WP_REST_Response( $response, 200 ); + } + + public static function logged_in_permissions_check( $request ) { + if ( is_user_logged_in() ) { + return true; + } + + return false; + } + + public static function nonce_permissions_check( $request ) { + if ( empty( $request->get_headers()['x_wp_nonce']['0'] ) ) { + return false; + } + + $nonce = $request->get_headers()['x_wp_nonce']['0']; + $is_valid = wp_verify_nonce( $nonce, 'wp_rest' ); + + if ( $is_valid ) { + return $is_valid; + } + + if ( empty( $request->get_headers()['x_public_nonce']['0'] ) ) { + return false; + } + + $nonce = $request->get_headers()['x_public_nonce']['0']; + $is_valid = self::verify_nonce( $nonce, 'wp_rest' ); + + return $is_valid; + } + + /** + * Check if a given request has access to get items + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function get_items_permissions_check( $request ) { + if ( current_user_can( 'ssa_manage_site_settings' ) ) { + return true; + } + + return false; + } + + /** + * Check if a given request has access to get a specific item + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function get_item_permissions_check( $request ) { + if ( current_user_can( 'ssa_manage_site_settings' ) ) { + return true; + } + + return false; + } + + /** + * Check if a given request has access to create items + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function create_item_permissions_check( $request ) { + if ( current_user_can( 'ssa_manage_site_settings' ) ) { + return true; + } + + return false; + } + + /** + * Check if a given request has access to update a specific item + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function update_item_permissions_check( $request ) { + return $this->create_item_permissions_check( $request ); + } + + /** + * Check if a given request has access to delete a specific item + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function delete_item_permissions_check( $request ) { + return $this->create_item_permissions_check( $request ); + } + + /** + * Get the query params for collections + * + * @return array + */ + public function get_collection_params() { + return array( + 'page' => array( + 'description' => 'Current page of the collection.', + 'type' => 'integer', + 'default' => 1, + 'sanitize_callback' => 'absint', + ), + 'per_page' => array( + 'description' => 'Maximum number of items to be returned in result set.', + 'type' => 'integer', + 'default' => 10, + 'sanitize_callback' => 'absint', + ), + 'search' => array( + 'description' => 'Limit results to those matching a string.', + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ); + } + + public static function create_nonce( $action = -1, $user_id = false ) { + if ( $user_id !== false ) { + if ( empty( $user_id ) ) { + $user_id = get_current_user_id(); + } + } + + return substr( wp_hash( $action . '|' . $user_id, 'nonce' ), -12, 10 ); + } + + public static function verify_nonce( $nonce, $action = -1, $user_id = false ) { + $nonce = (string) $nonce; + + if ( empty( $nonce ) ) { + return false; + } + + $expected = self::create_nonce( $action, $user_id ); + + $token = wp_get_session_token(); + $i = wp_nonce_tick(); + + if ( hash_equals( $expected, $nonce ) ) { + return 1; + } + + return false; + } +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-async-action-model.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-async-action-model.php new file mode 100644 index 0000000..b1d3029 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-async-action-model.php @@ -0,0 +1,454 @@ +<?php +abstract class TD_Async_Action_Model extends TD_DB_Model { + protected $slug = 'async_action'; + protected $version = '1.8.5'; + + /** + * Get things started + * + * @access public + * @since 0.0.2 + */ + public function __construct( $plugin ) { + parent::__construct( $plugin ); + + $this->hooks_hooks(); + } + + public function hooks_hooks() { + add_filter( 'query_'.$this->slug.'_db_where_conditions', array( $this, 'date_filter_where_conditions' ), 10, 2 ); + } + + public function date_filter_where_conditions( $where, $args ) { + global $wpdb; + if( ! empty( $args['action'] ) ) { + if( is_array( $args['action'] ) ) { + $actions = implode( ',', array_map( function ( $action ) { + return '"' . sanitize_text_field ( $action ) . '"'; + }, $args['action'] ) ); + } else { + $actions = sanitize_text_field( $args['action'] ); + } + + $where .= " AND `action` IN( $actions ) "; + } + + if ( !empty( $this->schema['date_queued'] ) ) { + // Customers created for a specific date or in a date range + if( ! empty( $args['date_queued'] ) ) { + + if( !is_array( $args['date_queued'] ) ) { + if ( $args['date_queued'] == '0000-00-00 00:00:00' ) { + $where .= " AND (`date_queued` = \"".$args['date_queued']."\" OR `date_queued` IS NULL ) "; + } else { + $where .= $wpdb->prepare( " AND `date_queued` = '" . '%s' . "' ", $args['date_queued'] ); + } + } + + } else { + + if( ! empty( $args['date_queued_min'] ) ) { + $where .= $wpdb->prepare( " AND `date_queued` >= '" . '%s' . "' ", $args["date_queued_min"] ); + } + + if( ! empty( $args['date_queued_max'] ) ) { + $where .= $wpdb->prepare( " AND `date_queued` <= '" . '%s' . "' ", $args["date_queued_max"]); + } + + } + } + + if ( !empty( $this->schema['date_processed'] ) ) { + // Customers created for a specific date or in a date range + if( ! empty( $args['date_processed'] ) ) { + + if( !is_array( $args['date_processed'] ) ) { + if ( $args['date_processed'] == '0000-00-00 00:00:00' ) { + $where .= " AND (`date_processed` = \"".$args['date_processed']."\" OR `date_processed` IS NULL ) "; + } else { + $where .= $wpdb->prepare( " AND `date_processed` = '" . '%s' . "' ", $args['date_processed'] ); + } + } + + + + } else { + + if( ! empty( $args['date_processed_min'] ) ) { + $where .= $wpdb->prepare( " AND `date_processed` >= '" . '%s' . "' ", $args["date_processed_min"] ); + } + + if( ! empty( $args['date_processed_max'] ) ) { + $where .= $wpdb->prepare( " AND `date_processed` <= '" . '%s' . "' ", $args["date_processed_max"] ); + } + + } + } + + if ( !empty( $this->schema['date_completed'] ) ) { + // Customers created for a specific date or in a date range + if( ! empty( $args['date_completed'] ) ) { + + if( !is_array( $args['date_completed'] ) ) { + if ( $args['date_completed'] == '0000-00-00 00:00:00' ) { + $where .= " AND (`date_completed` = \"".$args['date_completed']."\" OR `date_completed` IS NULL ) "; + } else { + $where .= $wpdb->prepare( " AND `date_completed` = '" . '%s' . "' ", $args['date_completed'] ); + } + } + + } else { + + if( ! empty( $args['date_completed_min'] ) ) { + $where .= $wpdb->prepare( " AND `date_completed` >= '" . '%s' . "' ", $args["date_completed_min"] ); + } + + if( ! empty( $args['date_completed_max'] ) ) { + $where .= $wpdb->prepare( " AND `date_completed` <= '" . '%s' . "' ", $args["date_completed_max"] ); + } + + } + } + + return $where; + } + + public function insert( $data, $type='' ) { + if ( empty( $data['date_queued'] ) ) { + $data['date_queued'] = gmdate( 'Y-m-d H:i:s' ); + } + + return parent::insert( $data, $type ); + } + + public function queue_action( $hook, $action = null, $priority = 10, $payload = array(), $object_type = null, $object_id = null, $action_group = null, $meta = array() ) { + if ( empty( $action ) ) { + $action = 'async_'.$hook; + } + + $data = array( + 'hook' => $hook, + 'action' => $action, + 'priority' => $priority, + 'object_type' => $object_type, + 'object_id' => $object_id, + 'action_group' => $action_group, + 'payload' => $payload, + ); + + $meta = shortcode_atts( array( + 'date_queued' => null, + ), $meta ); + + foreach ($meta as $key => $value) { + if ( empty( $value ) ) { + continue; + } + + $data[$key] = $value; + } + + return $this->insert( $data ); + } + + public function complete_action( $action_id, $response = array() ) { + $this->update( $action_id, array( + 'response' => $response, + 'date_completed' => gmdate( 'Y-m-d H:i:s' ), + ) ); + } + + public function process( $query = array() ) { + $query = shortcode_atts( array( + 'date_processed' => '0000-00-00 00:00:00', + 'orderby' => 'priority', + 'order' => 'ASC', + 'date_queued_max' => gmdate( 'Y-m-d H:i:s' ), + ), $query ); + + $actions_to_do = $this->query( $query ); + foreach ($actions_to_do as $key => $action_to_do) { + if ( empty( $action_to_do['action'] ) ) { + continue; + } + + if ( empty( $action_to_do['date_queued'] ) || $action_to_do['date_queued'] > gmdate( 'Y-m-d H:i:s' ) ) { + continue; + } + + $action_to_do = $this->get( $action_to_do['id'] ); + if ( !empty( $action_to_do['date_processed'] ) && $action_to_do['date_processed'] != '0000-00-00 00:00:00' ) { + continue; + } + $action_to_do['date_processed'] = gmdate( 'Y-m-d H:i:s' ); + + $this->update( $action_to_do['id'], array( + 'date_processed' => $action_to_do['date_processed'] + ) ); + do_action( $action_to_do['action'], $action_to_do['payload'], $action_to_do ); + } + + if ( apply_filters( 'ssa/async/retry_incomplete_actions', false ) && empty( $action_to_do ) ) { + // let's check for ones that started processing but never finished + $ten_minutes_ago_ymd = gmdate( 'Y-m-d H:i:s', time()-600 ); + $query = shortcode_atts( array( + 'date_completed' => '0000-00-00 00:00:00', + 'date_processed_max' => $ten_minutes_ago_ymd, + 'date_processed_min' => gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS * 6 ), + 'orderby' => 'priority', + 'order' => 'ASC', + 'date_queued_max' => gmdate( 'Y-m-d H:i:s' ), + ), $query ); + + $actions_to_do = $this->query( $query ); + foreach ($actions_to_do as $key => $action_to_do) { + if ( empty( $action_to_do['action'] ) ) { + continue; + } + + if ( empty( $action_to_do['date_queued'] ) || $action_to_do['date_queued'] > gmdate( 'Y-m-d H:i:s' ) ) { + continue; + } + + $action_to_do = $this->get( $action_to_do['id'] ); + if ( !empty( $action_to_do['date_processed'] ) && $action_to_do['date_processed'] > $ten_minutes_ago_ymd ) { + // this already got picked up another time + continue; + } + $action_to_do['date_processed'] = gmdate( 'Y-m-d H:i:s' ); + + $this->update( $action_to_do['id'], array( + 'date_processed' => $action_to_do['date_processed'], + 'date_completed' => $action_to_do['date_processed'], // we don't want it to infinitely loop, just try one more time + ) ); + do_action( $action_to_do['action'], $action_to_do['payload'], $action_to_do ); + } + } + } + + protected $indexes = array( + 'author_id' => [ 'author_id' ], + 'hook' => [ 'hook' ], + 'action' => [ 'action' ], + 'date_queued' => [ 'date_queued' ], + 'date_processed' => [ 'date_processed' ], + 'date_completed' => [ 'date_completed' ], + 'process_batch_token' => [ 'process_batch_token' ], + ); + + protected $schema = array( + 'author_id' => array( + 'field' => 'author_id', + 'label' => 'Author', + 'default_value' => 0, + 'format' => '%d', + 'mysql_type' => 'BIGINT', + 'mysql_length' => 11, + 'mysql_unsigned' => true, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'hook' => array( + 'field' => 'hook', + 'label' => 'Hook', + 'default_value' => '', + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => 150, + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'action' => array( + 'field' => 'action', + 'label' => 'Action', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '150', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'priority' => array( + 'field' => 'priority', + 'label' => 'Priority', + 'default_value' => 10, + 'format' => '%d', + 'mysql_type' => 'INT', + 'mysql_length' => '5', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'payload' => array( + 'field' => 'payload', + 'label' => 'Object Data', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'TEXT', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + + 'type' => 'array', + 'encoder' => 'json', + ), + + 'object_type' => array( + 'field' => 'object_type', + 'label' => 'Object Type', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '150', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'object_id' => array( + 'field' => 'object_id', + 'label' => 'Object ID', + 'default_value' => 0, + 'format' => '%d', + 'mysql_type' => 'BIGINT', + 'mysql_length' => 11, + 'mysql_unsigned' => true, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'action_group' => array( + 'field' => 'action_group', + 'label' => 'Object Type', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '150', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'response' => array( + 'field' => 'response', + 'label' => 'Response', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'TEXT', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + + 'type' => 'array', + 'encoder' => 'json', + ), + + + 'date_created' => array( + 'field' => 'date_created', + 'label' => 'Date Created', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => true, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_modified' => array( + 'field' => 'date_modified', + 'label' => 'Date Modified', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => true, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_queued' => array( + 'field' => 'date_queued', + 'label' => 'Date Queued', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => true, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_processed' => array( + 'field' => 'date_processed', + 'label' => 'Date Processed', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => true, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'process_batch_token' => array( + 'field' => 'process_batch_token', + 'label' => 'Process Batch Token', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '50', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_completed' => array( + 'field' => 'date_completed', + 'label' => 'Date Completed', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => true, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + ); + + public function get_items_permissions_check( $request ) { + return false; + } + public function get_item_permissions_check( $request ) { + return false; + } + public function create_item_permissions_check( $request ) { + return false; + } + public function update_item_permissions_check( $request ) { + return false; + } + public function delete_item_permissions_check( $request ) { + return false; + } + +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-db-model.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-db-model.php new file mode 100644 index 0000000..dea87d1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-db-model.php @@ -0,0 +1,1328 @@ +<?php +abstract class TD_DB_Model extends TD_API_Model { + /** + * The db prefix/namespace (in addition to wp_ wpdb prefix) + * + * @access protected + * @since 0.0.2 + */ + protected $db_namespace = 'td'; + + /** + * The name of this item + * + * @access protected + * @since 0.0.2 + */ + protected $slug = false; + + /** + * The plural name of this item + * + * @access protected + * @since 0.0.2 + */ + protected $pluralized_slug = false; + + /** + * The name of our database table + * + * @access protected + * @since 0.0.2 + */ + protected $table_name; + + /** + * The version of our database table + * + * @access protected + * @since 0.0.2 + */ + protected $version; + + /** + * The name of the primary field + * + * @access protected + * @since 0.0.2 + */ + protected $primary_key = 'id'; + + /** + * The name of the field used as a post_id foreign key + * + * @access protected + * @since 0.0.2 + */ + protected $post_id_field = false; + + /** + * Default caching method + * + * @access protected + * @since 0.0.2 + */ + protected $cache_method = false; + + /** + * Default caching timeout (ignored with postmeta) + * + * @access protected + * @since 0.0.2 + */ + protected $cache_timeout = 0; + + /** + * Get things started + * + * @access public + * @since 0.0.2 + */ + public function __construct( $plugin ) { + parent::__construct( $plugin ); + + if ( empty( $this->slug ) ) { + die( 'define $this->slug in ' . get_class( $this ) ); // phpcs:ignore + } + if ( empty( $this->primary_key ) ) { + die( 'define $this->primary_key in ' . get_class( $this ) ); // phpcs:ignore + } + if ( empty( $this->get_schema() ) ) { + die( 'define $this->get_schema() in ' . get_class( $this ) ); // phpcs:ignore + } + + $this->plugin = $plugin; + $this->db_hooks(); + } + + public function db_hooks() { + $this->maybe_create_table(); + add_filter( 'query_'.$this->slug.'_db_where_conditions', array( $this, 'filter_where_conditions' ), 10, 2 ); + } + + public function filter_where_conditions( $where, $args ) { + return $where; + } + + public function belongs_to() { + return array(); + } + + public function has_many() { + return array(); + } + + public function get_schema() { + $schema = $this->schema; + + if ( empty( $schema[$this->primary_key] ) ) { + $default_schema = array( + $this->primary_key => array( + 'field' => $this->primary_key, + 'label' => 'ID', + 'default_value' => false, + 'format' => '%d', + 'mysql_type' => 'BIGINT', + 'mysql_length' => 20, + 'mysql_unsigned' => true, + 'mysql_allow_null' => false, + 'mysql_extra' => 'AUTO_INCREMENT', + 'cache_key' => false, + ), + ); + + $schema = array_merge( $default_schema, $schema ); + } + + return $schema; + } + + public function get_table_name() { + if ( !empty( $this->table_name ) ) { + return $this->table_name; + } + global $wpdb; + $this->table_name = $wpdb->prefix; + if ( !empty( $this->db_namespace ) ) { + $this->table_name .= $this->db_namespace . '_'; + } + + $this->table_name .= $this->get_pluralized_slug(); + + return $this->table_name; + } + + public function get_pluralized_slug() { + if ( !empty( $this->pluralized_slug ) ) { + return $this->pluralized_slug; + } + + $this->pluralized_slug = $this->slug . 's'; + + return $this->pluralized_slug; + } + + /** + * Get fields and formats + * + * @access public + * @since 0.0.2 + */ + public function get_fields() { + $schema = $this->get_schema(); + return array_combine( + wp_list_pluck( $this->get_schema(), 'field' ), + wp_list_pluck( $this->get_schema(), 'format' ) + ); + } + + /** + * Get default field values + * + * @access public + * @since 0.0.2 + */ + public function get_field_defaults() { + $schema = $this->get_schema(); + $defaults = array_combine( + wp_list_pluck( $this->get_schema(), 'field' ), + wp_list_pluck( $this->get_schema(), 'default_value' ) + ); + + foreach ($defaults as $field => $value) { + if ( $value === false ) { + $defaults[$field] = ''; + } elseif ( $value === NULL ) { + $defaults[$field] = 'NULL'; + } + } + + return $defaults; + } + /** + * Retrieve a row by the primary key + * + * @access public + * @since 0.0.2 + * @return object + */ + public function db_get( $row_id, $recursive=0 ) { + global $wpdb; + $row = (array)$wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$this->get_table_name()} WHERE $this->primary_key = %s LIMIT 1;", $row_id ) ); + $row = $this->prepare_item_for_response( $row, $recursive ); + return $row; + } + + /** + * Retrieve a row by a specific field / value + * + * @access public + * @since 0.0.2 + * @return object + */ + public function db_get_by( $field, $row_id, $recursive=0 ) { + global $wpdb; + $sanitized_field = sanitize_key( esc_sql( $field ) ); + $row = (array)$wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$this->get_table_name()} WHERE $sanitized_field = %s LIMIT 1;", $row_id ) ); + $row = $this->prepare_item_for_response( $row, $recursive ); + return $row; + } + + /** + * Retrieve a specific field's value by the primary key + * + * @access public + * @since 0.0.2 + * @return string + */ + public function db_get_field( $field, $row_id ) { + global $wpdb; + $sanitized_field = sanitize_key( esc_sql( $field ) ); + return $wpdb->get_var( $wpdb->prepare( "SELECT $sanitized_field FROM {$this->get_table_name()} WHERE $this->primary_key = %s LIMIT 1;", $row_id ) ); + } + + /** + * Retrieve a specific field's value by the the specified field / value + * + * @access public + * @since 0.0.2 + * @return string + */ + public function db_get_field_by( $field, $field_where, $field_value ) { + global $wpdb; + $sanitized_field_where = sanitize_key( esc_sql( $field_where ) ); + $sanitized_field = sanitize_key( esc_sql( $field ) ); + return $wpdb->get_var( $wpdb->prepare( "SELECT $sanitized_field FROM {$this->get_table_name()} WHERE $sanitized_field_where = %s LIMIT 1;", $field_value ) ); + } + + public function get_meta_foreign_key(){ + return str_replace("_meta", "", $this->slug."_id"); + } + + /** + * @param int $foreign_id + * @param array $meta_data + */ + public function bulk_meta_update ( $foreign_id, $meta_data ){ + foreach( $meta_data as $meta_key => $meta_value ){ + $this->update_meta( $foreign_id, $meta_key, $meta_value ); + } + } + + /** + * @param int $foreign_id + */ + public function bulk_meta_delete ( $foreign_id ){ + $foreign_key = $this->get_meta_foreign_key(); + $this->bulk_delete( + array( + $foreign_key => $foreign_id, + ) + ); + } + + /** + * @param int $foreign_id + * @param string $meta_key + * @param mixed $meta_value + */ + public function update_meta ( $foreign_id, $meta_key, $meta_value ){ + $this->delete_meta( $foreign_id, $meta_key ); + $this->add_meta( $foreign_id, $meta_key, $meta_value ); + } + + /** + * @param int $foreign_id + * @param string $meta_key + */ + public function delete_meta ( $foreign_id, $meta_key ){ + $foreign_key = $this->get_meta_foreign_key(); + $this->bulk_delete( + array( + $foreign_key => $foreign_id, + 'meta_key' => $meta_key, + ) + ); + } + + /** + * @param int $foreign_id + * @param string $meta_key + * @param mixed $meta_value + */ + public function add_meta ( $foreign_id, $meta_key, $meta_value ){ + $foreign_key = $this->get_meta_foreign_key(); + if( is_wp_error( $meta_value ) ){ + ssa_debug_log("Attempted to insert WP_ERROR meta value: " . $meta_value->get_error_message(), 10 ); + $meta_value = ''; + } + $meta_record = array( + $foreign_key => $foreign_id, + 'meta_key' => $meta_key, + 'meta_value' => isset($meta_value['meta_value']) ? $meta_value['meta_value'] : $meta_value, + ); + + if( isset( $meta_value['meta_value_before'] ) ) { + $meta_record['meta_value_before'] = $meta_value['meta_value_before']; + } + + $this->insert( $meta_record ); + } + + /** + * Insert a new row + * + * @access public + * @since 0.0.2 + * @return int + */ + public function db_insert( $data, $type = '' ) { + $data = $this->prepare_item_for_database( $data ); + + global $wpdb; + $schema = $this->get_schema(); + if ( empty( $type ) ) { + $type = $this->slug; + } + + // Set default values + $data = array_merge( $this->get_field_defaults(), $data ); + if ( isset( $data[$this->primary_key] ) && empty( $data[$this->primary_key] ) ) { + unset( $data[$this->primary_key] ); + } + + if ( !empty( $schema['author_id'] ) ) { + $author_id = get_current_user_id(); + if( empty( $data['author_id'] ) || !current_user_can( 'manage_options' ) ) { + $data['author_id'] = $author_id; + } + } + + if ( !empty( $schema['date_created'] ) && empty( $data['date_created'] ) ) { + $data['date_created'] = gmdate('Y-m-d H:i:s' ); + } + if ( !empty( $schema['date_modified'] ) && empty( $data['date_modified'] ) ) { + $data['date_modified'] = gmdate('Y-m-d H:i:s' ); + } + + // do_action( $this->db_namespace.'_pre_insert_' . $type, $data ); + + // Initialise field format array + $field_formats = $this->get_fields(); + + // Force fields to lower case + $data = array_change_key_case( $data ); + + // White list fields + $data = array_intersect_key( $data, $field_formats ); + + // Reorder $field_formats to match the order of fields given in $data + $data_keys = array_keys( $data ); + $field_formats = array_merge( array_flip( $data_keys ), $field_formats ); + + $wpdb->insert( $this->get_table_name(), $data, $field_formats ); + + // do_action( $this->db_namespace.'_post_insert_' . $type, $wpdb->insert_id, $data ); + + $data[$this->primary_key] = $wpdb->insert_id; + + return $data[$this->primary_key]; + } + + /** + * Insert a new row + * + * @access public + * @since 0.0.2 + * @return int + */ + public function db_raw_insert( $data, $type = '' ) { + $raw_data = $data; + $data = $this->prepare_item_for_database( $data ); + if ( ! empty( $raw_data[$this->primary_key] ) ) { + $data[$this->primary_key] = $raw_data[$this->primary_key]; + } + + global $wpdb; + $schema = $this->get_schema(); + if ( empty( $type ) ) { + $type = $this->slug; + } + + // Set default values + $data = array_merge( $this->get_field_defaults(), $data ); + if ( isset( $data[$this->primary_key] ) && empty( $data[$this->primary_key] ) ) { + unset( $data[$this->primary_key] ); + } + + if ( !empty( $schema['author_id'] ) ) { + $author_id = get_current_user_id(); + if( empty( $data['author_id'] ) || !current_user_can( 'manage_options' ) ) { + $data['author_id'] = $author_id; + } + } + + if ( !empty( $schema['date_created'] ) && empty( $data['date_created'] ) ) { + $data['date_created'] = gmdate('Y-m-d H:i:s' ); + } + if ( !empty( $schema['date_modified'] ) && empty( $data['date_modified'] ) ) { + $data['date_modified'] = gmdate('Y-m-d H:i:s' ); + } + + // do_action( $this->db_namespace.'_pre_insert_' . $type, $data ); + + // Initialise field format array + $field_formats = $this->get_fields(); + + // Force fields to lower case + $data = array_change_key_case( $data ); + + // White list fields + $data = array_intersect_key( $data, $field_formats ); + + // Reorder $field_formats to match the order of fields given in $data + $data_keys = array_keys( $data ); + $field_formats = array_merge( array_flip( $data_keys ), $field_formats ); + + $wpdb->insert( $this->get_table_name(), $data, $field_formats ); + + // do_action( $this->db_namespace.'_post_insert_' . $type, $wpdb->insert_id, $data ); + + $data[$this->primary_key] = $wpdb->insert_id; + + return $data[$this->primary_key]; + } + + /** + * Bulk Insert new rows + * + * @access public + * @since 0.0.2 + * @return int + */ + public function db_bulk_insert( $array_of_data, $type = '' ) { + if ( empty( $array_of_data ) ) { + return; + } + $value_rows = array(); + global $wpdb; + foreach ($array_of_data as $data) { + $data = $this->prepare_item_for_database( $data ); + $schema = $this->get_schema(); + if ( empty( $type ) ) { + $type = $this->slug; + } + + // Set default values + $data = array_merge( $this->get_field_defaults(), $data ); + unset( $data[$this->primary_key] ); + + if ( !empty( $schema['author_id'] ) ) { + $author_id = get_current_user_id(); + if( empty( $data['author_id'] ) || !current_user_can( 'manage_options' ) ) { + $data['author_id'] = $author_id; + } + } + + if ( !empty( $schema['date_created'] ) && empty( $data['date_created'] ) ) { + $data['date_created'] = gmdate('Y-m-d H:i:s' ); + } + if ( !empty( $schema['date_modified'] ) && empty( $data['date_modified'] ) ) { + $data['date_modified'] = gmdate('Y-m-d H:i:s' ); + } + + // do_action( $this->db_namespace.'_pre_insert_' . $type, $data ); + + // Initialise field format array + $field_formats = $this->get_fields(); + + // Force fields to lower case + $data = array_change_key_case( $data ); + + // White list fields + $data = array_intersect_key( $data, $field_formats ); + + // Reorder $field_formats to match the order of fields given in $data + $data_keys = array_keys( $data ); + $field_formats = array_merge( array_flip( $data_keys ), $field_formats ); + $data_formats = array_intersect_key( $field_formats, $data ); + $value_rows[] = $wpdb->prepare( '('.implode( ',', $data_formats ).')', $data ); + } + + $table = $this->get_table_name(); + $fields = '`' . implode( '`, `', $data_keys ) . '`'; + $formats = implode( ', ', $field_formats ); + $values_csv = implode( ",\n", $value_rows ); + $sql = "INSERT INTO `$table` ($fields) VALUES $values_csv"; + $wpdb->get_results( $sql ); + // do_action( $this->db_namespace.'_post_insert_' . $type, $wpdb->insert_id, $data ); + + return $wpdb->insert_id; + } + + public function get_unique_slug( $title, $row_id = false ) { + if ( empty( $this->schema['slug'] ) ) { + return $title; + } + + $slug = str_replace('%', '', trim( sanitize_title( $title ) ) ); + + $is_unique = false; + $original_slug = $slug; + $int_to_try_appending = 2; + $already_appended = array(); + while ( $is_unique === false ) { + $query_by_slug = $this->db_query( array( + 'slug' => $slug, + ) ); + + if ( empty( $query_by_slug ) ) { + $is_unique = true; + } elseif ( count( $query_by_slug ) === 1 && $query_by_slug['0']['id'] == $row_id ) { + $is_unique = true; + } + + if ( $is_unique ) { + continue; + } + + $slug = $original_slug.'-'.$int_to_try_appending; + $int_to_try_appending++; + if ( $int_to_try_appending > 20) { + $int_to_try_appending = rand( 21, 100 ); + } + } + + return $slug; + } + + public function prepare_item_for_database( $params ) { + $schema = $this->get_schema(); + + $field_defaults = $this->get_field_defaults(); + $params = shortcode_atts( $field_defaults, $params ); + + foreach ($schema as $schema_key => $schema_field) { + if ( isset( $params[$schema_key] ) && !empty( $schema_field['encoder'] ) && $schema_field['encoder'] === 'json' ) { + $params[$schema_key] = json_encode( $params[$schema_key] ); + } else if ( isset( $params[$schema_key] ) && !empty( $schema_field['encoder'] ) && $schema_field['encoder'] === 'json_serialize' ) { + if ( is_array( $params[$schema_key] ) ) { + $params[$schema_key] = json_encode( $params[$schema_key] ); + } + } + if ( $schema_key === 'slug' ) { + $id = false; + if ( !empty( $params['id'] ) ) { + $id = $params['id']; + } + + if ( !empty( $params[$schema_key] ) ) { + // when doing re-ordering, we don't pass the ID and we don't want to change the slug. + if ( !empty( $id ) ) { + $params[$schema_key] = $this->get_unique_slug( $params[$schema_key], $id ); + } else { + $params[$schema_key] = str_replace('%', '', trim( sanitize_title( $params[$schema_key] ) ) ); + } + } else { + if ( !empty( $params['title'] ) ) { + $slug = trim( $params['title'] ); + } else { + $slug = 'Untitled'; + } + + if ( !empty( $id ) ) { + $me = $this->db_get( $id ); + if ( !empty( $me['slug'] ) ) { + $slug = $me['slug']; + } + } + + $params[$schema_key] = $this->get_unique_slug( $slug, $id ); + } + + } + } + + if (isset( $params[$this->primary_key] ) ) { + unset( $params[$this->primary_key] ); + } + + if (isset( $params['1'] ) ) { + unset( $params['1'] ); + } + + return $params; + } + + public function prepare_item_for_response( $item, $recursive=0 ) { + if ( $recursive > 0 ) { + $item = $this->prepare_belongs_to_relationship( $item, $recursive ); + $item = $this->prepare_has_many_relationship( $item, $recursive ); + } + + foreach ($this->get_schema() as $schema_key => $schema_field) { + if ( !empty( $item[$schema_key] ) && !empty( $schema_field['encoder'] ) && $schema_field['encoder'] === 'json' ) { + if ( is_string( $item[$schema_key] ) ) { + $item[$schema_key] = json_decode( $item[$schema_key], true ); + } + } else if ( !empty( $item[$schema_key] ) && !empty( $schema_field['encoder'] ) && $schema_field['encoder'] === 'json_serialize' ) { + if ( is_string( $item[$schema_key] ) ) { + if ( 0 === strpos( $item[$schema_key], '{' ) || 0 === strpos( $item[$schema_key], '[' ) ) { + // this is an array value + $item[$schema_key] = json_decode( $item[$schema_key], true ); + } + } + } + } + + // if ( $recursive > 0 ) { + // $item = $this->add_computed_values_to_response( $item, $item[$this->primary_key], $recursive - 1 ); + // } + + if ( ! empty( $item[$this->primary_key] ) ) { + $item = apply_filters( $this->namespace_wp_hook( 'prepare_item_for_response' ), $item, $item[$this->primary_key], $recursive ); + } + + return $item; + } + + public function prepare_collection_for_response( $items, $recursive=0 ) { + $prepared_items = array(); + foreach ($items as $key => $item) { + $prepared_items[$key] = $this->prepare_item_for_response( $item ); + } + + return $prepared_items; + } + + public function cache_set( $data, $field ) { + if ( empty( $field['cache_key'] ) ) { + return false; + } + if ( empty( $field['cache_method'] ) ) { + $field['cache_method'] = $this->cache_method; + } + + if ( empty( $field['cache_method'] ) ) { + return false; + } + + $method = 'cache_set_'.$field['cache_method']; + if ( !method_exists( $this, $method ) ) { + return false; + } + + return $this->$method( $field, $data ); + } + + public function cache_get( $field, $uid ) { + if ( empty( $field['cache_key'] ) ) { + return false; + } + if ( empty( $field['cache_method'] ) ) { + $field['cache_method'] = $this->cache_method; + } + + if ( empty( $field['cache_method'] ) ) { + return false; + } + + $method = 'cache_get_'.$field['cache_method']; + if ( !method_exists( $this, $method ) ) { + return false; + } + + return $this->$method( $field, $data ); + } + + + public function cache_set_postmeta( $field, $data ) { + if ( empty( $data[$this->post_id_field] ) ) { + return false; // we can't cache to postmeta without post_id + } + + update_post_meta( + $data[$this->post_id_field], + $this->get_unique_cache_key( $field, $data ), + $data[$field['field']] + ); + + return true; + } + + public function cache_get_postmeta( $field, $uid ) { + return get_post_meta( + $uid, + $this->get_unique_cache_key( $field, $data ), + true + ); + } + + public function get_unique_cache_key( $field, $data ) { + if ( $field['cache_method'] === 'postmeta' ) { + return $field['cache_key']; + } + + $unique_cache_key = 'cache_' + .$this->get_table_name() + .'_' + .$this->primary_key + .'_' + .$data[$this->primary_key] + .'_' + .$field['cache_key']; + + return $unique_cache_key; + } + /** + * Update a row + * + * @access public + * @since 0.0.2 + * @return bool + */ + public function db_update( $row_id, $data = array() ) { + $prepared_data = $this->prepare_item_for_database( $data ); // works for creating, not updating yet + $data = shortcode_atts( $data, $prepared_data ); + if ( !empty( $data[$this->primary_key] ) ) { + unset( $data[$this->primary_key] ); + } + + global $wpdb; + + // Row ID must be positive integer + $row_id = absint( $row_id ); + + if( empty( $row_id ) ) { + return false; + } + + if( empty( $where ) ) { + $where = $this->primary_key; + } + + // Initialise field format array + $field_formats = $this->get_fields(); + + // Force fields to lower case + $data = array_change_key_case( $data ); + + // White list fields + $data = array_intersect_key( $data, $field_formats ); + + if ( !empty( $this->schema['date_modified'] ) && empty( $data['date_modified'] ) ) { + $data['date_modified'] = gmdate('Y-m-d H:i:s' ); + } + + // Reorder $field_formats to match the order of fields given in $data + $data_keys = array_keys( $data ); + $field_formats = array_merge( array_flip( $data_keys ), $field_formats ); + $field_formats = shortcode_atts( $data, $field_formats ); + + if ( false === $wpdb->update( $this->get_table_name(), $data, array( $where => $row_id ), $field_formats ) ) { + // this should never happen, we failed to update a row + ssa_debug_log( 'Failed to update row in ' . $this->get_table_name() . ' with ID: ' . $row_id ."\n" . ssa_get_stack_trace() . "wpdb last_error: " . $wpdb->last_error, 10); + return false; + } + + return true; + } + + /** + * Delete a row identified by the primary key + * + * @access public + * @since 0.0.2 + * @return bool + */ + public function db_delete( $row_id = 0, $force_delete=false ) { + + global $wpdb; + + // Row ID must be positive integer + $row_id = absint( $row_id ); + if( empty( $row_id ) && $row_id !== 0 ) { + return false; + } + + $should_delete = false; + + $schema = $this->get_schema(); + if ( !empty( $force_delete ) || empty( $schema['status']['supports']['trash'] ) ) { + $should_delete = true; + } + + // TODO: Implement trash support (status ->delete if trash, else status ->trash) + + if ( $should_delete ) { + if ( !empty( $schema['status']['supports']['soft_delete'] ) ) { + $data = array( $schema['status']['field'] => 'delete', ); + if ( false === $wpdb->update( $this->get_table_name(), $data, array( $this->primary_key => $row_id ) ) ) { + return false; + } + } else { + if ( false === $wpdb->query( $wpdb->prepare( "DELETE FROM {$this->get_table_name()} WHERE $this->primary_key = %d", $row_id ) ) ) { + return false; + } + } + + return true; + } + + + return true; + } + + /** + * Delete a row identified by the primary key + * + * @access public + * @since 0.0.2 + * @return bool + */ + public function db_bulk_delete( $args=array() ) { + global $wpdb; + + if( empty( $args ) ) { + return false; + } + + $query = "DELETE FROM {$this->get_table_name()} WHERE 1=1"; + $query .= $this->filter_where_conditions( $this->db_where_conditions( $args ), $args ); + // foreach ($args as $key => $value) { + // $query = $wpdb->prepare( $query .= " AND ".$key." = %s", $value ); + // } + + $result = $wpdb->query( $query ); + if ( false === $result ) { + return false; + } + + return $result; + } + + /** + * Truncate a table and resets the auto increment values. + * + * @access public + * @since 0.0.3 + * @return void + */ + public function truncate() { + global $wpdb; + $query = "TRUNCATE TABLE {$this->get_table_name()}"; + $result = $wpdb->query( $query ); + + return $result; + } + + /** + * Truncate a table and resets the auto increment values. + * + * @access public + * @since 0.0.3 + * @return void + */ + public function drop() { + global $wpdb; + $query = "DROP TABLE IF EXISTS {$this->get_table_name()}"; + $result = $wpdb->query( $query ); + + return $result; + } + + /** + * Check if the given table exists + * + * @since 2.4 + * @param string $table The table name + * @return bool If the table name exists + */ + public function table_exists( $table ) { + global $wpdb; + $table = sanitize_text_field( $table ); + + return $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE '%s'", $table ) ) === $table; + } + + public function maybe_create_table() { + if ( empty( $this->get_table_name() ) ) { + return false; + } + if ( empty( $this->get_version() ) ) { + return false; + } + + $db_version = get_option( $this->get_table_name() . '_db_version', '0.0.0' ); + if ( !empty( $this->get_dev_mode() ) || version_compare( $db_version, $this->get_version(), '<' ) ) { + $this->create_table(); + } + + } + + /** + * Create the table + * + * @access public + * @since 0.0.2 + */ + public function create_table() { + $schema = $this->get_schema(); + if ( empty( $schema ) ) { + return; + } + + global $wpdb; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + + $update_queries = array(); + $sql = "CREATE TABLE " . $this->get_table_name() . " (\n"; + foreach ($schema as $key => $field) { + // Skip any fields with empty or missing field names + if ( ! is_array( $field ) || empty( $field['field'] ) || empty( $field['mysql_type'] ) ) { + error_log( 'SSA: Skipping invalid schema field in table `' . $this->get_table_name() . '`: ' . var_export( $field, true ) ); + continue; + } + + $new_line = $field['field'] . ' '; + $new_line .= $field['mysql_type']; + if ( !empty( $field['mysql_length'] ) ) { + $new_line .= '('.(int)$field['mysql_length'].')'; + } + $new_line .= ' '; + if ( !empty( $field['mysql_unsigned'] ) ) { + $new_line .= 'UNSIGNED '; + } + if ( empty( $field['mysql_allow_null'] ) ) { + $new_line .= 'NOT NULL '; + } + if ( $field['default_value'] !== false ) { + if($field['mysql_type'] !== 'TINYTEXT' && $field['mysql_type'] !== 'TEXT') { + if ($field['default_value'] === NULL ) { + $new_line .= 'DEFAULT NULL '; + } else { + $new_line .= "DEFAULT '".$field['default_value']."'"; + } + } else { + $default_value = $field['default_value']; + if ( is_array( $default_value ) ) { + $default_value = json_encode( $default_value ); + } + $update_queries[] = "UPDATE " . $this->get_table_name() . " SET $key = '". $default_value ."' WHERE $key = ''; "; + } + } + if ( !empty( $field['mysql_extra'] ) ) { + $new_line .= $field['mysql_extra']; + } + $sql .= trim($new_line).", \n"; + } + $sql .= "PRIMARY KEY (`".$this->primary_key."`)"; + foreach ($this->indexes as $key => $fields) { + // Skip any indexes with invalid keys (but allow numeric 0) or empty field arrays + if ( $key === '' || $key === null || empty( $fields ) || ! is_array( $fields ) ) { + error_log( 'SSA: Skipping invalid index in table `' . $this->get_table_name() . '`: key=' . var_export( $key, true ) ); + continue; + } + $sql .= ",\n KEY `".$key."` (".implode( ',',$fields).")"; + } + + $sql .= " ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; + $sql .= " COMMENT='Created with schema v".$this->get_version()." (".current_time( 'mysql', true ).")'"; + // $sql .= " ROW_FORMAT=DYNAMIC"; // not necessary if we have smaller indexes + $sql .= ";"; + + ob_start(); + $dbdelta_response = @dbDelta( $sql ); + $errors = ob_get_clean(); + $last_query = $wpdb->last_query; + $last_error = $wpdb->last_error; + + $confirm_query = 'DESCRIBE ' . $this->get_table_name(); + $confirm_results = $wpdb->get_results( $confirm_query ); + if ( empty( $wpdb->last_error ) ) { + update_option( $this->get_table_name() . '_db_version', $this->get_version() ); + foreach ($update_queries as $query) { + $wpdb->query($query); + $last_query = $wpdb->last_query; + $last_error = $wpdb->last_error; + if ( empty( $wpdb->last_error ) ) { + continue; + } + error_log( 'Failed to update default values of table `'.$this->get_table_name().'`' ); + error_log( 'last_query: ' . $last_query ); + error_log( 'last_error: ' . $last_error ); + } + return true; + } + + error_log( 'Failed to create table `'.$this->get_table_name().'`' ); + error_log( 'last_query: ' . $last_query ); + error_log( 'last_error: ' . $last_error ); + error_log( 'dbdelta error: ' . print_r( $dbdelta_response, true ) ); // phpcs:ignore + } + + public function db_where_conditions( $args ) { + global $wpdb; + $where = ''; + $schema = $this->get_schema(); + + // we allow append_where_sql to be set in the backend, but not in the request parameters + if ( ! empty( $args['append_where_sql'] ) ) { + // confirm not coming from request params or body + // also check file_get_contents('php://input'); + $input_raw = file_get_contents('php://input'); + $input_json = json_decode($input_raw, true) ?? []; + $found_in_payload = ( + isset($_REQUEST['append_where_sql']) || + isset($_FILES['append_where_sql']) || + isset($input_json['append_where_sql']) + ); + + // only append the where sql if it's not coming from the request params or body, to prevent potential sql injection + if( ! $found_in_payload ) { + if( ! is_array( $args['append_where_sql'] ) ) { + $args['append_where_sql'] = array( $args['append_where_sql'] ); + } + + foreach ($args['append_where_sql'] as $where_sql) { + $where .= $where_sql; + } + } + } + + if( ! empty( $args['id'] ) ) { + + if( is_array( $args['id'] ) ) { + $ids = implode( ',', array_map('intval', $args['id'] ) ); + } else { + $ids = intval( $args['id'] ); + } + $where .= " AND `".$this->primary_key."` IN( $ids ) "; + + } + + if ( !empty( $schema['author_id'] ) ) { + // rows for specific user actions + if( ! empty( $args['author_id'] ) ) { + + if( is_array( $args['author_id'] ) ) { + $author_ids = implode( ',', array_map('intval', $args['author_id'] ) ); + } else { + $author_ids = intval( $args['author_id'] ); + } + + $where .= " AND `author_id` IN( $author_ids ) "; + + } + } + + // specific rows by name + if ( !empty( $schema['slug'] ) ) { + if( ! empty( $args['slug'] ) ) { + $where .= $wpdb->prepare( " AND `slug` = '" . '%s' . "' ", $args['slug'] ); + } + } + + // specific rows by name + if ( !empty( $schema['status'] ) ) { + if( ! empty( $args['status'] ) ) { + if ( is_array( $args['status'] ) ) { + $where .= ' AND ('; + foreach ($args['status'] as $key => $status) { + $where .= $wpdb->prepare( "`status` = '" . '%s' . "' ", $status ); + if ( $key + 1 < count( $args['status'] ) ) { + $where .= 'OR '; + } + } + $where .= ') '; + } else { + $where .= $wpdb->prepare( " AND `status` = '" . '%s' . "' ", $args['status'] ); + } + } + } + + + // specific rows by name + if ( !empty( $schema['type'] ) ) { + if( ! empty( $args['type'] ) ) { + $where .= $wpdb->prepare( " AND `type` = '" . '%s' . "' ", $args['type'] ); + } + } + + + // specific rows by name + if ( !empty( $schema['name'] ) ) { + if( ! empty( $args['name'] ) ) { + $where .= $wpdb->prepare( " AND `name` = '" . '%s' . "' ", $args['name'] ); + } + } + + if ( !empty( $schema['date_created'] ) ) { + // Customers created for a specific date or in a date range + if( ! empty( $args['date_created'] ) ) { + + if( !is_array( $args['date_created'] ) ) { + + $year = gmdate( 'Y', strtotime( $args['date_created'] ) ); + $month = gmdate( 'm', strtotime( $args['date_created'] ) ); + $day = gmdate( 'd', strtotime( $args['date_created'] ) ); + + $where .= " AND $year = YEAR ( date_created ) AND $month = MONTH ( date_created ) AND $day = DAY ( date_created )"; + } + + } else { + + if( ! empty( $args['date_created_min'] ) && false !== strtotime( $args['date_created_min'] ) ) { + $where .= $wpdb->prepare( " AND `date_created` >= '" . '%s' . "' ", $args["date_created_min"] ); + } + + if( ! empty( $args['date_created_max'] ) && false !== strtotime( $args['date_created_max'] ) ) { + $where .= $wpdb->prepare( " AND `date_created` <= '" . '%s' . "' ", $args["date_created_max"] ); + } + + } + } + + return $where; + } + + /** + * Retrieve rows from the database + * + * @access public + * @since 0.0.2 + */ + public function db_query( $args = array() ) { + + global $wpdb; + + $defaults = array( + 'number' => 100000, + 'offset' => 0, + 'orderby' => $this->primary_key, + 'order' => 'DESC', + 'recursive' => 0, + 'fetch' => array(), + 'fields' => array(), + ); + + $schema = $this->get_schema(); + if ( ! empty( $schema['display_order'] ) ) { + $defaults['orderby'] = $schema['display_order']['field']; + $defaults['order'] = 'ASC'; + } + + $args = wp_parse_args( $args, $defaults ); + + if( $args['number'] < 1 ) { + $args['number'] = 999999999999; + } + + $where = ' WHERE 1=1'; + + $where .= $this->db_where_conditions( $args ); + $where = apply_filters( 'query_'.$this->slug.'_db_where_conditions', $where, $args ); + + $args['orderby'] = ! array_key_exists( $args['orderby'], $this->get_fields() ) ? $this->primary_key : $args['orderby']; + + // $cache_key = 'spdb_'.md5( $this->db_namespace.$this->get_table_name().'_rows_' . serialize( $args ) ); + + // $rows = wp_cache_get( $cache_key, 'rows' ); + + $sanitized_orderby = sanitize_key(esc_sql( $args['orderby'] )); + $sanitized_order = 'ASC' === strtoupper( esc_sql( $args['order'] ) ) ? 'ASC' : 'DESC'; + $table_name = $this->get_table_name(); + + if ( empty( $args['fields'] ) ) { + $fields = '*'; + } else { + $valid_fields = array_keys( $this->get_fields() ); + $requested = array_map( 'sanitize_key', (array) $args['fields'] ); + $safe_fields = array_intersect( $requested, $valid_fields ); + $fields = empty( $safe_fields ) ? '*' : '`' . implode( '`, `', $safe_fields ) . '`'; + } + + // if( $rows === false ) { + $sql = $wpdb->prepare( "SELECT $fields FROM $table_name $where ORDER BY $sanitized_orderby $sanitized_order LIMIT %d,%d;", absint( $args['offset'] ), absint( $args['number'] ) ); + $rows = $wpdb->get_results( $sql ); + $rows = array_map( function($row) { return (array)$row; }, $rows ); + // } + + if ( !empty( $args['calc_date_created_time_ago'] ) ) { + foreach ($rows as $key => $row) { + $rows[$key]['date_created_time_ago'] = human_time_diff( strtotime( $row['date_created'] ) ); + } + } + + if ( empty( $args['fields'] ) ) { + foreach ($rows as $key => $value) { + $rows[$key] = $this->prepare_item_for_response( $value, $args['recursive'] ); + if ( ! empty( $args['fetch'] ) ) { + $rows[$key] = $this->add_computed_values_to_response( $rows[$key], $rows[$key][$this->primary_key], (int)$args['recursive'] - 1, $args['fetch'] ); + } + } + } + + // wp_cache_set( $cache_key, $rows, 'rows', 60 ); + return $rows; + + } + + public function bulk_meta_query( $args=array() ) { + global $wpdb; + + if ( empty( $args['field'] ) ) { + return false; + } + + $schema = $this->get_schema(); + + $defaults = array( + 'field' => '', + 'post_type' => '', + $this->post_id_field => '', + $this->post_id_field.'s' => '', + 'author_id' => '', + ); + $args = shortcode_atts( $defaults, $args ); + + if ( empty( $schema[$args['field']]['cache_key'] ) ) { + $meta_key = $args['field']; + } else { + $meta_key = $schema[$args['field']]['cache_key']; + } + + $where = 'WHERE meta_key="'.$meta_key.'"'; + if ( !empty( $args['post_type'] ) ) { + $where .= $wpdb->prepare( ' AND post_type=%s', esc_attr( $args['post_type'] ) ); + } + $where .= $this->db_where_conditions( $args ); + $rows = $wpdb->get_results( $wpdb->prepare( "SELECT post_id as ".$this->post_id_field.",meta_value as ".$args['field'].",post_type,post_title,post_name FROM $wpdb->postmeta INNER JOIN $wpdb->posts on $wpdb->posts.ID=$wpdb->postmeta.post_id $where", null ) ); + if ( empty( $rows ) ) { + return false; + } + + $data = array(); + foreach ($rows as $key => $row) { + $data[$row->{$this->post_id_field}] = (array)$row; + } + return $data; + } + + /** + * Count the total number of rows in the database + * + * @access public + * @since 0.0.2 + */ + public function count( $args = array() ) { + + global $wpdb; + + $defaults = array( + 'number' => 20, + 'offset' => 0, + 'orderby' => $this->primary_key, + 'order' => 'DESC' + ); + + $args = wp_parse_args( $args, $defaults ); + + if( $args['number'] < 1 ) { + $args['number'] = 999999999999; + } + + $where = ' WHERE 1=1 '; + + $where .= $this->db_where_conditions( $args ); + + $where = apply_filters( 'query_'.$this->slug.'_db_where_conditions', $where, $args ); + $where = apply_filters( 'count_query_'.$this->slug.'_db_where_conditions', $where, $args ); + + $args['orderby'] = ! array_key_exists( $args['orderby'], $this->get_fields() ) ? $this->primary_key : $args['orderby']; + + // $cache_key = 'spdb_'.md5( $this->db_namespace.'_rows_count' . serialize( $args ) ); + + // $count = wp_cache_get( $cache_key, 'rows' ); + + // if( $count === false ) { + $count = $wpdb->get_var( "SELECT COUNT($this->primary_key) FROM " . $this->get_table_name() . "{$where};" ); + // wp_cache_set( $cache_key, $count, 'rows', 60 ); + // } + + return absint( $count ); + + } + + /** + * Check if the Customers table was ever installed + * + * @since 2.4 + * @return bool Returns if the rows table was installed and upgrade routine run + */ + public function installed() { + return $this->table_exists( $this->get_table_name() ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-hooks-model.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-hooks-model.php new file mode 100644 index 0000000..95e3504 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-hooks-model.php @@ -0,0 +1,200 @@ +<?php +abstract class TD_Hooks_Model extends TD_DB_Model { + protected $slug = 'hook'; + protected $version = '1.8.3'; + + /** + * Get things started + * + * @access public + * @since 0.0.2 + */ + public function __construct( $plugin ) { + parent::__construct( $plugin ); + + $this->hooks_hooks(); + } + + public function hooks_hooks() { + + } + + protected $indexes = array( + 'author_id' => [ 'author_id' ], + 'status' => [ 'status' ], + 'date_created' => [ 'date_created' ], + 'date_modified' => [ 'date_modified' ], + ); + + protected $schema = array( + 'author_id' => array( + 'field' => 'author_id', + 'label' => 'Author', + 'default_value' => 0, + 'format' => '%d', + 'mysql_type' => 'BIGINT', + 'mysql_length' => 11, + 'mysql_unsigned' => true, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'name' => array( + 'field' => 'name', + 'label' => 'Name', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '255', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'object' => array( + 'field' => 'object', + 'label' => 'Object', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '255', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'object_id' => array( + 'field' => 'object_id', + 'label' => 'Object ID', + 'default_value' => 0, + 'format' => '%d', + 'mysql_type' => 'BIGINT', + 'mysql_length' => 11, + 'mysql_unsigned' => true, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'object_type' => array( + 'field' => 'object_type', + 'label' => 'Object Type', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '255', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + 'object_data' => array( + 'field' => 'object_data', + 'label' => 'Object Data', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'TEXT', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + + 'type' => 'array', + 'encoder' => 'json', + ), + + 'date_created' => array( + 'field' => 'date_created', + 'label' => 'Date Created', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_modified' => array( + 'field' => 'date_modified', + 'label' => 'Date Modified', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_queued' => array( + 'field' => 'date_queued', + 'label' => 'Date Queued', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_processed' => array( + 'field' => 'date_processed', + 'label' => 'Date Processed', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'process_batch_token' => array( + 'field' => 'process_batch_token', + 'label' => 'Process Batch Token', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'VARCHAR', + 'mysql_length' => '50', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + 'date_dispatched' => array( + 'field' => 'date_dispatched', + 'label' => 'Date Dispatched', + 'default_value' => false, + 'format' => '%s', + 'mysql_type' => 'DATETIME', + 'mysql_length' => '', + 'mysql_unsigned' => false, + 'mysql_allow_null' => false, + 'mysql_extra' => '', + 'cache_key' => false, + ), + + ); + + public function get_items_permissions_check( $request ) { + return false; + } + public function get_item_permissions_check( $request ) { + return false; + } + public function create_item_permissions_check( $request ) { + return false; + } + public function update_item_permissions_check( $request ) { + return false; + } + public function delete_item_permissions_check( $request ) { + return false; + } + +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-model.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-model.php new file mode 100644 index 0000000..2366a96 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/class-td-model.php @@ -0,0 +1,380 @@ +<?php +/* don't extend TD_Model + * instead extend TD_DB_Model + */ +abstract class TD_Model { + protected $plugin; + protected $hook_namespace; + protected $dev_mode; + protected $version; + protected $computed_schema; + + public function get_primary_key() { + return $this->primary_key; + } + + public function __construct( $plugin ) { + $this->plugin = $plugin; + } + + public function get_version() { + if ( empty( $this->version ) ) { + $this->version = '0.0.0'; + } + + if ( !empty( $this->get_dev_mode() ) ) { + return $this->version . '.' . time(); + } + + return $this->version; + } + + public function get_dev_mode() { + if ( defined( 'TD_DEV_MODE' ) && TD_DEV_MODE ) { + return true; + } + + return $this->dev_mode; + } + + public function namespace_wp_hook( $custom_hook_name ) { + $tag = ''; + if ( !empty( $this->hook_namespace ) ) { + $tag .= $this->hook_namespace . '/'; + } + + $tag .= $this->slug . '/'; + + if ( !empty( $prefix ) ) { + $tag .= $prefix . '_'; + } + + $tag .= $custom_hook_name; + + return $tag; + } + + public function get_computed_schema() { + if ( !empty( $this->computed_schema ) || false === $this->computed_schema ) { + return $this->computed_schema; + } + } + + public function add_computed_values_to_response( $item, $item_id, $recursive, $fetch = array() ) { + $computed_schema = $this->get_computed_schema(); + if ( empty( $computed_schema ) ) { + return $item; + } + + if ( is_array( $computed_schema ) ) { + if ( empty( $computed_schema['fields'] ) ) { + return $item; + } + + foreach ($computed_schema['fields'] as $computed_field ) { + if ( $recursive <= 0 && empty( $fetch[$computed_field['name']] ) ) { + continue; + } + + if ( !empty( $computed_field['get_input'] ) ) { + $input = $computed_field['get_input']; + } elseif ( !empty( $computed_field['get_input_path'] ) && isset( $item[$computed_field['get_input_path']] ) ) { + $input = $item[$computed_field['get_input_path']]; + } else { + $input = null; + } + + $computed_value = call_user_func( $computed_field['get_function'], $input ); + $item[$computed_field['name']] = $computed_value; + } + } + + return $item; + } + + public function get( $row_id, $recursive=0 ) { + $tag = $this->namespace_wp_hook( 'before_get' ); + $row_id = apply_filters( $tag, $row_id, $recursive ); + + $item = $this->db_get( $row_id, $recursive ); + + $tag = $this->namespace_wp_hook( 'after_get' ); + $item = apply_filters( $tag, $item, $row_id, $recursive ); + + return $item; + } + + public function get_by( $field, $row_id, $recursive=0 ) { + return $this->db_get_by( $field, $row_id, $recursive ); + } + + public function get_field( $field, $row_id ) { + return $this->db_get_field( $field, $row_id ); + } + + public function get_field_by( $field, $field_where, $field_value ) { + return $this->db_get_field_by( $field, $field_where, $field_value ); + } + + public function query( $args=array() ) { + return $this->db_query( $args ); + } + + public function insert( $data, $type = '' ) { + $tag = $this->namespace_wp_hook( 'before_insert' ); + $data = apply_filters( $tag, $data, $type ); + + if ( ! empty( $data['error'] ) ) { + if ( ! current_user_can( 'ssa_manage_site_settings' ) && ! empty( $data['error']['admin_message'] ) ) { + unset( $data['error']['admin_message'] ); + } + + return array( + // 'error' => array( + // 'code' => '', + // 'message' => '', + // 'admin_message' => '' + // 'data' => array(), + // ), + 'error' => $data['error'], + ); + } + + $insert_id = $this->db_insert( $data, $type = '' ); + + if( isset( $data['meta_data'] ) ){ + // insert corresponding records into meta table + $this->plugin->{$this->slug.'_meta_model'}->bulk_meta_update( $insert_id, $data['meta_data'] ); + unset( $data['meta_data'] ); + } + + $tag = $this->namespace_wp_hook( 'after_insert' ); + do_action( $tag, $insert_id, $data ); + + return $insert_id; + } + + public function raw_insert( $data, $type = '' ) { + // $tag = $this->namespace_wp_hook( 'before_insert' ); + // $data = apply_filters( $tag, $data, $type ); + + $insert_id = $this->db_raw_insert( $data, $type = '' ); + + // $tag = $this->namespace_wp_hook( 'after_insert' ); + // do_action( $tag, $insert_id, $data ); + + return $insert_id; + } + + public function update( $row_id, $data = array() ) { + $tag = $this->namespace_wp_hook( 'before_update' ); + $data_before = $this->get( $row_id ); + $data = apply_filters( $tag, $data, $data_before, $row_id, $data ); + + if ( ! empty( $data['error'] ) ) { + if ( ! current_user_can( 'ssa_manage_site_settings' ) && ! empty( $data['error']['admin_message'] ) ) { + unset( $data['error']['admin_message'] ); + } + return $data; + } + + $response = $this->db_update( $row_id, $data ); + + if( isset( $data['meta_data'] ) ){ + // update corresponding records in meta table + $this->plugin->{$this->slug.'_meta_model'}->bulk_meta_update( $row_id, $data['meta_data'] ); + unset( $data['meta_data'] ); + } + + $tag = $this->namespace_wp_hook( 'after_update' ); + do_action( $tag, $row_id, $data, $data_before, $response ); + + return $response; + } + + public function raw_update( $row_id, $data = array() ) { + // $tag = $this->namespace_wp_hook( 'before_update' ); + // $data_before = $this->get( $row_id ); + // $data = apply_filters( $tag, $data, $data_before, $row_id, $data ); + + $response = $this->db_update( $row_id, $data ); + + // $tag = $this->namespace_wp_hook( 'after_update' ); + // do_action( $tag, $row_id, $data, $data_before, $response ); + + return $response; + } + + public function delete( $row_id = 0, $force_delete = false ) { + + $tag = $this->namespace_wp_hook( 'before_delete' ); + $row_id = apply_filters( $tag, $row_id, $force_delete ); + + if( empty( $row_id ) && $row_id !== 0 ){ + return; + } + + $response = $this->db_delete( $row_id, $force_delete ); + + // delete corresponding records in meta table + $this->plugin->{$this->slug.'_meta_model'}->bulk_meta_delete( $row_id ); + + $tag = $this->namespace_wp_hook( 'after_delete' ); + do_action( $tag, $row_id, $force_delete, $response ); + + return $response; + } + + public function prepare_belongs_to_relationship( $item, $recursive=0 ) { + if ( empty( $recursive ) ) { + return $item; + } + + if ( empty( $this->belongs_to() ) ) { + return $item; + } + + foreach ($this->belongs_to() as $relationship_key => $relationship ) { + $item[$relationship_key] = array(); + switch ( $relationship['model'] ) { + case 'WP_Post_Model': + $item = $this->prepare_wp_post_model( $item, $relationship_key, $relationship, $recursive - 1 ); + break; + + case 'WP_User_Model': + $item = $this->prepare_wp_user_model( $item, $relationship_key, $relationship, $recursive - 1 ); + break; + + default: + if ( empty( $relationship['model'] ) ) { + break; + } + + if ( !is_object( $relationship['model'] ) ) { + break; + } + + if ( !method_exists( $relationship['model'], 'get' ) ) { + break; + } + + if ( !method_exists( $relationship['model'], 'prepare_item_for_response' ) ) { + break; + } + + $item[$relationship_key] = $relationship['model']->get( $item[$relationship['foreign_key']], $recursive - 1 ); + + break; + } + } + + return $item; + } + + public function prepare_has_many_relationship( $item, $recursive=0 ) { + if ( empty( $recursive ) ) { + return $item; + } + + if ( empty( $this->has_many() ) ) { + return $item; + } + + foreach ($this->has_many() as $relationship_key => $relationship ) { + $item[$relationship_key] = array(); + switch ( $relationship['model'] ) { + case 'WP_Post_Model': + $this->prepare_wp_post_model( $item, $relationship_key, $relationship, $recursive - 1 ); + break; + + case 'WP_User_Model': + $this->prepare_wp_user_model( $item, $relationship_key, $relationship, $recursive - 1 ); + break; + + default: + if ( empty( $relationship['model'] ) ) { + break; + } + + if ( !is_object( $relationship['model'] ) ) { + break; + } + + if ( !method_exists( $relationship['model'], 'get' ) ) { + break; + } + + if ( !method_exists( $relationship['model'], 'prepare_item_for_response' ) ) { + break; + } + + $item[$relationship_key] = $relationship['model']->query( array( + $relationship['foreign_key'] => $item[$this->primary_key], + 'recursive' => $recursive - 1, + ) ); + + break; + } + } + + return $item; + } + + public function prepare_wp_post_model( $item, $relationship_key, $relationship, $recursive=0 ) { + $post = get_post( $item[$relationship['foreign_key']] ); + $item[$relationship_key] = array( + 'id' => $post->ID, + 'post_type' => $post->post_type, + 'title' => $post->post_title, + 'slug' => $post->post_name, + 'content' => $post->post_content, + 'date_published' => $post->post_date_gmt, + 'date_modified' => $post->post_modified_gmt, + ); + if ( !empty( $relationship['fields'] ) ) { + foreach ($relationship['fields'] as $field_key => $field) { + if ( is_int( $field_key ) ) { + $field_key = $field; + } + + $item[$relationship_key][$field_key] = $post->$field; + } + } + + return $item; + } + + public function prepare_wp_user_model( $item, $relationship_key, $relationship, $recursive=0 ) { + $user = new WP_User( $item[$relationship['foreign_key']] ); + + if ( empty( $user->ID ) ) { + $item[$relationship_key] = array(); + return $item; + } + + $item[$relationship_key] = array( + 'id' => $user->ID, + 'login' => $user->data->user_login, + 'email' => $user->data->user_email, + 'date_created' => $user->data->user_registered, + 'display_name' => $user->data->display_name, + 'roles' => $user->roles, + ); + if ( !empty( $relationship['fields'] ) ) { + foreach ($relationship['fields'] as $field_key => $field) { + if ( is_int( $field_key ) ) { + $field_key = $field; + } + + $item[$relationship_key][$field_key] = $user->$field; + } + } + + return $item; + } + + + public function bulk_delete( $args=array() ) { + return $this->db_bulk_delete( $args ); + } +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/td-util-init.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/td-util-init.php new file mode 100644 index 0000000..2b939d5 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/td-util/td-util-init.php @@ -0,0 +1,15 @@ +<?php + +$td_util_classes = array( + 'class-td-model.php' => 'TD_Model', + 'class-td-api-model.php' => 'TD_API_Model', + 'class-td-db-model.php' => 'TD_DB_Model', + + 'class-td-async-action-model.php' => 'TD_Async_Action_Model', +); + +foreach ($td_util_classes as $filename => $class_name) { + if ( !class_exists( $class_name ) ) { + include dirname( __FILE__ ) . '/' . $filename; + } +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/LICENSE b/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/LICENSE new file mode 100644 index 0000000..97c6c78 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (C) 2011-2018 WP-CLI Development Group (https://github.com/wp-cli/wp-config-transformer/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/src/WPConfigTransformer.php b/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/src/WPConfigTransformer.php new file mode 100644 index 0000000..31c1eb4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/includes/lib/wp-cli/wp-config-transformer/src/WPConfigTransformer.php @@ -0,0 +1,357 @@ +<?php +/** + * Transforms a wp-config.php file. + */ +class WPConfigTransformer { + /** + * Append to end of file + */ + const ANCHOR_EOF = 'EOF'; + + /** + * Path to the wp-config.php file. + * + * @var string + */ + protected $wp_config_path; + + /** + * Original source of the wp-config.php file. + * + * @var string + */ + protected $wp_config_src; + + /** + * Array of parsed configs. + * + * @var array + */ + protected $wp_configs = array(); + + /** + * Instantiates the class with a valid wp-config.php. + * + * @throws Exception If the wp-config.php file is missing. + * @throws Exception If the wp-config.php file is not writable. + * + * @param string $wp_config_path Path to a wp-config.php file. + */ + public function __construct( $wp_config_path ) { + $basename = basename( $wp_config_path ); + + if ( ! file_exists( $wp_config_path ) ) { + throw new Exception( "{$basename} does not exist." ); + } + + if ( ! is_writable( $wp_config_path ) ) { + throw new Exception( "{$basename} is not writable." ); + } + + $this->wp_config_path = $wp_config_path; + } + + /** + * Checks if a config exists in the wp-config.php file. + * + * @throws Exception If the wp-config.php file is empty. + * @throws Exception If the requested config type is invalid. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * + * @return bool + */ + public function exists( $type, $name ) { + $wp_config_src = file_get_contents( $this->wp_config_path ); + + if ( ! trim( $wp_config_src ) ) { + throw new Exception( 'Config file is empty.' ); + } + // Normalize the newline to prevent an issue coming from OSX. + $this->wp_config_src = str_replace( array( "\n\r", "\r" ), "\n", $wp_config_src ); + $this->wp_configs = $this->parse_wp_config( $this->wp_config_src ); + + if ( ! isset( $this->wp_configs[ $type ] ) ) { + throw new Exception( "Config type '{$type}' does not exist." ); + } + + return isset( $this->wp_configs[ $type ][ $name ] ); + } + + /** + * Get the value of a config in the wp-config.php file. + * + * @throws Exception If the wp-config.php file is empty. + * @throws Exception If the requested config type is invalid. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * + * @return array + */ + public function get_value( $type, $name ) { + $wp_config_src = file_get_contents( $this->wp_config_path ); + + if ( ! trim( $wp_config_src ) ) { + throw new Exception( 'Config file is empty.' ); + } + + $this->wp_config_src = $wp_config_src; + $this->wp_configs = $this->parse_wp_config( $this->wp_config_src ); + + if ( ! isset( $this->wp_configs[ $type ] ) ) { + throw new Exception( "Config type '{$type}' does not exist." ); + } + + return $this->wp_configs[ $type ][ $name ]['value']; + } + + /** + * Adds a config to the wp-config.php file. + * + * @throws Exception If the config value provided is not a string. + * @throws Exception If the config placement anchor could not be located. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * @param string $value Config value. + * @param array $options (optional) Array of special behavior options. + * + * @return bool + */ + public function add( $type, $name, $value, array $options = array() ) { + if ( ! is_string( $value ) ) { + throw new Exception( 'Config value must be a string.' ); + } + + if ( $this->exists( $type, $name ) ) { + return false; + } + + $defaults = array( + 'raw' => false, // Display value in raw format without quotes. + 'anchor' => "/* That's all, stop editing!", // Config placement anchor string. + 'separator' => PHP_EOL, // Separator between config definition and anchor string. + 'placement' => 'before', // Config placement direction (insert before or after). + ); + + list( $raw, $anchor, $separator, $placement ) = array_values( array_merge( $defaults, $options ) ); + + $raw = (bool) $raw; + $anchor = (string) $anchor; + $separator = (string) $separator; + $placement = (string) $placement; + + if ( self::ANCHOR_EOF === $anchor ) { + $contents = $this->wp_config_src . $this->normalize( $type, $name, $this->format_value( $value, $raw ) ); + } else { + if ( false === strpos( $this->wp_config_src, $anchor ) ) { + throw new Exception( 'Unable to locate placement anchor.' ); + } + + $new_src = $this->normalize( $type, $name, $this->format_value( $value, $raw ) ); + $new_src = ( 'after' === $placement ) ? $anchor . $separator . $new_src : $new_src . $separator . $anchor; + $contents = str_replace( $anchor, $new_src, $this->wp_config_src ); + } + + return $this->save( $contents ); + } + + /** + * Updates an existing config in the wp-config.php file. + * + * @throws Exception If the config value provided is not a string. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * @param string $value Config value. + * @param array $options (optional) Array of special behavior options. + * + * @return bool + */ + public function update( $type, $name, $value, array $options = array() ) { + if ( ! is_string( $value ) ) { + throw new Exception( 'Config value must be a string.' ); + } + + $defaults = array( + 'add' => true, // Add the config if missing. + 'raw' => false, // Display value in raw format without quotes. + 'normalize' => false, // Normalize config output using WP Coding Standards. + ); + + list( $add, $raw, $normalize ) = array_values( array_merge( $defaults, $options ) ); + + $add = (bool) $add; + $raw = (bool) $raw; + $normalize = (bool) $normalize; + + if ( ! $this->exists( $type, $name ) ) { + return ( $add ) ? $this->add( $type, $name, $value, $options ) : false; + } + + $old_src = $this->wp_configs[ $type ][ $name ]['src']; + $old_value = $this->wp_configs[ $type ][ $name ]['value']; + $new_value = $this->format_value( $value, $raw ); + + if ( $normalize ) { + $new_src = $this->normalize( $type, $name, $new_value ); + } else { + $new_parts = $this->wp_configs[ $type ][ $name ]['parts']; + $new_parts[1] = str_replace( $old_value, $new_value, $new_parts[1] ); // Only edit the value part. + $new_src = implode( '', $new_parts ); + } + + $contents = preg_replace( + sprintf( '/(?<=^|;|<\?php\s|<\?\s)(\s*?)%s/m', preg_quote( trim( $old_src ), '/' ) ), + '$1' . str_replace( '$', '\$', trim( $new_src ) ), + $this->wp_config_src + ); + + return $this->save( $contents ); + } + + /** + * Removes a config from the wp-config.php file. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * + * @return bool + */ + public function remove( $type, $name ) { + if ( ! $this->exists( $type, $name ) ) { + return false; + } + + $pattern = sprintf( '/(?<=^|;|<\?php\s|<\?\s)%s\s*(\S|$)/m', preg_quote( $this->wp_configs[ $type ][ $name ]['src'], '/' ) ); + $contents = preg_replace( $pattern, '$1', $this->wp_config_src ); + + return $this->save( $contents ); + } + + /** + * Applies formatting to a config value. + * + * @throws Exception When a raw value is requested for an empty string. + * + * @param string $value Config value. + * @param bool $raw Display value in raw format without quotes. + * + * @return mixed + */ + protected function format_value( $value, $raw ) { + if ( $raw && '' === trim( $value ) ) { + throw new Exception( 'Raw value for empty string not supported.' ); + } + + return ( $raw ) ? $value : var_export( $value, true ); + } + + /** + * Normalizes the source output for a name/value pair. + * + * @throws Exception If the requested config type does not support normalization. + * + * @param string $type Config type (constant or variable). + * @param string $name Config name. + * @param mixed $value Config value. + * + * @return string + */ + protected function normalize( $type, $name, $value ) { + if ( 'constant' === $type ) { + $placeholder = "define( '%s', %s );"; + } elseif ( 'variable' === $type ) { + $placeholder = '$%s = %s;'; + } else { + throw new Exception( "Unable to normalize config type '{$type}'." ); + } + + return sprintf( $placeholder, $name, $value ); + } + + /** + * Parses the source of a wp-config.php file. + * + * @param string $src Config file source. + * + * @return array + */ + protected function parse_wp_config( $src ) { + $configs = array(); + $configs['constant'] = array(); + $configs['variable'] = array(); + + // Strip comments. + foreach ( token_get_all( $src ) as $token ) { + if ( in_array( $token[0], array( T_COMMENT, T_DOC_COMMENT ), true ) ) { + $src = str_replace( $token[1], '', $src ); + } + } + + preg_match_all( '/(?<=^|;|<\?php\s|<\?\s)(\h*define\s*\(\s*[\'"](\w*?)[\'"]\s*)(,\s*(\'\'|""|\'.*?[^\\\\]\'|".*?[^\\\\]"|.*?)\s*)((?:,\s*(?:true|false)\s*)?\)\s*;)/ims', $src, $constants ); + preg_match_all( '/(?<=^|;|<\?php\s|<\?\s)(\h*\$(\w+)\s*=)(\s*(\'\'|""|\'.*?[^\\\\]\'|".*?[^\\\\]"|.*?)\s*;)/ims', $src, $variables ); + + if ( ! empty( $constants[0] ) && ! empty( $constants[1] ) && ! empty( $constants[2] ) && ! empty( $constants[3] ) && ! empty( $constants[4] ) && ! empty( $constants[5] ) ) { + foreach ( $constants[2] as $index => $name ) { + $configs['constant'][ $name ] = array( + 'src' => $constants[0][ $index ], + 'value' => $constants[4][ $index ], + 'parts' => array( + $constants[1][ $index ], + $constants[3][ $index ], + $constants[5][ $index ], + ), + ); + } + } + + if ( ! empty( $variables[0] ) && ! empty( $variables[1] ) && ! empty( $variables[2] ) && ! empty( $variables[3] ) && ! empty( $variables[4] ) ) { + // Remove duplicate(s), last definition wins. + $variables[2] = array_reverse( array_unique( array_reverse( $variables[2], true ) ), true ); + foreach ( $variables[2] as $index => $name ) { + $configs['variable'][ $name ] = array( + 'src' => $variables[0][ $index ], + 'value' => $variables[4][ $index ], + 'parts' => array( + $variables[1][ $index ], + $variables[3][ $index ], + ), + ); + } + } + + return $configs; + } + + /** + * Saves new contents to the wp-config.php file. + * + * @throws Exception If the config file content provided is empty. + * @throws Exception If there is a failure when saving the wp-config.php file. + * + * @param string $contents New config contents. + * + * @return bool + */ + protected function save( $contents ) { + if ( ! trim( $contents ) ) { + throw new Exception( 'Cannot save the config file with empty contents.' ); + } + + if ( $contents === $this->wp_config_src ) { + return false; + } + + $result = file_put_contents( $this->wp_config_path, $contents, LOCK_EX ); + + if ( false === $result ) { + throw new Exception( 'Failed to update the config file.' ); + } + + return true; + } + +} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/google/apiclient/src/aliases.php b/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/google/apiclient/src/aliases.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/guzzle/src/functions.php b/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/guzzle/src/functions.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/promises/src/functions_include.php b/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/promises/src/functions_include.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/psr7/src/functions_include.php b/wp-content/plugins/simply-schedule-appointments/includes/third-party/google/guzzlehttp/psr7/src/functions_include.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/simply-schedule-appointments/languages/admin-app-translations.php b/wp-content/plugins/simply-schedule-appointments/languages/admin-app-translations.php new file mode 100644 index 0000000..fc13175 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/languages/admin-app-translations.php @@ -0,0 +1,2305 @@ +<?php $translations = array ( + 'general' => + array ( + 'loadingInitial' => __( 'Setting Up', 'simply-schedule-appointments' ), + 'save' => __( 'Save', 'simply-schedule-appointments' ), + 'saveContinue' => __( 'Save and Continue', 'simply-schedule-appointments' ), + 'saving' => __( 'Saving', 'simply-schedule-appointments' ), + 'ok' => __( 'OK', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel', 'simply-schedule-appointments' ), + 'canceled' => __( 'Canceled', 'simply-schedule-appointments' ), + 'abandoned' => __( 'Abandoned', 'simply-schedule-appointments' ), + 'abandon' => __( 'Mark as Abandoned', 'simply-schedule-appointments' ), + 'towp' => __( 'Back to WordPress dashboard', 'simply-schedule-appointments' ), + 'learnMore' => __( 'Learn more', 'simply-schedule-appointments' ), + 'selected' => __( 'selected', 'simply-schedule-appointments' ), + 'create' => __( 'create', 'simply-schedule-appointments' ), + ), + 'actions' => + array ( + 'activate' => __( 'Make active', 'simply-schedule-appointments' ), + 'clone' => __( 'Clone', 'simply-schedule-appointments' ), + 'deactivate' => __( 'Make inactive', 'simply-schedule-appointments' ), + 'delete' => __( 'Delete', 'simply-schedule-appointments' ), + 'recover' => __( 'Recover', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit', 'simply-schedule-appointments' ), + 'manageResources' => __( 'Manage Resources', 'simply-schedule-appointments' ), + 'editAsCustomer' => __( 'Edit as Customer', 'simply-schedule-appointments' ), + 'reschedule' => __( 'Reschedule', 'simply-schedule-appointments' ), + 'retry' => __( 'Retry', 'simply-schedule-appointments' ), + 'saveChanges' => __( 'Save Changes', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel', 'simply-schedule-appointments' ), + ), + 'time' => + array ( + 'units' => + array ( + 'minutes' => + array ( + 'single' => __( 'minute', 'simply-schedule-appointments' ), + 'plural' => __( 'minutes', 'simply-schedule-appointments' ), + ), + 'hours' => + array ( + 'single' => __( 'hour', 'simply-schedule-appointments' ), + 'plural' => __( 'hours', 'simply-schedule-appointments' ), + ), + 'days' => + array ( + 'single' => __( 'day', 'simply-schedule-appointments' ), + 'plural' => __( 'days', 'simply-schedule-appointments' ), + ), + 'weeks' => + array ( + 'single' => __( 'week', 'simply-schedule-appointments' ), + 'plural' => __( 'weeks', 'simply-schedule-appointments' ), + ), + ), + ), + 'errors' => + array ( + 'heading' => __( 'Oh, for fox sake', 'simply-schedule-appointments' ), + 'intro' => __( 'We ran into a problem:', 'simply-schedule-appointments' ), + 'guidesText' => __( 'This is usually caused by a theme or plugin conflict.', 'simply-schedule-appointments' ), + 'guidesLinkLabel' => __( 'View our troubleshooting guide for more information.', 'simply-schedule-appointments' ), + 'errorDetails' => __( 'Show error details', 'simply-schedule-appointments' ), + 'appointmentLoading' => __( 'We were unable to load the appointments', 'simply-schedule-appointments' ), + 'appointmentTypeTitle' => __( 'Appointment type name is required', 'simply-schedule-appointments' ), + 'cantFetchingHistory' => __( 'No history available.', 'simply-schedule-appointments' ), + 'troubleSaving' => __( 'We were unable to save your changes', 'simply-schedule-appointments' ), + 'cantDeleteType' => __( 'Unable to delete appointment type', 'simply-schedule-appointments' ), + 'cantDeleteStaff' => __( 'Unable to delete staff', 'simply-schedule-appointments' ), + 'staffUnavailable' => __( 'The following team member(s) are no longer available for this appointment', 'simply-schedule-appointments' ), + 'moreInfo' => __( 'More info', 'simply-schedule-appointments' ), + 'noAppointmentTypes' => __( 'First things first - set up your first appointment type.', 'simply-schedule-appointments' ), + 'noResources' => __( 'No resources have been set up yet.', 'simply-schedule-appointments' ), + 'noResourcesAppointmentType' => __( 'No resources set up for this appointment type', 'simply-schedule-appointments' ), + 'noPermission' => __( 'What the fox?', 'simply-schedule-appointments' ), + 'noPermissionDesc' => __( 'It looks like you\'re not allowed to see this screen. Please check with your site administrator if you think this message is an error.', 'simply-schedule-appointments' ), + 'licenseNotFound' => __( 'License not found. Add your license key to enable automatic updates.', 'simply-schedule-appointments' ), + 'invalidLicense' => __( 'License is invalid. Add your license key to enable automatic updates.', 'simply-schedule-appointments' ), + 'renewLicense' => __( ' Renew your license key to enable automatic updates.', 'simply-schedule-appointments' ), + 'licenseRefunded' => __( 'License disabled due to refund. Purchase a new license key to enable automatic updates.', 'simply-schedule-appointments' ), + ), + 'hello' => + array ( + 'headline' => __( 'Welcome to Simply Schedule Appointments', 'simply-schedule-appointments' ), + 'subhead' => __( 'It looks like it\'s your first time here. Can we help you get set up?', 'simply-schedule-appointments' ), + 'accept' => __( 'Yes, help me please!', 'simply-schedule-appointments' ), + 'decline' => __( 'No, thanks. I got this.', 'simply-schedule-appointments' ), + ), + 'wizard' => + array ( + 'skip' => __( 'Skip this for now', 'simply-schedule-appointments' ), + 'next' => __( 'Next', 'simply-schedule-appointments' ), + 'settings' => + array ( + 'license' => + array ( + 'heading' => __( 'First things first. Got your license key handy?', 'simply-schedule-appointments' ), + ), + 'general' => + array ( + 'loading' => __( 'Detecting your settings', 'simply-schedule-appointments' ), + 'headingFirst' => __( 'First things first, we detected these preferences. Are these correct?', 'simply-schedule-appointments' ), + 'heading' => __( 'Next, we detected these preferences. Are these correct?', 'simply-schedule-appointments' ), + 'accept' => __( 'Looks good! Let\'s go!', 'simply-schedule-appointments' ), + 'decline' => __( 'Needs some adjusting', 'simply-schedule-appointments' ), + 'exit' => __( 'Exit wizard and go to settings', 'simply-schedule-appointments' ), + ), + ), + 'appointmentType' => + array ( + 'basics' => __( 'Basics', 'simply-schedule-appointments' ), + 'basicsMessage' => __( 'The basics for this type of appointment', 'simply-schedule-appointments' ), + 'capacity' => __( 'Capacity', 'simply-schedule-appointments' ), + 'capacityMessage' => __( 'How many customers can book at the same time?', 'simply-schedule-appointments' ), + 'revisions' => __( 'History', 'simply-schedule-appointments' ), + 'revisionsMessage' => __( 'A history of changes to this appointment type', 'simply-schedule-appointments' ), + 'stepper' => + array ( + 'back' => __( 'Back', 'simply-schedule-appointments' ), + 'continue' => __( 'Continue', 'simply-schedule-appointments' ), + ), + 'heading' => __( 'Set up your first appointment type', 'simply-schedule-appointments' ), + 'loading' => __( 'Setting up your appointment type', 'simply-schedule-appointments' ), + 'availability' => __( 'Availability', 'simply-schedule-appointments' ), + 'availabilityMessage' => __( 'When are you available for this type of appointment?', 'simply-schedule-appointments' ), + 'apptSyncHeading' => __( 'Sync appointments with this calendar', 'simply-schedule-appointments' ), + 'apptSyncDesc' => __( 'When appointments are booked, create events on this Google Calendar', 'simply-schedule-appointments' ), + 'scheduling' => __( 'Scheduling Options', 'simply-schedule-appointments' ), + 'schedulingMessage' => __( 'Rules around how and when people can schedule this type of appointment', 'simply-schedule-appointments' ), + 'resources' => __( 'Resources', 'simply-schedule-appointments' ), + 'resourcesMessage' => __( 'What resources come with this appointment type', 'simply-schedule-appointments' ), + 'customerInfo' => __( 'Customer Information', 'simply-schedule-appointments' ), + 'customerInfoMessage' => __( 'What do you need to know about your customer?', 'simply-schedule-appointments' ), + 'notifications' => __( 'Notifications', 'simply-schedule-appointments' ), + 'notificationsMessage' => __( 'Options for sending customer and admin notifications', 'simply-schedule-appointments' ), + 'review' => __( 'Review', 'simply-schedule-appointments' ), + 'reviewMessage' => __( 'Make sure everything looks correct', 'simply-schedule-appointments' ), + 'googleCalendar' => __( 'Google Calendar', 'simply-schedule-appointments' ), + 'googleCalendarMessage' => __( 'Synchronize your appointments with your Google calendar', 'simply-schedule-appointments' ), + 'checkCalendars' => __( 'Check these calendars for conflicts', 'simply-schedule-appointments' ), + 'checkCalendarsDesc' => __( 'When booking appointments, check these calendars for times to exclude from available times', 'simply-schedule-appointments' ), + 'webMeetings' => __( 'Web Meetings', 'simply-schedule-appointments' ), + 'webMeetingsMessage' => __( 'Manage your Web Meetings settings for this appointment type', 'simply-schedule-appointments' ), + 'mailchimp' => __( 'MailChimp', 'simply-schedule-appointments' ), + 'mailchimpMessage' => __( 'Allow your customers to subscribe to a selected MailChimp list when booking an appointment', 'simply-schedule-appointments' ), + 'webhooks' => __( 'Webhooks', 'simply-schedule-appointments' ), + 'webhooksMessage' => __( 'Integrate Simply Schedule Appointments with other apps and services', 'simply-schedule-appointments' ), + 'booking' => __( 'Booking Info', 'simply-schedule-appointments' ), + 'id' => __( 'ID', 'simply-schedule-appointments' ), + 'bookingMessage' => __( 'Let your customers book this appointment type', 'simply-schedule-appointments' ), + 'generalBooking' => __( 'Use this shortcode in any post or page to create a general booking form where your customers can choose any appointment type', 'simply-schedule-appointments' ), + 'specialBooking' => __( 'Use this shortcode in any post or page to create a special booking form where your customers can book just this appointment type', 'simply-schedule-appointments' ), + 'payments' => __( 'Payments', 'simply-schedule-appointments' ), + 'paymentsMessage' => __( 'Take payments online at the time of booking', 'simply-schedule-appointments' ), + 'staff' => __( 'Team Members', 'simply-schedule-appointments' ), + 'staffMessage' => __( 'Which team members can take appointments of this type?', 'simply-schedule-appointments' ), + 'bookingFlow' => __( 'Booking Flow', 'simply-schedule-appointments' ), + 'bookingFlowMessage' => __( 'Choose the sequence of the booking steps', 'simply-schedule-appointments' ), + ), + 'googleCalendar' => + array ( + 'wantToConnect' => __( 'Want to sync with Google Calendar?', 'simply-schedule-appointments' ), + 'showMeHow' => __( 'Show me how', 'simply-schedule-appointments' ), + 'connectSuccess' => __( 'Success! Your Google Calendar account is connected.', 'simply-schedule-appointments' ), + 'failedToFetch' => __( 'Unable to get your Google calendars', 'simply-schedule-appointments' ), + 'failedToFetchDescription' => __( 'Try disconnecting and reconnecting your Google account.', 'simply-schedule-appointments' ), + 'dontAdd' => __( 'Don\'t add newly booked appointments to my Google calendar', 'simply-schedule-appointments' ), + 'clientIdError' => __( 'Client ID is required for Google Calendar authorization', 'simply-schedule-appointments' ), + 'clientSecretError' => __( 'Client secret is required for Google Calendar authorization', 'simply-schedule-appointments' ), + ), + 'zoom' => + array ( + 'wantToConnect' => __( 'Want to sync with Zoom?', 'simply-schedule-appointments' ), + 'connectSuccess' => __( 'Success! Your Zoom account is connected.', 'simply-schedule-appointments' ), + 'failedToFetch' => __( 'Unable to get your Zoom settings', 'simply-schedule-appointments' ), + 'failedToFetchDescription' => __( 'Try disconnecting and reconnecting your Zoom account.', 'simply-schedule-appointments' ), + 'clientIdError' => __( 'Client Id is required for Zoom authorization', 'simply-schedule-appointments' ), + 'apiSecretError' => __( 'Client Secret is required for Zoom authorization', 'simply-schedule-appointments' ), + ), + 'complete' => + array ( + 'headline' => __( 'Congratulations! You\'re all set up.', 'simply-schedule-appointments' ), + 'shortcodeInstructions' => __( 'Display your booking form on any post or page with the shortcode, or use our Gutenberg block to add the booking form to a post or page.', 'simply-schedule-appointments' ), + 'subhead' => __( 'What would you like to do next?', 'simply-schedule-appointments' ), + 'booking' => __( 'Try booking an appointment', 'simply-schedule-appointments' ), + 'settings' => __( 'Go to settings', 'simply-schedule-appointments' ), + 'apptType' => __( 'Set up another appointment type', 'simply-schedule-appointments' ), + ), + 'appointment' => + array ( + 'revisions' => __( 'History', 'simply-schedule-appointments' ), + 'revisionsMessage' => __( 'A history of changes to this appointment', 'simply-schedule-appointments' ), + ), + ), + 'promo' => + array ( + 'dismissNotice' => __( 'Dismiss this notice', 'simply-schedule-appointments' ), + 'newBookingAppNotice' => + array ( + 'notice' => __( 'New Booking App Is Now Enabled! Please Double-Check Your Calendars & Opt-Out If You Need Time To Test Or Transition.', 'simply-schedule-appointments' ), + 'message' => __( 'You\'ve temporarily opted-out of the new booking app. Please note that this extension is only for 30-days, make sure to review and make updates to transition soon.', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'optOut' => __( 'Temporary Opt-Out', 'simply-schedule-appointments' ), + 'optIn' => __( 'Keep Changes', 'simply-schedule-appointments' ), + ), + ), + 'proHeading' => __( 'Now available!', 'simply-schedule-appointments' ), + 'businessText' => __( 'Growing team? Need to book rooms or equipment? No problem, upgrade to our Business edition to take advantage of powerful scheduling features:', 'simply-schedule-appointments' ), + 'businessTextBullets' => + array ( + 'team' => __( 'Team Scheduling - Great for employees, contractors, and internal meetings', 'simply-schedule-appointments' ), + 'resources' => __( 'Resource and Equipment booking', 'simply-schedule-appointments' ), + 'locations' => __( 'Manage Multiple Locations', 'simply-schedule-appointments' ), + 'views' => __( 'Custom Booking Views', 'simply-schedule-appointments' ), + 'bonus' => __( 'BONUS - Free Zoom onboarding with our team', 'simply-schedule-appointments' ), + ), + 'businessTextCta' => + array ( + 'upgrade' => __( 'Unlock Business Features', 'simply-schedule-appointments' ), + 'view' => __( 'View All Editions', 'simply-schedule-appointments' ), + ), + 'plusText' => __( 'Want to get even more out of your new booking system? Consider upgrading to our Plus Edition and unlock awesome features like:', 'simply-schedule-appointments' ), + 'plusTextBullets' => + array ( + 'google' => __( 'Google Calendar Sync', 'simply-schedule-appointments' ), + 'customFields' => __( 'Custom Fields for the Booking Form', 'simply-schedule-appointments' ), + 'mailchimp' => __( 'Mailchimp Integration', 'simply-schedule-appointments' ), + 'capacity' => __( 'Multiple Bookings in the Same Time Slot', 'simply-schedule-appointments' ), + 'classes' => __( 'Book Classes and Group Appointments', 'simply-schedule-appointments' ), + 'reminders' => __( 'Reminders and Follow-up Emails', 'simply-schedule-appointments' ), + ), + 'plusTextCta' => + array ( + 'upgrade' => __( 'Unlock Plus features', 'simply-schedule-appointments' ), + 'view' => __( 'View All Editions', 'simply-schedule-appointments' ), + ), + 'proTextSideBar' => __( 'Woah—looks like you\'re really getting the hand of this whole scheduling thing. You\'d be a great fit for our Professional Edition and it’s supercharged features:', 'simply-schedule-appointments' ), + 'proTextPopUp' => __( 'When your entire business revolves around meetings and booking appointments - we\'ve got you covered. You\'d be a great fit for our Professional Edition and it’s supercharged features:', 'simply-schedule-appointments' ), + 'proTextBullets' => + array ( + 'payments' => __( 'Accept Payments via PayPal and Stripe', 'simply-schedule-appointments' ), + 'reminders' => __( 'SMS Confirmations and Reminders', 'simply-schedule-appointments' ), + 'tracking' => __( 'Conversion and Goal Tracking', 'simply-schedule-appointments' ), + 'webhooks' => __( 'Webhooks allow you to sync appointment data to CRM, newsletter tools, etc.', 'simply-schedule-appointments' ), + 'zoom' => __( 'Live Customer Support via Zoom', 'simply-schedule-appointments' ), + 'bookingFlows' => __( 'Customizable booking flows (Choose from a selection of booking steps and layouts.)', 'simply-schedule-appointments' ), + ), + 'proTextCta' => + array ( + 'upgrade' => __( 'Unlock Pro Features', 'simply-schedule-appointments' ), + 'view' => __( 'View All Editions', 'simply-schedule-appointments' ), + ), + 'smsUpgrade' => + array ( + 'title' => __( 'Send SMS with Simply Schedule Appointments Pro', 'simply-schedule-appointments' ), + 'text' => __( 'Upgrade to Simply Schedule Appointments Pro to send SMS appointment confirmations, reminders, and follow-ups. Send automated SMS messages using the Twilio integration and say goodbye to no-shows!', 'simply-schedule-appointments' ), + 'cta' => __( 'Upgrade now', 'simply-schedule-appointments' ), + 'radioHint' => __( 'Available in Pro', 'simply-schedule-appointments' ), + ), + 'smsSetup' => + array ( + 'title' => __( 'SMS Reminders Available Now!', 'simply-schedule-appointments' ), + 'text' => __( 'Get step-by-step instructions on getting set up to send SMS reminders to your customers.', 'simply-schedule-appointments' ), + 'viewInstructions' => __( 'View the instructions', 'simply-schedule-appointments' ), + 'instructionsBullets' => + array ( + 'enable' => + array ( + 'title' => __( '1. Enable SMS', 'simply-schedule-appointments' ), + 'description' => __( '%1$s Turn on the SMS feature %2$s by toggling the feature on', 'simply-schedule-appointments' ), + ), + 'setupTwilio' => + array ( + 'title' => __( '2. Set up your Twilio settings', 'simply-schedule-appointments' ), + 'description' => __( 'Get your %1$s Twilio API key %2$s and credentials. %3$s Edit Twilio settings %4$s', 'simply-schedule-appointments' ), + ), + 'addPhoneNumber' => + array ( + 'title' => __( '3. Add an admin phone number', 'simply-schedule-appointments' ), + 'description' => __( 'If you want to send SMS reminders to yourself, add your phone number. %1$s Edit general settings %2$s', 'simply-schedule-appointments' ), + ), + 'phoneFields' => + array ( + 'title' => __( '4. Collect a phone number from your customers', 'simply-schedule-appointments' ), + 'description' => __( 'Edit your appointment types to add a phone number type field to the customer information section. %1$s Edit appointment types %2$s', 'simply-schedule-appointments' ), + ), + 'smsNotification' => + array ( + 'title' => __( '5. Set up an SMS notification', 'simply-schedule-appointments' ), + 'description' => __( 'Create a new notification, set the type to SMS, and configure your settings. %1$s Manage notifications %2$s', 'simply-schedule-appointments' ), + ), + ), + 'moreDetails' => __( 'If you need more details, please %1$s read our guide, %2$s complete with screen shots of each step. Or %3$s contact support %4$s for more assistance.', 'simply-schedule-appointments' ), + ), + 'bookingFlowsPromo' => + array ( + 'available' => + array ( + 'title' => __( 'Check Out Booking Flows!', 'simply-schedule-appointments' ), + 'text1' => __( 'The highly anticipated Booking Flows feature is now available. Check it out and spice up your booking forms!', 'simply-schedule-appointments' ), + 'textCta' => __( 'Learn More', 'simply-schedule-appointments' ), + ), + 'unavailable' => + array ( + 'title' => __( 'Introducing: Booking Flows!', 'simply-schedule-appointments' ), + 'text1' => __( 'Upgrade to either the Professional or Business Edition now to unlock the power of our new Booking Flows feature.', 'simply-schedule-appointments' ), + 'textCta' => __( 'Unlock pro features', 'simply-schedule-appointments' ), + ), + 'text2' => __( 'The Booking Flows feature allows each Appointment Type to set the sequence of Views for the booking form. New flows include:', 'simply-schedule-appointments' ), + 'bookingFlowsPromoTextBullets' => + array ( + 'time' => __( 'Express Flow displays the time and date selection on the same page within the booking form.', 'simply-schedule-appointments' ), + 'availability' => __( 'First Available Flow suggests the next available time slot during the booking process.', 'simply-schedule-appointments' ), + 'customization' => __( 'Bunches of customizations and combinations!', 'simply-schedule-appointments' ), + ), + ), + 'zoomUpgrade' => + array ( + 'title' => __( 'Schedule Zoom meetings with Simply Schedule Appointments', 'simply-schedule-appointments' ), + 'text' => __( 'Get even more out of SSA! Upgrade to the Plus Edition to unlock Zoom appointment scheduling and other awesome features like:', 'simply-schedule-appointments' ), + ), + 'zoomAnnounce' => + array ( + 'title' => __( 'Available now! Schedule Zoom meetings', 'simply-schedule-appointments' ), + 'text' => __( 'Now you can use Simply Schedule Appointments to book Zoom calls with your customers. Learn how to get set up to use this new feature.', 'simply-schedule-appointments' ), + 'cta' => __( 'Learn how to schedule Zoom calls', 'simply-schedule-appointments' ), + ), + 'gravityFormsUpsell' => + array ( + 'title' => __( 'Create the Ultimate Booking Form with Gravity Forms Integration', 'simply-schedule-appointments' ), + 'text' => __( 'Unlock the Gravity Forms Integration in the Plus edition to create highly customized booking forms that include:', 'simply-schedule-appointments' ), + 'textBullets' => + array ( + 'features' => __( 'Gravity Forms features like conditional logic, multi-page forms, and file uploads', 'simply-schedule-appointments' ), + 'compatibility' => __( 'Full compatibility with popular add-ons like User Registration, Webhooks, Zapier, and more', 'simply-schedule-appointments' ), + 'paymentOptions' => __( 'Robust payment options including varying prices, coupons, and running totals', 'simply-schedule-appointments' ), + 'gravityPerks' => __( 'Gravity Perks compatibility including Limit Submissions, Populate Anything, and Preview Submissions', 'simply-schedule-appointments' ), + ), + ), + 'NewBookingAppPromo' => + array ( + 'title' => __( 'New Booking App Enabled!', 'simply-schedule-appointments' ), + 'text1' => __( 'The new booking app is a complete revamp of our front-end app framework. It comes jam-packed with awesome new features and improvements for every edition!', 'simply-schedule-appointments' ), + 'text2' => __( 'Visit our new booking app guide to read about all the great additions this will bring to your booking form experience.', 'simply-schedule-appointments' ), + 'textCta' => __( 'Learn More About New Booking App', 'simply-schedule-appointments' ), + ), + 'paymentsUpsell' => + array ( + 'title' => __( 'Get Paid for Your Time and Expertise', 'simply-schedule-appointments' ), + 'text' => __( 'Automatically take payments during booking with PayPal and Stripe integrations.', 'simply-schedule-appointments' ), + 'textBullets' => + array ( + 'markAppointment' => __( 'Mark appointment types with required or optional payments', 'simply-schedule-appointments' ), + 'availability' => __( 'Available in 20+ currencies including USD, EUR, AUD, and many more!', 'simply-schedule-appointments' ), + 'authentication' => __( 'Strong Customer Authentication available for FCA compliance', 'simply-schedule-appointments' ), + ), + ), + 'googleCalendar' => + array ( + 'title' => __( 'Balance All Your Schedules with Google Calendar Sync', 'simply-schedule-appointments' ), + 'text' => __( 'Unlock the Google Calendar Integration in the Plus edition to enjoy all of the following features:', 'simply-schedule-appointments' ), + 'textBullets' => + array ( + 'checkConflicts' => __( 'Check personal events for conflicts', 'simply-schedule-appointments' ), + 'automaticInvites' => __( 'Automatic Google Invites', 'simply-schedule-appointments' ), + 'generateLinks' => __( 'Generate Google Meet Links', 'simply-schedule-appointments' ), + 'eventInfo' => __( 'Customize the Google event info', 'simply-schedule-appointments' ), + ), + ), + 'gravityFormsInfo' => + array ( + 'title' => __( 'Gravity Forms Integration Available Now!', 'simply-schedule-appointments' ), + 'text1' => __( 'Prepare for Liftoff! Use the Gravity Forms integration to highly customize your booking forms with conditional logic, custom payments, coupon codes, multi-page forms, etc!', 'simply-schedule-appointments' ), + 'text2' => __( 'Simply Schedule Appointments is also fully compatible with popular Gravity Forms add-ons like User Registration, Webhooks, Zapier, and more!', 'simply-schedule-appointments' ), + 'textCta' => __( 'Learn about booking with Gravity Forms', 'simply-schedule-appointments' ), + ), + 'AprilTwentyThreeReview' => + array ( + 'title' => __( 'Congrats on 100 Bookings, Let Us Know What You Think!', 'simply-schedule-appointments' ), + 'text1' => __( 'You have successfully booked 100 appointments using Simply Schedule Appointments so far. We hope you\'re enjoying using the plugin and that it\'s been helpful to your website!', 'simply-schedule-appointments' ), + 'text2' => __( 'Your feedback is super important to us, as we\'re always trying to make the plugin better and hear your thoughts. Where would you say you\'re experience lies:', 'simply-schedule-appointments' ), + 'leaveUsReview' => __( 'We\'d love it if you could leave us a review on WordPress.org letting us know how the plugin has improved your business', 'simply-schedule-appointments' ), + 'letUsKnow' => __( 'Could you please let us know what needs to be improved? We answer every email and would love the chance to hear your thoughts.', 'simply-schedule-appointments' ), + 'yippee' => __( 'Yippee!', 'simply-schedule-appointments' ), + 'sorryToHear' => __( 'We\'re sorry to hear that...', 'simply-schedule-appointments' ), + 'imgAltText' => __( 'Foxy holding balloons under a banner that says Congratulations', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'fantastic' => __( 'Fantastic!', 'simply-schedule-appointments' ), + 'better' => __( 'OK. It could be better.', 'simply-schedule-appointments' ), + 'leaveReview' => __( 'Leave us a review', 'simply-schedule-appointments' ), + 'shareFeedback' => __( 'Share your feedback', 'simply-schedule-appointments' ), + ), + ), + 'availablePlus' => __( 'Available in Plus', 'simply-schedule-appointments' ), + 'availablePro' => __( 'Available in Pro', 'simply-schedule-appointments' ), + 'availableBusiness' => __( 'Available in Business', 'simply-schedule-appointments' ), + 'capacityText' => __( 'Upgrade to allow multiple customers to book appointments for the same time slot! You\'ll also have the option to group bookings together for classes or treat them independently. You\'ll also unlock these other helpful features:', 'simply-schedule-appointments' ), + 'capacityTextBullets' => + array ( + 'google' => __( 'Google Calendar Sync can invite everyone in a group to the same event', 'simply-schedule-appointments' ), + 'webMeeting' => __( 'Easily coordinate web meeting links with everyone in the same group', 'simply-schedule-appointments' ), + ), + 'webMeetingsText' => __( 'Upgrade to automatically set a unique web meeting URL for each appointment booking along with these other helpful features:', 'simply-schedule-appointments' ), + 'webMeetingsTextBullets' => + array ( + 'google' => __( 'Google Calendar Sync including Google Meet integration', 'simply-schedule-appointments' ), + 'zoom' => __( 'Direct Zoom integration', 'simply-schedule-appointments' ), + ), + ), + 'settings' => + array ( + 'enable' => __( 'Enable', 'simply-schedule-appointments' ), + 'disabledWarning' => __( 'This feature isn\'t enabled. Would you like to enable it now?', 'simply-schedule-appointments' ), + 'loadingAppointments' => __( 'Getting your appointments', 'simply-schedule-appointments' ), + 'appointmentsTitle' => __( 'Appointments', 'simply-schedule-appointments' ), + 'loadingApptTypes' => __( 'Getting your appointment types', 'simply-schedule-appointments' ), + 'appointmentTypesTitle' => __( 'Appointment Types', 'simply-schedule-appointments' ), + 'appointmentTypesDeleted' => __( 'Deleted Appointment Types', 'simply-schedule-appointments' ), + 'appointmentTypeAll' => __( 'All', 'simply-schedule-appointments' ), + 'settingsTitle' => __( 'Settings', 'simply-schedule-appointments' ), + 'comingSoon' => __( 'Coming Soon', 'simply-schedule-appointments' ), + 'beta' => __( 'Beta', 'simply-schedule-appointments' ), + 'upgrade' => __( 'Upgrade', 'simply-schedule-appointments' ), + 'openNavigation' => __( 'Open Navigation', 'simply-schedule-appointments' ), + 'returnToSettings' => __( 'Return to Settings', 'simply-schedule-appointments' ), + 'featureNotEnabled' => __( 'Feature not enabled', 'simply-schedule-appointments' ), + 'featureNotEnabledDescription' => __( 'This feature is not currently enabled. Please enable this feature to view the settings.', 'simply-schedule-appointments' ), + 'advanced_scheduling' => + array ( + 'title' => __( 'Advanced Scheduling Options', 'simply-schedule-appointments' ), + 'label' => __( 'Enable Advanced Scheduling Options for Appointment Types', 'simply-schedule-appointments' ), + 'help' => __( 'Handle more complex scheduling with extra options.', 'simply-schedule-appointments' ), + 'help_link' => __( 'Learn more about these options.', 'simply-schedule-appointments' ), + 'editTypes' => __( 'Edit Appointment Types', 'simply-schedule-appointments' ), + 'booking_window_error' => __( 'The booking end date must be after the booking start date', 'simply-schedule-appointments' ), + 'availability_window_error' => __( 'The availability end date must be after the availability start date', 'simply-schedule-appointments' ), + 'perDayLimitError' => __( 'The per day booking limit must be a number greater than zero.', 'simply-schedule-appointments' ), + 'saved' => __( 'Settings saved.', 'simply-schedule-appointments' ), + ), + 'blackout' => + array ( + 'title' => __( 'Blackout Dates', 'simply-schedule-appointments' ), + 'description' => __( 'Blackout dates are dates blocked off your calendar entirely for all appointment types. Perfect for vacation days, travel days, or other days when you\'re not available for appointments.', 'simply-schedule-appointments' ), + 'emptyLabel' => __( 'No blackout dates selected yet', 'simply-schedule-appointments' ), + 'emptyDesc' => __( 'Use the calendar to select blackout days', 'simply-schedule-appointments' ), + 'loading' => __( 'Loading team dates', 'simply-schedule-appointments' ), + 'selected' => __( 'Selected Dates', 'simply-schedule-appointments' ), + 'saved' => __( 'Updated blackout dates saved', 'simply-schedule-appointments' ), + 'saving' => __( 'Saving blackout dates', 'simply-schedule-appointments' ), + 'nextMonth' => __( 'Go to next month', 'simply-schedule-appointments' ), + 'previousMonth' => __( 'Go to previous month', 'simply-schedule-appointments' ), + 'selectYear' => __( 'Select a year', 'simply-schedule-appointments' ), + 'selectTarget' => __( 'Select who you are setting blackout dates for', 'simply-schedule-appointments' ), + 'view' => + array ( + 'global' => __( 'Business-wide', 'simply-schedule-appointments' ), + 'self' => __( 'Myself', 'simply-schedule-appointments' ), + ), + ), + 'translations' => + array ( + 'title' => __( 'Translations', 'simply-schedule-appointments' ), + 'description' => __( 'Download and install language packs from translate.wordpress.org, even if they are incomplete.', 'simply-schedule-appointments' ), + 'selectPack' => __( 'Select a translation pack', 'simply-schedule-appointments' ), + 'fetchInstall' => __( 'Download and Install', 'simply-schedule-appointments' ), + 'installedTranslations' => __( 'Installed translations', 'simply-schedule-appointments' ), + 'improveTranslation' => __( 'Improve this translation', 'simply-schedule-appointments' ), + 'languagePack' => __( 'Language pack', 'simply-schedule-appointments' ), + 'lastUpdated' => __( 'Last updated', 'simply-schedule-appointments' ), + 'remove' => __( 'Remove language pack', 'simply-schedule-appointments' ), + 'refresh' => __( 'Refresh language pack', 'simply-schedule-appointments' ), + ), + 'general' => + array ( + 'title' => __( 'General Settings', 'simply-schedule-appointments' ), + 'timezone' => __( 'Timezone', 'simply-schedule-appointments' ), + 'timezoneWarning' => __( 'Your WordPress setting doesn\'t appear to match your current location.', 'simply-schedule-appointments' ), + 'genericTimezoneWarning' => __( 'You have an offset selected instead of a timezone. We recommend changing the setting to use a timezone appropriate for your country and region.', 'simply-schedule-appointments' ), + 'dateFormat' => __( 'Date Format', 'simply-schedule-appointments' ), + 'timeFormat' => __( 'Time Format', 'simply-schedule-appointments' ), + 'contact' => __( 'Appointment Contact', 'simply-schedule-appointments' ), + 'contact_helper' => __( 'Who are visitors booking their appointment with? (this is probably your name)', 'simply-schedule-appointments' ), + 'contact_error' => __( 'Appointment Contact name is required', 'simply-schedule-appointments' ), + 'business' => __( 'Business Name', 'simply-schedule-appointments' ), + 'business_error' => __( 'Business name is required', 'simply-schedule-appointments' ), + 'email' => __( 'Default Admin Email', 'simply-schedule-appointments' ), + 'email_helper' => __( 'SSA will send an email to this email when a visitor books an appointment.', 'simply-schedule-appointments' ), + 'email_error' => __( 'Appointment email address is required', 'simply-schedule-appointments' ), + 'phone' => __( 'Admin phone number', 'simply-schedule-appointments' ), + 'phone_error' => __( 'Please enter a valid phone number', 'simply-schedule-appointments' ), + 'phone_help' => __( 'Number where SMS reminders will be sent', 'simply-schedule-appointments' ), + 'weekStartsOn' => __( 'Week Starts On', 'simply-schedule-appointments' ), + 'bookAppointment' => __( 'Book an Appointment', 'simply-schedule-appointments' ), + 'confirmTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmContent' => __( 'Your settings won\'t be saved if you leave the page.', 'simply-schedule-appointments' ), + 'countryCode' => + array ( + 'defaultValue' => __( 'Auto-detect', 'simply-schedule-appointments' ), + 'label' => __( 'Default country for telephone number fields', 'simply-schedule-appointments' ), + ), + 'editAppointmentPage' => __( 'Edit Appointment Page', 'simply-schedule-appointments' ), + 'fullScreenPage' => __( 'SSA Full Screen Page (Default)', 'simply-schedule-appointments' ), + ), + 'developerScreen' => __( 'Developer', 'simply-schedule-appointments' ), + 'developer' => + array ( + 'title' => __( 'Developer Settings', 'simply-schedule-appointments' ), + 'booking_api_embed' => + array ( + 'label' => __( 'Use the API to embed the booking form', 'simply-schedule-appointments' ), + 'help' => __( 'Try enabling this option if you\'re having issues with the booking form displaying correctly.', 'simply-schedule-appointments' ), + ), + 'capacity_availability' => + array ( + 'label' => __( 'Use the new availability algorithm', 'simply-schedule-appointments' ), + 'help' => __( 'Try the new scheduling calculator. May perform faster when booking.', 'simply-schedule-appointments' ), + ), + 'disable_availability_caching' => + array ( + 'label' => __( 'Disable availability caching', 'simply-schedule-appointments' ), + 'help' => __( 'This will slow down your site, so only disable if you are having trouble and are instructed to do so by support.', 'simply-schedule-appointments' ), + ), + 'enqueue_everywhere' => + array ( + 'label' => __( 'Enqueue scripts everywhere', 'simply-schedule-appointments' ), + 'help' => __( 'Load scripts on every page. Can be helpful if there are issues with loading the booking form via ajax', 'simply-schedule-appointments' ), + ), + 'beta_updates' => + array ( + 'title' => __( 'Beta features', 'simply-schedule-appointments' ), + 'label' => __( 'Get the next beta (pre-release) version of SSA', 'simply-schedule-appointments' ), + 'help' => __( 'Warning: Beta releases can be unstable. Please only enable this if instructed by support.', 'simply-schedule-appointments' ), + ), + 'quick_connect_gcal_mode' => + array ( + 'label' => __( 'Connect to Google Calendar with SSA Quick Connect', 'simply-schedule-appointments' ), + 'help' => __( 'Connect your Google Calendar without creating your own Google Cloud Platform project. Requires an active plugin license.', 'simply-schedule-appointments' ), + 'warning' => __( 'This is only available when SSA is not connected to Google Calendar. After toggling this setting, you will need to reconnect your main Google Calendar, and the team member calendars.', 'simply-schedule-appointments' ), + ), + 'display_appointment_revisions' => + array ( + 'label' => __( 'Appointments Revisions', 'simply-schedule-appointments' ), + 'help' => __( 'Display appointments revisions in appointment details view.', 'simply-schedule-appointments' ), + ), + 'separate_appointment_type_availability' => + array ( + 'label' => __( 'Give appointment types independent availability', 'simply-schedule-appointments' ), + 'help' => __( 'Enable each appointment type to have its own availability. Can book appointments of different types at the same time.', 'simply-schedule-appointments' ), + 'help_link' => __( 'Learn more about independent availability.', 'simply-schedule-appointments' ), + ), + 'pluginSettings' => + array ( + 'title' => __( 'Plugin Settings', 'simply-schedule-appointments' ), + 'label' => __( 'Remove data on uninstall', 'simply-schedule-appointments' ), + 'help' => __( 'Check this box if you would like SSA to completely remove all of its data when the plugin is deleted.', 'simply-schedule-appointments' ), + 'warning' => __( 'Your data will be deleted when the plugin is uninstalled and this action cannot be undone', 'simply-schedule-appointments' ), + ), + ), + 'jobs' => + array ( + 'title' => __( 'Developer Jobs', 'simply-schedule-appointments' ), + 'jobs' => + array ( + 'purge_appointments' => + array ( + 'title' => __( 'Purge Appointments', 'simply-schedule-appointments' ), + 'description' => __( 'If your booking app is slow, purging past and canceled appointments can help improve performance.', 'simply-schedule-appointments' ), + 'action' => __( 'Purge now', 'simply-schedule-appointments' ), + 'settings' => + array ( + 'past_appointments' => __( 'Past Appointments', 'simply-schedule-appointments' ), + 'abandoned_appointments' => __( 'Abandoned Appointments', 'simply-schedule-appointments' ), + 'past_canceled_appointments' => __( 'Past Canceled Appointments', 'simply-schedule-appointments' ), + 'future_canceled_appointments' => __( 'Future Canceled Appointments', 'simply-schedule-appointments' ), + ), + 'modal' => + array ( + 'title' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'text' => __( 'This process will remove appointments from the database and you won’t be able to recover them. A .csv file containing all deleted appointments will be generated at the end of this process.', 'simply-schedule-appointments' ), + 'close' => __( 'Close', 'simply-schedule-appointments' ), + 'confirm' => __( 'Confirm', 'simply-schedule-appointments' ), + 'loading' => __( 'Purging appointments...', 'simply-schedule-appointments' ), + 'success' => __( 'Appointments successfully removed from the database.', 'simply-schedule-appointments' ), + 'error' => __( 'Something went wrong while running this job:', 'simply-schedule-appointments' ), + 'download' => __( 'Download .csv file', 'simply-schedule-appointments' ), + ), + ), + ), + ), + 'import_export' => + array ( + 'title' => __( 'Import / Export', 'simply-schedule-appointments' ), + 'tabs' => + array ( + 'export' => __( 'Export', 'simply-schedule-appointments' ), + 'import' => __( 'Import', 'simply-schedule-appointments' ), + ), + 'options' => + array ( + 'settings' => + array ( + 'label' => __( 'Export Settings', 'simply-schedule-appointments' ), + 'description' => __( 'Export all SSA settings, including extensions.', 'simply-schedule-appointments' ), + ), + 'appointment_types' => + array ( + 'label' => __( 'Export All Appointment Types', 'simply-schedule-appointments' ), + 'description' => __( 'Export your appointment types. Requires settings export.', 'simply-schedule-appointments' ), + ), + 'appointments' => + array ( + 'label' => __( 'Export All Appointments', 'simply-schedule-appointments' ), + 'description' => __( 'Export all of your existing appointments. Requires settings and appointment types export.', 'simply-schedule-appointments' ), + ), + 'anonymize' => + array ( + 'label' => __( 'Anonymize appointment data', 'simply-schedule-appointments' ), + 'description' => __( 'Anonymize names, emails, and all other customer information for those who have booked appointments. Helpful for sharing debugging data with support.', 'simply-schedule-appointments' ), + ), + 'future_appointments_only' => + array ( + 'label' => __( 'Only export upcoming appointments', 'simply-schedule-appointments' ), + 'description' => __( 'Include only upcoming appointments, excluding all past appointments. Helpful for busy sites with lots of appointments.', 'simply-schedule-appointments' ), + ), + ), + 'generate_button' => __( 'Generate Code', 'simply-schedule-appointments' ), + 'generate_button_loading' => __( 'Generating...', 'simply-schedule-appointments' ), + 'copy' => __( 'Copy to clipboard', 'simply-schedule-appointments' ), + 'copied' => __( 'Export code copied to your clipboard.', 'simply-schedule-appointments' ), + 'send_to_support' => __( 'Send to Support', 'simply-schedule-appointments' ), + 'send_to_support_message' => __( 'SSA export code attached', 'simply-schedule-appointments' ), + 'send_to_support_success' => __( 'SSA export code sent to Support', 'simply-schedule-appointments' ), + 'import_button' => __( 'Import', 'simply-schedule-appointments' ), + 'import_button_loading' => __( 'Importing...', 'simply-schedule-appointments' ), + 'import_headline' => __( 'Import from another SSA install', 'simply-schedule-appointments' ), + 'import_copy' => __( 'Paste below the code you copied on another SSA install to import your data for things like plugin settings, appointment types, and scheduled appointments.', 'simply-schedule-appointments' ), + 'import_invalid_json_notice' => __( 'Invalid import code. Check if you have any issues on the SSA install you\'re trying to import from.', 'simply-schedule-appointments' ), + 'import_error_status_notice' => __( 'Oops! Something went wrong while importing your data. The server responded with the following errors:', 'simply-schedule-appointments' ), + 'import_success_redirect' => __( 'Click here if the page is not automatically refreshed.', 'simply-schedule-appointments' ), + 'restore_backup' => __( 'Restore previous backup', 'simply-schedule-appointments' ), + ), + 'embed_booking' => + array ( + 'embed_headline' => __( 'Embed the booking form in any website', 'simply-schedule-appointments' ), + 'embed_copy' => __( 'Copy the code below and paste it into any page to embed the booking form.', 'simply-schedule-appointments' ), + 'copied' => __( 'Embed code copied to your clipboard.', 'simply-schedule-appointments' ), + ), + 'google_calendar' => + array ( + 'title' => __( 'Google', 'simply-schedule-appointments' ), + 'connect' => __( 'Connect Google Account', 'simply-schedule-appointments' ), + 'disconnect' => __( 'Disconnect', 'simply-schedule-appointments' ), + 'disconnecting' => __( 'Disconnecting your Google Account', 'simply-schedule-appointments' ), + 'account' => __( 'Connected account', 'simply-schedule-appointments' ), + 'enterApi' => __( 'Enter your Google API information below.', 'simply-schedule-appointments' ), + 'goButton' => __( 'Go Now', 'simply-schedule-appointments' ), + 'clientId' => __( 'Client ID', 'simply-schedule-appointments' ), + 'authorize' => __( 'Authorize', 'simply-schedule-appointments' ), + 'googleAuthorize' => __( 'Sign in with Google', 'simply-schedule-appointments' ), + 'quickConnectRequiresLicense' => __( 'SSA Quick Connect requires an active license.', 'simply-schedule-appointments' ), + 'manualSetup' => __( 'Or setup credentials manually', 'simply-schedule-appointments' ), + 'quickConnectSetup' => __( 'or connect to Google Calendar with SSA Quick Connect', 'simply-schedule-appointments' ), + 'cloudAuthorize' => __( 'Authorize with SSA Quick Connect', 'simply-schedule-appointments' ), + 'saveAuthorize' => __( 'Save and Authorize', 'simply-schedule-appointments' ), + 'clientSecret' => __( 'Client Secret', 'simply-schedule-appointments' ), + 'loadingCalendars' => __( 'Getting your calendars', 'simply-schedule-appointments' ), + 'calendarSync' => __( 'Calendar Sync', 'simply-schedule-appointments' ), + 'appointmentTypesEdit' => __( 'Edit Appointment Types', 'simply-schedule-appointments' ), + 'authSuccess' => __( 'Success! Your Google Calendar account is connected.', 'simply-schedule-appointments' ), + 'authNext' => __( 'Next, edit your appointment types to check your Google Calendar for appointment conflicts or to add newly booked appointments to your Google Calendar', 'simply-schedule-appointments' ), + 'webMeetingsHeadline' => __( 'Google Meet Web Meetings', 'simply-schedule-appointments' ), + 'webMeetingsToggleLabel' => __( 'Enable adding Google Meet links to my calendar events', 'simply-schedule-appointments' ), + 'deleteEventsHeadline' => __( 'Delete Canceled / Rescheduled Events', 'simply-schedule-appointments' ), + 'deleteEventsToggleLabel' => __( 'Delete Google Calendar events when appointments are canceled or rescheduled', 'simply-schedule-appointments' ), + 'refreshIntervalHeadline' => __( 'Refresh Google Calendars', 'simply-schedule-appointments' ), + 'refreshIntervalDesc' => __( 'How often should we check Google Calendar for new events?', 'simply-schedule-appointments' ), + ), + 'calendar_events' => + array ( + 'card_title' => __( 'Calendar Events', 'simply-schedule-appointments' ), + 'title' => __( 'Customize your calendar event', 'simply-schedule-appointments' ), + 'description' => __( 'Personalize how your event content will look like when an event is created.', 'simply-schedule-appointments' ), + 'switch_label' => __( 'Customize event content', 'simply-schedule-appointments' ), + 'save' => __( 'Save Calendar Events Settings', 'simply-schedule-appointments' ), + 'success' => __( 'Calendar Events Settings saved.', 'simply-schedule-appointments' ), + 'sample_appointment_types' => __( 'Used on appointment types like', 'simply-schedule-appointments' ), + 'and' => __( 'and', 'simply-schedule-appointments' ), + 'and_more' => __( 'and more', 'simply-schedule-appointments' ), + 'tokenDetailsTitle' => __( 'Events Template Details', 'simply-schedule-appointments' ), + 'tokenDetails' => __( 'Events templates are created with Twig. The following tokens are available.', 'simply-schedule-appointments' ), + 'types' => + array ( + 'customer' => + array ( + 'title' => __( 'Customer Confirmation Screen Event', 'simply-schedule-appointments' ), + 'helper' => __( 'What your customer will see after clicking "Add to my calendar".', 'simply-schedule-appointments' ), + 'description' => __( 'Manually added to customer\'s calendar through the booking confirmation screen.', 'simply-schedule-appointments' ), + ), + 'individual_admin' => + array ( + 'title' => __( 'Admin Event', 'simply-schedule-appointments' ), + 'helper' => __( 'What you will see on the synced calendar.', 'simply-schedule-appointments' ), + 'helper_staff' => __( 'What you and your team members will see on the synced calendar.', 'simply-schedule-appointments' ), + 'description' => __( 'Automatically sent to the synced calendar in the Appointment Type’s Google settings tab.', 'simply-schedule-appointments' ), + 'description_staff' => __( 'Automatically sent to the synced calendar (and team members) in the Appointment Type’s Google settings tab.', 'simply-schedule-appointments' ), + ), + 'individual_shared' => + array ( + 'title' => __( 'Shared Event', 'simply-schedule-appointments' ), + 'helper' => __( 'What you and your customer will see if they are invited to the event.', 'simply-schedule-appointments' ), + 'description' => __( 'Google event added to the synced calendar in the Appointment Type’s Google settings tab. The event automatically invites the customer.', 'simply-schedule-appointments' ), + 'description_staff' => __( 'Google event added to the synced calendar in the Appointment Type’s Google settings tab. The event automatically invites the customer and team members assigned to the booking (if any).', 'simply-schedule-appointments' ), + ), + 'group_shared' => + array ( + 'title' => __( 'Shared Group Event', 'simply-schedule-appointments' ), + 'helper' => __( 'What you and all attendees will see on the calendar.', 'simply-schedule-appointments' ), + 'description' => __( 'Google Invite sent to the synced calendar in the Appointment Type’s Google settings tab, the Team members assigned to the booking (if any), and all of the customers in the group booking.', 'simply-schedule-appointments' ), + ), + 'group_admin' => + array ( + 'title' => __( 'Admin Group Event', 'simply-schedule-appointments' ), + 'helper' => __( 'What you will see on the calendar for group events.', 'simply-schedule-appointments' ), + 'helper_staff' => __( 'What you and your team members will see on the calendar for group events.', 'simply-schedule-appointments' ), + 'description' => __( 'Sent to the synced calendar selected in the Appointment Type’s Google settings tab and can be updated every time a customer books the Group appointment.', 'simply-schedule-appointments' ), + 'description_staff' => __( 'Sent to the synced calendar selected (and team members) in the Appointment Type’s Google settings tab and can be updated every time a customer books the Group appointment.', 'simply-schedule-appointments' ), + ), + ), + 'errors' => + array ( + 'required' => __( 'This field is required.', 'simply-schedule-appointments' ), + ), + ), + 'license' => + array ( + 'manage' => __( 'Manage License', 'simply-schedule-appointments' ), + 'key' => __( 'License Key', 'simply-schedule-appointments' ), + 'remove' => __( 'Remove', 'simply-schedule-appointments' ), + 'validate' => __( 'Validate', 'simply-schedule-appointments' ), + 'validating' => __( 'Validating...', 'simply-schedule-appointments' ), + 'addLicense' => __( 'Add your license key', 'simply-schedule-appointments' ), + 'renewLicense' => __( 'Renew Your License Key', 'simply-schedule-appointments' ), + 'purchaseLicense' => __( 'Purchase New License Key', 'simply-schedule-appointments' ), + 'needHelp' => __( 'Need help?', 'simply-schedule-appointments' ), + 'currentLicense' => __( 'Current License', 'simply-schedule-appointments' ), + 'edition' => __( 'Edition', 'simply-schedule-appointments' ), + 'upgrade' => __( 'Upgrade', 'simply-schedule-appointments' ), + 'collectLicense' => __( '%1$s Login %2$s to your account to collect your license key', 'simply-schedule-appointments' ), + 'contactSupport' => __( 'Or, %1$s contact %2$s our support team and we can help you find your license key.', 'simply-schedule-appointments' ), + ), + 'mailchimp' => + array ( + 'title' => __( 'MailChimp', 'simply-schedule-appointments' ), + 'api_key' => __( 'API Key', 'simply-schedule-appointments' ), + 'apiKeyError' => __( 'Please enter a valid API key', 'simply-schedule-appointments' ), + 'api_key_helper_label' => __( 'Where do I find this?', 'simply-schedule-appointments' ), + 'saveAuthorize' => __( 'Save and authorize', 'simply-schedule-appointments' ), + 'lists' => __( 'MailChimp Lists', 'simply-schedule-appointments' ), + 'loadingLists' => __( 'Getting your lists', 'simply-schedule-appointments' ), + 'deauthorize' => __( 'Disconnecting your account', 'simply-schedule-appointments' ), + ), + 'payments' => + array ( + 'title' => __( 'Payments', 'simply-schedule-appointments' ), + 'returnToPayments' => __( 'Return to Payments', 'simply-schedule-appointments' ), + 'basics' => __( 'Basic Settings', 'simply-schedule-appointments' ), + 'basicsMessage' => __( 'The required settings for this payment gateway', 'simply-schedule-appointments' ), + 'advanced' => __( 'Advanced Settings', 'simply-schedule-appointments' ), + 'advancedMessage' => __( 'Optional settings to fine-tune the way this payment gateway works', 'simply-schedule-appointments' ), + 'displayTitle' => __( 'Display title', 'simply-schedule-appointments' ), + 'displayTitleHelp' => __( 'This controls the title which your customer sees during checkout.', 'simply-schedule-appointments' ), + 'displayTitleError' => __( 'The display title is required', 'simply-schedule-appointments' ), + 'description' => __( 'Description', 'simply-schedule-appointments' ), + 'descriptionHelp' => __( 'This controls the description which your customer sees during checkout.', 'simply-schedule-appointments' ), + 'statementDescriptor' => __( 'Statement Descriptor', 'simply-schedule-appointments' ), + 'statementDescriptorError' => __( '10 characters maximum. Alphanumeric, at least one letter, and no < > \\ \' or "', 'simply-schedule-appointments' ), + 'statementDescriptorHelp' => __( 'This gets displayed on your customer\'s credit card statement (after first 10 characters of your company name)', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes to this payment gateway will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'defaultCurrency' => __( 'Default currency', 'simply-schedule-appointments' ), + 'paypal' => + array ( + 'email' => __( 'PayPal email address', 'simply-schedule-appointments' ), + 'emailHelp' => __( 'Please enter your PayPal email address; this is needed in order to take payment.', 'simply-schedule-appointments' ), + 'emailError' => __( 'A valid email address is required.', 'simply-schedule-appointments' ), + 'enableSandbox' => __( 'Enable PayPal sandbox', 'simply-schedule-appointments' ), + 'sandboxHelp1' => __( 'PayPal sandbox can be used to test payments.', 'simply-schedule-appointments' ), + 'sandboxHelp2' => __( 'Sign up for a developer account.', 'simply-schedule-appointments' ), + 'identityToken' => __( 'PayPal identity token', 'simply-schedule-appointments' ), + 'identityTokenHelp' => __( 'Optionally enable Payment Data Transfer (Profile > Profile and Settings > My Selling Tools > Website Preferences) and then copy your identity token here. This will allow payments to be verified without the need for PayPal IPN.', 'simply-schedule-appointments' ), + 'noConnection' => __( 'PayPal is not connected to your PayPal account', 'simply-schedule-appointments' ), + 'sandboxMode' => __( 'PayPal is in sandbox mode.', 'simply-schedule-appointments' ), + 'ipn_url' => __( 'IPN Notification URL', 'simply-schedule-appointments' ), + 'ipnCopied' => __( 'Your PayPal IPN Notification URL has been copied to your clipboard', 'simply-schedule-appointments' ), + 'ipnHelpPrefix' => __( 'You must add this URL to your PayPal settings.', 'simply-schedule-appointments' ), + 'ipnHelp' => __( 'Get instructions.', 'simply-schedule-appointments' ), + 'sslWarning' => __( 'A valid SSL certificate is required to use PayPal payments', 'simply-schedule-appointments' ), + ), + 'stripe' => + array ( + 'validation_errors' => + array ( + 'publishable_key' => + array ( + 'regexValidator' => __( 'Please enter a valid publishable key', 'simply-schedule-appointments' ), + 'required' => __( 'A publishable key is required', 'simply-schedule-appointments' ), + ), + 'secret_key' => + array ( + 'regexValidator' => __( 'Please enter a valid secret key', 'simply-schedule-appointments' ), + 'required' => __( 'A secret key is required', 'simply-schedule-appointments' ), + ), + 'webhook_secret' => + array ( + 'regexValidator' => __( 'Please enter a valid webhook secret', 'simply-schedule-appointments' ), + ), + 'test_publishable_key' => + array ( + 'regexValidator' => __( 'Please enter a valid publishable test key', 'simply-schedule-appointments' ), + 'required' => __( 'The test publishable key is required for test mode', 'simply-schedule-appointments' ), + ), + 'test_secret_key' => + array ( + 'regexValidator' => __( 'Please enter a valid secret test key', 'simply-schedule-appointments' ), + 'required' => __( 'The test secret key is required for test mode', 'simply-schedule-appointments' ), + ), + 'test_webhook_secret' => + array ( + 'regexValidator' => __( 'Please enter a valid test webhook secret', 'simply-schedule-appointments' ), + ), + ), + 'noPaymentMethodsError' => __( 'Please select at least one payment method', 'simply-schedule-appointments' ), + 'noCardPaymentMethodWarning' => __( 'Payments may not work if card is disabled and other payment methods are not configured properly', 'simply-schedule-appointments' ), + 'publishableKey' => __( 'Publishable key', 'simply-schedule-appointments' ), + 'publishableKeyHelp' => __( 'Get your API keys from your Stripe account.', 'simply-schedule-appointments' ), + 'secretKey' => __( 'Secret key', 'simply-schedule-appointments' ), + 'secretKeyHelp' => __( 'Get your API keys from your Stripe account.', 'simply-schedule-appointments' ), + 'webhook' => __( 'Stripe Webhook / Event Destination URL', 'simply-schedule-appointments' ), + 'webhookHelpPrefix' => __( 'You must add this URL to', 'simply-schedule-appointments' ), + 'webhookHelpTarget' => __( 'your Stripe account Webhook / Event Destination settings', 'simply-schedule-appointments' ), + 'webhookCopied' => __( 'The webhook / event destination URL has been copied to your clipboard', 'simply-schedule-appointments' ), + 'webhookSecret' => __( 'Webhook / Event Destination Signing Secret', 'simply-schedule-appointments' ), + 'webhookSecretHelpPrefix' => __( 'Get your signing secret from', 'simply-schedule-appointments' ), + 'paymentMethods' => __( 'Payment Methods', 'simply-schedule-appointments' ), + 'paymentMethodsHelp' => __( 'Make sure to enable the selected payment methods in your Stripe default payment method configuration.', 'simply-schedule-appointments' ), + 'testMode' => __( 'Enable test mode', 'simply-schedule-appointments' ), + 'testModeHelp' => __( 'Place the payment gateway in test mode using test API keys.', 'simply-schedule-appointments' ), + 'testPublishableKey' => __( 'Test publishable key', 'simply-schedule-appointments' ), + 'testPublishableKeyHelp' => __( 'Get your API keys from your Stripe account.', 'simply-schedule-appointments' ), + 'testSecretKey' => __( 'Test secret key', 'simply-schedule-appointments' ), + 'testSecretKeyHelp' => __( 'Get your API keys from your Stripe account.', 'simply-schedule-appointments' ), + 'testWebhookSecret' => __( 'Test Webhook / Event Destination Signing Secret', 'simply-schedule-appointments' ), + 'noConnection' => __( 'Stripe is not connected to your Stripe account', 'simply-schedule-appointments' ), + 'testModeWarning' => __( 'Stripe is in test mode.', 'simply-schedule-appointments' ), + ), + ), + 'notifications' => + array ( + 'title' => __( 'Notifications', 'simply-schedule-appointments' ), + 'intro' => __( 'These notifications are sent for this appointment type:', 'simply-schedule-appointments' ), + 'empty' => __( 'There are no notifications.', 'simply-schedule-appointments' ), + 'empty_appointment_type' => __( 'There are no notifications sent for this appointment type', 'simply-schedule-appointments' ), + 'returnToNotifications' => __( 'Return to notifications', 'simply-schedule-appointments' ), + 'customer_phone' => __( 'Customer phone number', 'simply-schedule-appointments' ), + 'team_member_phone' => __( 'Team member phone number', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'addNew' => __( 'Add a new notification', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit notification', 'simply-schedule-appointments' ), + 'editAll' => __( 'Edit notifications', 'simply-schedule-appointments' ), + ), + 'selected' => __( 'Notifications Selected', 'simply-schedule-appointments' ), + 'optinSettings' => + array ( + 'title' => __( 'Notification Opt-In', 'simply-schedule-appointments' ), + 'description' => __( 'Enable this option to let customers choose whether they want to receive notifications for their appointments.', 'simply-schedule-appointments' ), + 'enabled' => __( 'Enabled', 'simply-schedule-appointments' ), + 'explanation' => __( 'Set the text that will be displayed to customers when they book an appointment. The label appears next to the checkbox, and the description provides additional details.', 'simply-schedule-appointments' ), + 'labelField' => + array ( + 'label' => __( 'Checkbox Label (required)', 'simply-schedule-appointments' ), + 'helptext' => __( 'This is the label that will be displayed next to the checkbox.', 'simply-schedule-appointments' ), + ), + 'descriptionField' => + array ( + 'label' => __( 'Checkbox Description', 'simply-schedule-appointments' ), + 'helptext' => __( 'This text will be displayed below the checkbox.', 'simply-schedule-appointments' ), + ), + ), + 'fields' => + array ( + 'title' => __( 'Name', 'simply-schedule-appointments' ), + 'type' => __( 'Type', 'simply-schedule-appointments' ), + 'email' => __( 'Email', 'simply-schedule-appointments' ), + 'sms' => __( 'SMS', 'simply-schedule-appointments' ), + 'sentTo' => __( 'Send to', 'simply-schedule-appointments' ), + 'anchorText' => __( 'Select predefined email option', 'simply-schedule-appointments' ), + 'smsTo' => __( 'Send to', 'simply-schedule-appointments' ), + 'cc' => __( 'Cc', 'simply-schedule-appointments' ), + 'bcc' => __( 'Bcc', 'simply-schedule-appointments' ), + 'replyTo' => __( 'Reply-to', 'simply-schedule-appointments' ), + 'trigger' => __( 'Trigger', 'simply-schedule-appointments' ), + 'triggerLegend' => __( 'When to send this notification', 'simply-schedule-appointments' ), + 'when' => __( 'When', 'simply-schedule-appointments' ), + 'subject' => __( 'Subject', 'simply-schedule-appointments' ), + 'message' => __( 'Message', 'simply-schedule-appointments' ), + ), + 'filter' => + array ( + 'filter' => __( 'Filter', 'simply-schedule-appointments' ), + 'legend' => __( 'Notification Filters', 'simply-schedule-appointments' ), + 'empty_label' => __( 'No matching notifications', 'simply-schedule-appointments' ), + 'empty_desc' => __( 'No notifications match your filter selections. Adjust the filters or reset them.', 'simply-schedule-appointments' ), + 'fields' => + array ( + 'type' => __( 'Notification Type', 'simply-schedule-appointments' ), + 'appointment_type' => __( 'Appointment Type', 'simply-schedule-appointments' ), + ), + 'reset' => __( 'Reset Filters', 'simply-schedule-appointments' ), + 'selected' => __( 'selected', 'simply-schedule-appointments' ), + ), + 'messages' => + array ( + 'titleError' => __( 'Title is required', 'simply-schedule-appointments' ), + 'sentToError' => __( 'Please enter a valid email address', 'simply-schedule-appointments' ), + 'smsToError' => __( 'Please select at least one recipient', 'simply-schedule-appointments' ), + 'triggerError' => __( 'You must select a trigger for a notification', 'simply-schedule-appointments' ), + 'appointmentTypesError' => __( 'Please select at least one appointment type', 'simply-schedule-appointments' ), + 'subjectError' => __( 'Subject is required', 'simply-schedule-appointments' ), + 'messageError' => __( 'Message is required', 'simply-schedule-appointments' ), + 'noAdminPhone' => __( 'No admin phone number is set', 'simply-schedule-appointments' ), + 'noCustomerEmail' => __( 'No appointment types have phone number fields', 'simply-schedule-appointments' ), + 'replyToHelpText' => __( 'Reply-To is filled in automatically depending on the recipient (admin, staff, or customer). Leave it empty unless you need to set your own.', 'simply-schedule-appointments' ), + ), + 'tokenDetailsTitle' => __( 'Notification Template Details', 'simply-schedule-appointments' ), + 'tokenDetails' => __( 'Notification templates are created with Twig. The following tokens are available.', 'simply-schedule-appointments' ), + 'tokens' => + array ( + 'admin_email' => __( 'The appointment admin email', 'simply-schedule-appointments' ), + 'instructions' => __( 'The optional customer instructions associated with the selected appointment type.', 'simply-schedule-appointments' ), + 'Appointment.AppointmentType.title' => __( 'The title of the selected appointment type', 'simply-schedule-appointments' ), + 'Appointment.web_meeting_url' => __( 'The URL of the virtual meeting for the appointment', 'simply-schedule-appointments' ), + 'Appointment.web_meeting_password' => __( 'The password required to access the virtual meeting', 'simply-schedule-appointments' ), + 'Appointment.customer_information_summary' => __( 'Summary of the customer information fields for the appointment type, in customer\'s locale when available', 'simply-schedule-appointments' ), + 'Appointment.customer_information_summary_admin_locale' => __( 'Summary of the customer information fields for the appointment type, in the admin\'s locale', 'simply-schedule-appointments' ), + 'Appointment.customer_information.Name' => __( 'The customer\'s name', 'simply-schedule-appointments' ), + 'Appointment.date_timezone' => __( 'The admin timezone set in general settings', 'simply-schedule-appointments' ), + 'Appointment.customer_timezone' => __( 'The timezone to display for the customer', 'simply-schedule-appointments' ), + 'Appointment.public_edit_url' => __( 'The link to edit, cancel, or reschedule the appointment', 'simply-schedule-appointments' ), + 'Appointment.start_date' => __( 'The start date and time of the appointment', 'simply-schedule-appointments' ), + 'location' => __( 'The appointment location', 'simply-schedule-appointments' ), + 'customer_name' => __( 'The customer\'s name', 'simply-schedule-appointments' ), + 'customer_email' => __( 'The customer\'s email address.', 'simply-schedule-appointments' ), + 'attendees_list' => __( 'The list of all attendee\'s names for the appointment.', 'simply-schedule-appointments' ), + 'Global.home_url' => __( 'The URL of the site where Simply Schedule Appointments is installed', 'simply-schedule-appointments' ), + 'Global.company_name' => __( 'The name of the site where Simply Schedule Appointments is installed', 'simply-schedule-appointments' ), + 'Global.timezone_string' => __( 'The timezone selected in the Simply Schedule Appointments settings.', 'simply-schedule-appointments' ), + 'booking_url' => __( 'The page URL where the appointment booking happened.', 'simply-schedule-appointments' ), + 'booking_title' => __( 'The page title where the appointment booking happened.', 'simply-schedule-appointments' ), + 'booking_post_id' => __( 'The page ID where the appointment booking happened.', 'simply-schedule-appointments' ), + 'refund_policy' => __( 'The refund policy of the selected appointment type', 'simply-schedule-appointments' ), + 'add_to_calendar_link.ics' => __( 'The link to add the appointment to your calendar via an .ics file.', 'simply-schedule-appointments' ), + 'add_to_calendar_link.gcal' => __( 'The link to add the appointment to your Google Calendar.', 'simply-schedule-appointments' ), + 'cancelation_note' => __( 'An optional note added when canceling the appointment', 'simply-schedule-appointments' ), + 'canceled_by_name' => __( 'The name of the user who canceled the appointment', 'simply-schedule-appointments' ), + 'rescheduling_note' => __( 'An optional note added when rescheduling the appointment', 'simply-schedule-appointments' ), + 'rescheduled_by_name' => __( 'The name of the user who rescheduled the appointment', 'simply-schedule-appointments' ), + 'mepr_membership_title' => __( 'MemberPress Integration: the membership the appointment is booked under.', 'simply-schedule-appointments' ), + 'Appointment.customer_prev_start_date' => __( 'The previous start date of an appointment that has been rescheduled, in the customer\'s timezone', 'simply-schedule-appointments' ), + 'Appointment.customer_prev_start_dates' => __( 'List of previous start dates of an appointment that has been rescheduled, in the customer\'s timezone', 'simply-schedule-appointments' ), + 'Appointment.business_prev_start_date' => __( 'The previous start date of an appointment that has been rescheduled, in the business timezone', 'simply-schedule-appointments' ), + 'Appointment.business_prev_start_dates' => __( 'List of previous start dates of an appointment that has been rescheduled, in the business timezone', 'simply-schedule-appointments' ), + 'TEC.venue.name' => __( 'The name of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.venue.address' => __( 'The address of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.venue.city' => __( 'The city of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.venue.state' => __( 'The state of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.venue.province' => __( 'The province of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.venue.zip' => __( ' The zip code of the venue in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.organizer.name' => __( 'The name of the organizer in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.organizer.phone' => __( 'The phone number of the organizer in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.organizer.email' => __( 'The email of the organizer in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.organizer.website' => __( 'The website of the organizer in the Events Calendar', 'simply-schedule-appointments' ), + 'TEC.categories.category_number' => __( 'The name of the category in the Events Calendar, please replace the category number with an actual number. For example, 0 for the first category', 'simply-schedule-appointments' ), + 'TEC.categories|join(", " , " and ")' => __( 'All the categories of the event', 'simply-schedule-appointments' ), + ), + 'triggers' => + array ( + 'appointment_booked' => __( 'Appointment Booked', 'simply-schedule-appointments' ), + 'appointment_customer_information_edited' => __( 'Appointment Edited', 'simply-schedule-appointments' ), + 'appointment_canceled' => __( 'Appointment Canceled', 'simply-schedule-appointments' ), + 'appointment_rescheduled' => __( 'Appointment Rescheduled', 'simply-schedule-appointments' ), + 'appointment_start_date' => __( 'Time of Appointment', 'simply-schedule-appointments' ), + ), + 'warnings' => + array ( + 'cronWarning' => __( 'This notification might be delayed or not sent as expected.', 'simply-schedule-appointments' ), + 'cronWarningNoShow' => __( 'This notification will be canceled in the event of a no-show.', 'simply-schedule-appointments' ), + 'cronLinkText' => __( 'More details', 'simply-schedule-appointments' ), + ), + 'when' => + array ( + 'after' => __( 'After', 'simply-schedule-appointments' ), + 'before' => __( 'Before', 'simply-schedule-appointments' ), + ), + 'confirmDelete' => __( 'Delete this notification?', 'simply-schedule-appointments' ), + 'confirmDeleteCancel' => __( 'Keep', 'simply-schedule-appointments' ), + 'confirmDeleteOk' => __( 'Delete', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes to this notification will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'ccSent' => __( 'Cc/Bcc', 'simply-schedule-appointments' ), + 'showCcBccReplyToLabel' => __( 'CC/BCC/Reply-To', 'simply-schedule-appointments' ), + 'hideCcBccReplyToLabel' => __( 'Hide CC/BCC/Reply-To', 'simply-schedule-appointments' ), + 'preview' => + array ( + 'title' => __( 'Live Preview', 'simply-schedule-appointments' ), + 'description' => __( 'This is a live preview of how your message will look when it\'s sent out.', 'simply-schedule-appointments' ), + 'gettingAppointments' => __( 'Getting appointments...', 'simply-schedule-appointments' ), + 'selectAppointment' => __( 'Select an appointment', 'simply-schedule-appointments' ), + 'selectAppointmentType' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'formattingPreview' => __( 'Formatting your preview...', 'simply-schedule-appointments' ), + ), + ), + 'sms' => + array ( + 'title' => __( 'SMS', 'simply-schedule-appointments' ), + 'basics' => __( 'Basic settings', 'simply-schedule-appointments' ), + 'basicsMessage' => __( 'The required settings for Twilio', 'simply-schedule-appointments' ), + 'twilioAccountSid' => __( 'Twilio Account SID', 'simply-schedule-appointments' ), + 'twilioAccountSidError' => __( 'A Twilio Account SID is required', 'simply-schedule-appointments' ), + 'twilioAccountSidHelp' => __( 'Get your Twilio Account SID from your Twilio account', 'simply-schedule-appointments' ), + 'twilioAuthToken' => __( 'Twilio Auth Token', 'simply-schedule-appointments' ), + 'twilioAuthTokenError' => __( 'A Twilio Auth Token is required', 'simply-schedule-appointments' ), + 'twilioAuthTokenHelp' => __( 'Get your Twilio Auth Token from your Twilio account', 'simply-schedule-appointments' ), + 'twilioSendFromPhone' => __( 'Sending Phone Number (from Twilio)', 'simply-schedule-appointments' ), + 'twilioSendFromPhoneError' => __( 'You need a Twilio phone number to send SMS messages', 'simply-schedule-appointments' ), + 'twilioSendFromPhoneHelp' => __( 'Get a Twilio phone number', 'simply-schedule-appointments' ), + 'advanced' => __( 'Advanced settings', 'simply-schedule-appointments' ), + 'advancedMessage' => __( 'Optional advanced settings for Twilio', 'simply-schedule-appointments' ), + 'testMode' => __( 'Test mode', 'simply-schedule-appointments' ), + 'testModeHelp' => __( 'Place Twilio in test mode to use test account SID and test auth token', 'simply-schedule-appointments' ), + 'testModeWarning' => __( 'Twilio is in test mode.', 'simply-schedule-appointments' ), + 'twilioTestAccountSid' => __( 'Twilio Test Account SID', 'simply-schedule-appointments' ), + 'twilioTestAccountSidError' => __( 'The test account SID is required for test mode', 'simply-schedule-appointments' ), + 'twilioTestAccountSidHelp' => __( 'Get your Twilio Test Account SID from your Twilio account', 'simply-schedule-appointments' ), + 'twilioTestAuthToken' => __( 'Twilio Test Auth Token', 'simply-schedule-appointments' ), + 'twilioTestAuthTokenError' => __( 'The test account auth token is required for test mode', 'simply-schedule-appointments' ), + 'twilioTestAuthTokenHelp' => __( 'Get your Twilio Test Account Auth Token from your Twilio account', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes to the SMS settings will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'noConnection' => __( 'Twilio is enabled, but your account is not connected.', 'simply-schedule-appointments' ), + 'onlyPhoneFields' => __( 'Only appointment types with at least one phone number field are displayed.', 'simply-schedule-appointments' ), + 'noPhoneFields' => __( 'None of your appointment types have phone number fields', 'simply-schedule-appointments' ), + 'noPhoneFieldsTitle' => __( 'No phone numbers', 'simply-schedule-appointments' ), + 'noPhoneFieldsContent' => __( 'None of your appointments types is collecting a phone number from your customers. There is no way to send an SMS notification.', 'simply-schedule-appointments' ), + 'sendTest' => __( 'Send a test message', 'simply-schedule-appointments' ), + 'sendTestMessage' => __( 'Test your Twilio API settings and ensure messages are delivered', 'simply-schedule-appointments' ), + 'sendTestTo' => __( 'Send to', 'simply-schedule-appointments' ), + 'sendTestToError' => __( 'Please enter a valid phone number', 'simply-schedule-appointments' ), + 'sendTestToHelp' => __( 'The phone number to send a test message to', 'simply-schedule-appointments' ), + 'sendTestSuccess' => __( 'Test message sent!', 'simply-schedule-appointments' ), + 'sendTestFailure' => __( 'Unable to send test message. Please check your settings.', 'simply-schedule-appointments' ), + ), + 'staff' => + array ( + 'title' => __( 'Team', 'simply-schedule-appointments' ), + 'action' => __( 'Manage team', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'addNew' => __( 'Add new team member', 'simply-schedule-appointments' ), + 'create' => __( 'Create team member', 'simply-schedule-appointments' ), + 'saved' => __( 'Changes saved', 'simply-schedule-appointments' ), + 'manageTeamMembers' => __( 'Manage team members', 'simply-schedule-appointments' ), + ), + 'appointment' => + array ( + 'with' => __( 'with', 'simply-schedule-appointments' ), + ), + 'appointmentType' => + array ( + 'staffEnableHeading' => __( 'Does this appointment type require a team member?', 'simply-schedule-appointments' ), + 'staffEnableDesc' => __( 'Should each customer booking this appointment type be matched with a team member?', 'simply-schedule-appointments' ), + 'allLabel' => __( 'All:', 'simply-schedule-appointments' ), + 'allDesc' => __( 'All of the selected team members are needed for an appointment', 'simply-schedule-appointments' ), + 'userPreferenceLabel' => __( 'User preference:', 'simply-schedule-appointments' ), + 'userPreferenceDesc' => __( 'Allow customer to select a team member for their appointment', 'simply-schedule-appointments' ), + 'anyLabel' => __( 'Any:', 'simply-schedule-appointments' ), + 'anyDesc' => __( 'Match each customer with any one of the selected team members', 'simply-schedule-appointments' ), + 'noneLabel' => __( 'None:', 'simply-schedule-appointments' ), + 'noneDesc' => __( 'No team members are needed for this appointment type', 'simply-schedule-appointments' ), + 'teamLabel' => __( 'Team members who accept appointments of this type', 'simply-schedule-appointments' ), + 'staffWarning' => __( 'No team members are set to take appointments of this type. Please either set required to \'None\' or select at least one team member', 'simply-schedule-appointments' ), + 'noWebMeetingUrl' => __( 'No web meeting URL', 'simply-schedule-appointments' ), + 'assignmentLabel' => __( 'Choose how a team member is assigned', 'simply-schedule-appointments' ), + 'randomAssignmentLabel' => __( 'Random:', 'simply-schedule-appointments' ), + 'randomAssignmentDesc' => __( 'Random assignment of appointments for team members', 'simply-schedule-appointments' ), + 'roundRobinAssignmentLabel' => __( 'Round Robin:', 'simply-schedule-appointments' ), + 'roundRobinAssignmentDesc' => __( 'Equal assignment of appointments for team members', 'simply-schedule-appointments' ), + ), + 'search' => + array ( + 'closeSearch' => __( 'Close and clear search field', 'simply-schedule-appointments' ), + 'clearSearch' => __( 'Clear search text', 'simply-schedule-appointments' ), + 'searchLabel' => __( 'Search team members', 'simply-schedule-appointments' ), + ), + 'confirmDelete' => __( 'Delete this team member?', 'simply-schedule-appointments' ), + 'confirmDeleteOk' => __( 'Delete', 'simply-schedule-appointments' ), + 'confirmDeleteCancel' => __( 'Keep', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes to this team member will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'confirmImcompleteContent' => __( 'Please enter the required fields and save if you\'d like to keep this team member. Otherwise, you can delete this team member.', 'simply-schedule-appointments' ), + 'confirmIncompleteCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'connectedUser' => __( 'WordPress User', 'simply-schedule-appointments' ), + 'creatUser' => __( 'Can this user login and manage their own appointments?', 'simply-schedule-appointments' ), + 'connectedUserEdit' => __( 'Edit User Profile', 'simply-schedule-appointments' ), + 'requireGcalReconnect' => __( 'Require Google Calendar Reconnect', 'simply-schedule-appointments' ), + 'editExisting' => + array ( + 'publish' => + array ( + 'title' => __( 'This team member already exists', 'simply-schedule-appointments' ), + 'content-html' => __( 'Would you like to edit their profile?', 'simply-schedule-appointments' ), + 'ok-text' => __( 'Edit team member', 'simply-schedule-appointments' ), + 'cancel-text' => __( 'No thanks', 'simply-schedule-appointments' ), + ), + 'delete' => + array ( + 'title' => __( 'This team member already exists', 'simply-schedule-appointments' ), + 'content-html' => __( 'This team member has been deleted. Would you like to restore their profile?', 'simply-schedule-appointments' ), + 'ok-text' => __( 'Restore team member', 'simply-schedule-appointments' ), + 'cancel-text' => __( 'No thanks', 'simply-schedule-appointments' ), + ), + 'draft' => + array ( + 'title' => __( 'This team member already exists', 'simply-schedule-appointments' ), + 'content-html' => __( 'This team member is marked inactive. Would you like to reactivate their profile?', 'simply-schedule-appointments' ), + 'ok-text' => __( 'Activate team member', 'simply-schedule-appointments' ), + 'cancel-text' => __( 'No thanks', 'simply-schedule-appointments' ), + ), + ), + 'editProfile' => + array ( + 'contact' => __( 'Contact', 'simply-schedule-appointments' ), + 'permissions' => __( 'Permissions', 'simply-schedule-appointments' ), + 'availability' => __( 'Availability', 'simply-schedule-appointments' ), + 'web_meetings' => __( 'Web Meetings', 'simply-schedule-appointments' ), + ), + 'emailTaken' => + array ( + 'title' => __( 'Email address not available', 'simply-schedule-appointments' ), + 'content-html' => __( 'This email address is already assigned to another team member', 'simply-schedule-appointments' ), + ), + 'emptyEditTitle' => __( 'Editing team member', 'simply-schedule-appointments' ), + 'emptyLabel' => __( 'No team members added yet', 'simply-schedule-appointments' ), + 'emptyInactiveLabel' => __( 'No inactive team members', 'simply-schedule-appointments' ), + 'emptyDescription' => __( 'Looks like you\'re on your own so far. Click the button to add a new team member.', 'simply-schedule-appointments' ), + 'emptyInactiveDescription' => __( 'Looks like there aren\'t any inactive team members', 'simply-schedule-appointments' ), + 'fields' => + array ( + 'name' => + array ( + 'label' => __( 'Name', 'simply-schedule-appointments' ), + 'error' => __( 'Name is required', 'simply-schedule-appointments' ), + ), + 'display_name' => + array ( + 'label' => __( 'Display name', 'simply-schedule-appointments' ), + 'error' => __( 'Display name is required', 'simply-schedule-appointments' ), + 'help' => __( 'Name that will be displayed to customers booking appointments', 'simply-schedule-appointments' ), + ), + 'email' => + array ( + 'label' => __( 'Email', 'simply-schedule-appointments' ), + 'error' => __( 'Valid email address is required', 'simply-schedule-appointments' ), + 'errorTaken' => __( 'This email address is already assigned to another team member or a WordPress user', 'simply-schedule-appointments' ), + 'help' => __( 'Enter an email address to get started', 'simply-schedule-appointments' ), + ), + 'phone' => + array ( + 'label' => __( 'Phone', 'simply-schedule-appointments' ), + ), + 'blackout' => + array ( + 'label' => __( 'Can this team member manage their own blackout dates?', 'simply-schedule-appointments' ), + 'message' => __( 'This team member has blacked out dates.', 'simply-schedule-appointments' ), + 'editText' => __( 'View and edit blackout dates', 'simply-schedule-appointments' ), + ), + 'gcalendar' => + array ( + 'label' => __( 'Can this team member connect their own Google account?', 'simply-schedule-appointments' ), + 'message' => __( 'This person has connected their Google account.', 'simply-schedule-appointments' ), + ), + 'appointment_types' => + array ( + 'error' => __( 'This team member isn\'t connected to any appointment types and cannot take appointments', 'simply-schedule-appointments' ), + 'error_staff' => __( 'You aren\'t connected to any appointment types and cannot take appointments. Please contact site admin.', 'simply-schedule-appointments' ), + 'all' => __( 'All appointment types', 'simply-schedule-appointments' ), + ), + 'manages_working_hours' => + array ( + 'label' => __( 'Can this team member manage their own working hours?', 'simply-schedule-appointments' ), + ), + 'working_hours' => + array ( + 'label' => __( 'Working Hours', 'simply-schedule-appointments' ), + 'timezone_label' => __( 'Working hours are in timezone:', 'simply-schedule-appointments' ), + 'current_time_label' => __( 'Current time is:', 'simply-schedule-appointments' ), + ), + 'custom_working_hours' => + array ( + 'legend' => __( 'Use custom working hours?', 'simply-schedule-appointments' ), + 'labelOff' => __( 'Use default working hours', 'simply-schedule-appointments' ), + 'labelOn' => __( 'Set custom working hours', 'simply-schedule-appointments' ), + 'helpOn' => __( 'Select custom working hours. Team will be available for appointments where team schedule overlaps with appointment type schedule', 'simply-schedule-appointments' ), + 'helpOff' => __( 'Use schedule set for each appointment type', 'simply-schedule-appointments' ), + ), + ), + 'google' => + array ( + 'actions' => + array ( + 'connect' => __( 'Connect Google account', 'simply-schedule-appointments' ), + ), + 'admin' => + array ( + 'staff_connected' => __( 'This team member has connected their Google account.', 'simply-schedule-appointments' ), + 'staff_no_calendars' => __( 'This team member has NOT selected any calendars to check for conflicts.', 'simply-schedule-appointments' ), + 'staff_calendars' => __( 'This team member is checking calendars for conflicts:', 'simply-schedule-appointments' ), + 'staff_not_connected' => __( 'This team member has not connected their Google account.', 'simply-schedule-appointments' ), + 'calendars_connected' => __( 'Calendars Connected:', 'simply-schedule-appointments' ), + ), + 'check_settings' => __( 'There was a problem fetching your calendars. Please contact the site admin.', 'simply-schedule-appointments' ), + ), + 'linkUser' => + array ( + 'title' => __( 'Link to WordPress user?', 'simply-schedule-appointments' ), + 'htmlIntro' => __( 'This email address belongs to a WordPress user account:', 'simply-schedule-appointments' ), + 'htmlExplanation' => __( 'Do you want to connect this team member to this WordPress user? If connected, the team member will be able to log in and manage their own profile and appointments.', 'simply-schedule-appointments' ), + 'okText' => __( 'Connect to user', 'simply-schedule-appointments' ), + 'cancelText' => __( 'Cancel email address change', 'simply-schedule-appointments' ), + ), + 'loading' => __( 'Loading team', 'simply-schedule-appointments' ), + 'not_connected' => + array ( + 'title' => __( 'Team member is not a WordPress user', 'simply-schedule-appointments' ), + 'desc' => __( 'Since this team member cannot log into WordPress, they can\'t be assigned permissions to edit or manage their own profile. You can add a user to WordPress with this email address to connect this team member to a WordPress user:', 'simply-schedule-appointments' ), + 'addNew' => __( 'Add new WordPress user', 'simply-schedule-appointments' ), + ), + 'notices' => + array ( + 'noAppointmentTypes' => __( 'You don\'t have any appointment types set up yet.', 'simply-schedule-appointments' ), + 'noStaffAppointmentTypes' => __( 'None of your appointment types are set up to match customers to team members. Be sure to edit your appointment types to enable team.', 'simply-schedule-appointments' ), + 'someStaffAppointmentTypes' => __( 'Only appointment types that have team enabled are shown', 'simply-schedule-appointments' ), + ), + 'profile' => __( 'My profile', 'simply-schedule-appointments' ), + 'selectStaff' => __( 'Select staff to display', 'simply-schedule-appointments' ), + 'status' => + array ( + 'inactive' => __( 'Team - inactive', 'simply-schedule-appointments' ), + ), + 'webMeetings' => + array ( + 'headline' => __( 'Web Meetings', 'simply-schedule-appointments' ), + 'web_meetings_url' => __( 'Enter a custom URL for a web meeting, for example, your Zoom Personal Meeting URL.', 'simply-schedule-appointments' ), + ), + ), + 'styles' => + array ( + 'title' => __( 'Styles', 'simply-schedule-appointments' ), + 'accentColor' => __( 'Accent color', 'simply-schedule-appointments' ), + 'backgroundColor' => __( 'Background color', 'simply-schedule-appointments' ), + 'contrast' => __( 'Contrast mode', 'simply-schedule-appointments' ), + 'contrastHelper' => __( 'Only enable this mode if your website has a dark background color (all black with white text, for example)', 'simply-schedule-appointments' ), + 'font' => __( 'Font family', 'simply-schedule-appointments' ), + 'padding' => __( 'Padding', 'simply-schedule-appointments' ), + 'reset' => __( 'Reset to default', 'simply-schedule-appointments' ), + 'confirmTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmContent' => __( 'Your settings will be lost and all styles will be reset to the default values.', 'simply-schedule-appointments' ), + 'requiredPadding' => __( 'Padding is required. Enter 0 for no padding.', 'simply-schedule-appointments' ), + 'cssUnits' => __( 'You may use any valid CSS measurement unit: %, em, px, vw, rem, etc.', 'simply-schedule-appointments' ), + 'googleFonts' => __( 'View the Google Fonts library', 'simply-schedule-appointments' ), + 'customCSS' => __( 'Custom CSS', 'simply-schedule-appointments' ), + 'cssComment' => __( 'Enter your custom CSS here', 'simply-schedule-appointments' ), + 'contractRatio' => __( 'Contrast ratio', 'simply-schedule-appointments' ), + 'lowContractRatioWarn' => __( 'The contrast ratio between the accent color and the background color is too low for both normal and large text.', 'simply-schedule-appointments' ), + 'highContractRatioTxt' => __( 'Your selected color combination meets accessibility guidelines and ensures readability for most users.', 'simply-schedule-appointments' ), + ), + 'resources' => + array ( + 'title' => __( 'Resources', 'simply-schedule-appointments' ), + 'loading' => __( 'Loading Resources', 'simply-schedule-appointments' ), + 'loadingResource' => __( 'Loading Resource', 'simply-schedule-appointments' ), + 'emptyLabel' => __( 'No resources added yet', 'simply-schedule-appointments' ), + 'emptyInactiveLabel' => __( 'No inactive resources', 'simply-schedule-appointments' ), + 'emptyDescription' => __( 'Looks like you\'re not providing resources. Click the button to add a new resources.', 'simply-schedule-appointments' ), + 'emptyGroupDescription' => __( 'Looks like this resource group doesn\'t have any unique resources yet. Click the button to add new resources or auto generate them', 'simply-schedule-appointments' ), + 'emptyInactiveDescription' => __( 'Looks like there aren\'t any inactive resources', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'addNewGroup' => __( 'Add New Resource Group', 'simply-schedule-appointments' ), + 'addNew' => __( 'Add New Resource', 'simply-schedule-appointments' ), + 'autoGenerate' => __( 'Auto Generate Resources', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit Resource Group', 'simply-schedule-appointments' ), + ), + 'quantityHelperText' => __( 'How many resources would you like to auto generate?', 'simply-schedule-appointments' ), + 'status' => + array ( + 'inactive' => __( 'Resources - Inactive', 'simply-schedule-appointments' ), + ), + 'newResourceGroup' => __( 'New Resource Group', 'simply-schedule-appointments' ), + 'selectResources' => __( 'Select resources to display', 'simply-schedule-appointments' ), + 'resourceSettings' => __( 'Resource settings', 'simply-schedule-appointments' ), + 'emptyEditTitle' => __( 'Editing Resource Group', 'simply-schedule-appointments' ), + 'emptyEditTitleResource' => __( 'Editing Resource', 'simply-schedule-appointments' ), + 'autoGenerateOptions' => + array ( + 'label' => __( 'Choose a type for auto increment', 'simply-schedule-appointments' ), + 'capital' => __( 'Capital letters: A, B, C', 'simply-schedule-appointments' ), + 'lower' => __( 'Small letters: a, b, c', 'simply-schedule-appointments' ), + 'number' => __( 'Numbers: 1, 2, 3', 'simply-schedule-appointments' ), + ), + 'appointmentType' => + array ( + 'anyLabel' => __( 'Any:', 'simply-schedule-appointments' ), + 'anyDesc' => __( 'Randomly assign a resource to appointments of this type', 'simply-schedule-appointments' ), + 'assignedLabel' => __( 'Assigned:', 'simply-schedule-appointments' ), + 'assignedDesc' => __( 'Assign a specific resource to appointments of this type', 'simply-schedule-appointments' ), + 'userPreferenceLabel' => __( 'User Preference:', 'simply-schedule-appointments' ), + 'userPreferenceDesc' => __( 'User has the option to select which resource they want while booking', 'simply-schedule-appointments' ), + 'identical' => __( 'An item from these resources will be assigned to appointments of this type', 'simply-schedule-appointments' ), + 'emptyResourceGroup' => __( 'This group is empty. This will result in no available appointments.', 'simply-schedule-appointments' ), + 'addResourcesToGroup' => __( 'Add resources to this group', 'simply-schedule-appointments' ), + 'selectPreference' => __( 'Select resource booking preference', 'simply-schedule-appointments' ), + 'selectResource' => __( ' Select one of the following resources to assign it to appointments of this type', 'simply-schedule-appointments' ), + ), + ), + 'tracking' => + array ( + 'eventTracking' => __( 'Track custom events', 'simply-schedule-appointments' ), + 'pageTracking' => __( 'Track page views', 'simply-schedule-appointments' ), + 'reset' => __( 'Reset', 'simply-schedule-appointments' ), + 'title' => __( 'Tracking', 'simply-schedule-appointments' ), + 'instructions' => __( 'Check the boxes below to enable tracking of page views and/or events. For more information on how tracking works and what gets tracked see our documentation:', 'simply-schedule-appointments' ), + 'docLinkText' => __( 'Conversion Tracking', 'simply-schedule-appointments' ), + ), + 'webhooks' => + array ( + 'title' => __( 'Webhooks', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'addNew' => __( 'Add a new webhook', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit webhook', 'simply-schedule-appointments' ), + ), + 'intro' => __( 'The following webhooks are triggered for this appointment type:', 'simply-schedule-appointments' ), + 'empty' => __( 'There are no webhooks.', 'simply-schedule-appointments' ), + 'empty_appointment_type' => __( 'There are no webhooks triggered by this appointment type', 'simply-schedule-appointments' ), + 'fields' => + array ( + 'title' => __( 'Name', 'simply-schedule-appointments' ), + 'token' => __( 'Token', 'simply-schedule-appointments' ), + 'token_help' => __( 'This token will be sent in the outgoing payload to help you verify the request came from Simply Schedule Appointments', 'simply-schedule-appointments' ), + 'token_error' => __( 'Token is required. Hit the refresh button to generate a random token.', 'simply-schedule-appointments' ), + 'token_copied' => __( 'Token copied to clipboard', 'simply-schedule-appointments' ), + 'triggers' => __( 'Select the triggers for this webhook:', 'simply-schedule-appointments' ), + 'trigger_single' => __( 'Trigger:', 'simply-schedule-appointments' ), + 'trigger_plural' => __( 'Triggers:', 'simply-schedule-appointments' ), + 'triggerNames' => + array ( + 'appointment_booked' => __( 'Appointment Booked', 'simply-schedule-appointments' ), + 'appointment_edited' => __( 'Appointment Edited', 'simply-schedule-appointments' ), + 'appointment_canceled' => __( 'Appointment Canceled', 'simply-schedule-appointments' ), + 'appointment_rescheduled' => __( 'Appointment Rescheduled', 'simply-schedule-appointments' ), + ), + 'urls' => __( 'URLs', 'simply-schedule-appointments' ), + 'url_exists' => __( 'That URL has already been added for this webhook', 'simply-schedule-appointments' ), + 'url_invalid' => __( 'Please enter a valid URL', 'simply-schedule-appointments' ), + ), + 'errors' => + array ( + 'requiredTriggers' => __( 'You must select at least one trigger for this webhook', 'simply-schedule-appointments' ), + 'requiredUrls' => __( 'You must enter at least one URL for this webhook', 'simply-schedule-appointments' ), + 'requiredAppointmentTypes' => __( 'You must select at least one appointment type', 'simply-schedule-appointments' ), + ), + 'details' => + array ( + 'deliveryHeaders' => __( 'Delivery headers', 'simply-schedule-appointments' ), + 'deliveryDetails' => __( 'HTTP POST payloads that are delivered to your webhook\'s configured URL endpoint will contain several special headers:', 'simply-schedule-appointments' ), + 'deliveryDetailHeader' => __( 'Header', 'simply-schedule-appointments' ), + 'deliveryDetailDescription' => __( 'Description', 'simply-schedule-appointments' ), + 'deliveryDetailsAdditional' => __( '', 'simply-schedule-appointments' ), + 'deliveryExample' => __( 'Example delivery', 'simply-schedule-appointments' ), + ), + 'confirmDelete' => __( 'Delete this webhook?', 'simply-schedule-appointments' ), + 'confirmDeleteCancel' => __( 'Keep', 'simply-schedule-appointments' ), + 'confirmDeleteOk' => __( 'Delete', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes to this webhook will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + ), + 'webex' => + array ( + 'title' => __( 'Webex', 'simply-schedule-appointments' ), + 'account' => __( 'Connected account', 'simply-schedule-appointments' ), + 'disconnect' => __( 'Disconnect', 'simply-schedule-appointments' ), + 'notConnected' => __( 'Your Webex account isn\'t connected yet.', 'simply-schedule-appointments' ), + 'saveAuthorize' => __( 'Authorize Webex', 'simply-schedule-appointments' ), + 'failedToFetch' => __( 'Unable to get your Webex settings', 'simply-schedule-appointments' ), + 'failedToFetchDescription' => __( 'Try disconnecting and reconnecting your Webex account.', 'simply-schedule-appointments' ), + 'verifying' => __( 'Verifying your Webex user', 'simply-schedule-appointments' ), + ), + 'zoom' => + array ( + 'title' => __( 'Zoom', 'simply-schedule-appointments' ), + 'account' => __( 'Connected account', 'simply-schedule-appointments' ), + 'disconnect' => __( 'Disconnect', 'simply-schedule-appointments' ), + 'clientId' => __( 'Client ID', 'simply-schedule-appointments' ), + 'saveAuthorize' => __( 'Authorize Zoom', 'simply-schedule-appointments' ), + 'clientSecret' => __( 'Client Secret', 'simply-schedule-appointments' ), + 'authRedirect' => __( 'Zoom oAuth Redirect URL (click to copy)', 'simply-schedule-appointments' ), + 'redirectCopied' => __( 'Zoom oAuth Redirect URL copied to clipboard', 'simply-schedule-appointments' ), + 'userEmail' => __( 'User Email', 'simply-schedule-appointments' ), + 'userMeetingUrl' => __( 'Personal Meeting Url', 'simply-schedule-appointments' ), + 'notConnected' => __( 'Your Zoom account isn\'t connected yet.', 'simply-schedule-appointments' ), + ), + ), + 'resourceGroups' => + array ( + 'title' => __( 'Title', 'simply-schedule-appointments' ), + 'titleError' => __( 'Resources must have titles', 'simply-schedule-appointments' ), + 'description' => __( 'Description', 'simply-schedule-appointments' ), + 'descriptionError' => __( 'Resources must have descriptions', 'simply-schedule-appointments' ), + 'selectResourceGroupType' => __( 'Select Resource Group Type', 'simply-schedule-appointments' ), + 'identical' => __( 'Identical: ', 'simply-schedule-appointments' ), + 'identicalDesc' => __( 'Each resource is universal and it doesn\'t matter which specific resource from this group is assigned to the booking.', 'simply-schedule-appointments' ), + 'identifiable' => __( 'Unique: ', 'simply-schedule-appointments' ), + 'identifiableDesc' => __( 'Each resource is distinctive and it matters which specific resource from this group is assigned to the booking.', 'simply-schedule-appointments' ), + 'quantity' => __( 'Quantity', 'simply-schedule-appointments' ), + 'items' => __( 'Items', 'simply-schedule-appointments' ), + 'quantityError' => __( 'Identical resources must have quantity', 'simply-schedule-appointments' ), + 'oneItem' => __( 'One item', 'simply-schedule-appointments' ), + ), + 'appointmentTypes' => + array ( + 'title' => __( 'Name', 'simply-schedule-appointments' ), + 'titleError' => __( 'Appointment types must have names', 'simply-schedule-appointments' ), + 'titleRegexValidatorError' => __( 'Appointment types title is not valid', 'simply-schedule-appointments' ), + 'empty' => __( 'There are no appointment types.', 'simply-schedule-appointments' ), + 'shortcodeCopied' => __( 'Shortcode copied to clipboard', 'simply-schedule-appointments' ), + 'bulkEditExplanation' => __( 'Changes will be applied to the following appointment types: ', 'simply-schedule-appointments' ), + 'duration' => __( 'Duration', 'simply-schedule-appointments' ), + 'durationType' => __( 'Duration Units', 'simply-schedule-appointments' ), + 'negativeDuration' => __( 'Duration should not be negative.', 'simply-schedule-appointments' ), + 'label' => _x( 'Label', 'Appointment type label', 'simply-schedule-appointments' ), + 'slug' => __( 'Slug', 'simply-schedule-appointments' ), + 'current' => __( '(current)', 'simply-schedule-appointments' ), + 'slugError' => __( 'Slug is required for appointment types', 'simply-schedule-appointments' ), + 'slugCharactersError' => __( 'Slug can include alphanumeric characters, underscores, and dashes.', 'simply-schedule-appointments' ), + 'bookingLayout' => __( 'Booking Layout', 'simply-schedule-appointments' ), + 'bookingFlow' => __( 'Main Booking Flow', 'simply-schedule-appointments' ), + 'showEndTime' => __( 'Show end time for available appointment time slots', 'simply-schedule-appointments' ), + 'fallBackBookingFlow' => __( 'Fallback Flow', 'simply-schedule-appointments' ), + 'appointmentTypeHistory' => __( 'Appointment Type History', 'simply-schedule-appointments' ), + 'loadingHistory' => __( 'Loading Appointment Type History', 'simply-schedule-appointments' ), + 'bookingLayouts' => + array ( + 'week' => __( 'Weekly', 'simply-schedule-appointments' ), + 'month' => __( 'Monthly', 'simply-schedule-appointments' ), + ), + 'bookingFlows' => + array ( + 'expanded' => __( 'Expanded', 'simply-schedule-appointments' ), + 'express' => __( 'Express', 'simply-schedule-appointments' ), + 'first_available' => __( 'First Available', 'simply-schedule-appointments' ), + ), + 'resourcesView' => __( 'Resources View', 'simply-schedule-appointments' ), + 'resourcesViews' => + array ( + 'list' => __( 'Dropdown List', 'simply-schedule-appointments' ), + 'radio' => __( 'Radio Buttons', 'simply-schedule-appointments' ), + ), + 'teamView' => __( 'Team View', 'simply-schedule-appointments' ), + 'teamViews' => + array ( + 'list' => __( 'Dropdown List', 'simply-schedule-appointments' ), + 'radio' => __( 'Radio Buttons', 'simply-schedule-appointments' ), + ), + 'dateView' => __( 'Date View', 'simply-schedule-appointments' ), + 'dateViews' => + array ( + 'week' => __( 'Weekly', 'simply-schedule-appointments' ), + 'month' => __( 'Monthly', 'simply-schedule-appointments' ), + 'only_available' => __( 'Only available dates', 'simply-schedule-appointments' ), + ), + 'timeView' => __( 'Time View', 'simply-schedule-appointments' ), + 'timeViews' => + array ( + 'time_of_day_columns' => __( 'Time of day columns', 'simply-schedule-appointments' ), + 'single_column' => __( 'Single Column', 'simply-schedule-appointments' ), + 'rows' => __( 'Rows', 'simply-schedule-appointments' ), + 'block' => __( 'Block', 'simply-schedule-appointments' ), + ), + 'appointmentOptions' => __( 'Appointment options', 'simply-schedule-appointments' ), + 'steps' => + array ( + 'resources' => __( 'Resources', 'simply-schedule-appointments' ), + 'date' => __( 'Date', 'simply-schedule-appointments' ), + 'time' => __( 'Time', 'simply-schedule-appointments' ), + 'team' => __( 'Team', 'simply-schedule-appointments' ), + 'appointmentOptions' => __( 'Appointment Options', 'simply-schedule-appointments' ), + 'resources_and_team' => __( 'Resources and Team', 'simply-schedule-appointments' ), + ), + 'labels' => + array ( + 'popupDescription' => __( 'Open label settings to select, create, delete or edit your labels', 'simply-schedule-appointments' ), + 'confirmDeleteAriaLabel' => __( 'Confirm delete dialog', 'simply-schedule-appointments' ), + 'confirmDeleteTitle' => __( 'Are you sure you want to delete this label?', 'simply-schedule-appointments' ), + 'confirmDeleteWarning' => __( 'Deleting this label will change the label of the following appointment type(s) to the default label', 'simply-schedule-appointments' ), + 'keepLabel' => __( 'Keep label', 'simply-schedule-appointments' ), + 'confirmDelete' => __( 'Confirm delete', 'simply-schedule-appointments' ), + 'selectLabel' => __( 'Select label', 'simply-schedule-appointments' ), + 'createLabel' => __( 'Create label', 'simply-schedule-appointments' ), + 'updateLabel' => __( 'Update label', 'simply-schedule-appointments' ), + 'editLabel' => __( 'Edit label', 'simply-schedule-appointments' ), + 'deleteLabel' => __( 'Delete label', 'simply-schedule-appointments' ), + 'addLabel' => __( 'Add new label', 'simply-schedule-appointments' ), + 'labelName' => __( 'Label name', 'simply-schedule-appointments' ), + 'chooseColor' => __( 'Choose a color', 'simply-schedule-appointments' ), + 'defaultLabelDisabled' => __( 'Default label cannot be deleted', 'simply-schedule-appointments' ), + 'invalidCharacterError' => __( 'Name must not include:', 'simply-schedule-appointments' ), + 'duplicateNameError' => __( 'Label name must be unique', 'simply-schedule-appointments' ), + ), + 'capacity' => + array ( + 'fields' => + array ( + 'capacity' => + array ( + 'label' => __( 'Capacity', 'simply-schedule-appointments' ), + 'label_staff' => __( 'Total capacity', 'simply-schedule-appointments' ), + 'help' => __( 'How many people can book at the same time?', 'simply-schedule-appointments' ), + 'help_staff' => __( 'Limit for the total number of appointments allowed at the same time', 'simply-schedule-appointments' ), + 'help_group' => __( 'How many people can attend a group event?', 'simply-schedule-appointments' ), + 'error_bounds' => __( 'Capacity must be at least 1 and no more than 100,000', 'simply-schedule-appointments' ), + 'error_mismatch' => __( 'Total capacity must be equal to or greater than capacity', 'simply-schedule-appointments' ), + ), + 'capacity_type' => + array ( + 'label' => __( 'Group event or individual?', 'simply-schedule-appointments' ), + 'help' => __( 'Should multiple bookings at the same time be treated as a single group appointment or separate individual appointments?', 'simply-schedule-appointments' ), + 'help_staff' => __( 'Individual means 1 booking per team member per time. Group means multiple bookings per team member.', 'simply-schedule-appointments' ), + 'help_resources' => __( 'Individual means 1 booking per unique resource per time. Group means multiple bookings per unique resource.', 'simply-schedule-appointments' ), + 'help_staff_resources' => __( 'Individual means 1 booking per unique resource and team member per time. Group means multiple bookings per unique resource and team member.', 'simply-schedule-appointments' ), + ), + 'has_max_capacity' => + array ( + 'label' => __( 'Is there an overall limit for this appointment type?', 'simply-schedule-appointments' ), + 'help' => __( 'For example, no more than 10 customers allowed in the business at a time', 'simply-schedule-appointments' ), + ), + 'staff_capacity' => + array ( + 'label' => __( 'Capacity', 'simply-schedule-appointments' ), + 'help' => __( 'How many people per team member can attend a group event?', 'simply-schedule-appointments' ), + ), + 'resources_capacity' => + array ( + 'label' => __( 'Capacity', 'simply-schedule-appointments' ), + 'help' => __( 'How many people per unique resource can attend a group event?', 'simply-schedule-appointments' ), + ), + 'resources_staff_capacity' => + array ( + 'label' => __( 'Capacity', 'simply-schedule-appointments' ), + 'help' => __( 'How many people per unique resource and team member can attend a group event?', 'simply-schedule-appointments' ), + ), + ), + 'capacityTypeOptions' => + array ( + 'individual' => __( 'Individual', 'simply-schedule-appointments' ), + 'group' => __( 'Group', 'simply-schedule-appointments' ), + ), + ), + 'instructions' => __( 'Instructions', 'simply-schedule-appointments' ), + 'instructions_description' => __( 'Optional brief instructions to your customer to explain appointment logistics', 'simply-schedule-appointments' ), + 'instructions_placeholder' => __( 'e.g. "I\'ll call you" or "We\'ll meet at your office"', 'simply-schedule-appointments' ), + 'availabilityType' => __( 'How would you like to define your availability for this appointment type?', 'simply-schedule-appointments' ), + 'availabilityStartTimes' => __( 'Specific start times', 'simply-schedule-appointments' ), + 'availabilityStartTimesHelp' => __( 'Define specific appointment start times that your customers can select when booking', 'simply-schedule-appointments' ), + 'availabilityBlocks' => __( 'Available blocks', 'simply-schedule-appointments' ), + 'availabilityBlocksHelp' => __( 'Define blocks of availability and your customers can select any available time inside those blocks', 'simply-schedule-appointments' ), + 'availabilityToggle' => __( 'Toggle all', 'simply-schedule-appointments' ), + 'availabilityIncrement' => __( 'Show appointment start times every:', 'simply-schedule-appointments' ), + 'timezoneStyle' => __( 'Appointment timezone', 'simply-schedule-appointments' ), + 'timezoneStyleHelp' => __( 'Is this appointment type associated with a specific timezone?', 'simply-schedule-appointments' ), + 'timezoneStyleLocalized' => __( 'Localized', 'simply-schedule-appointments' ), + 'timezoneStyleLocked' => __( 'Locked', 'simply-schedule-appointments' ), + 'timezoneStyleLocalizedHelp' => __( 'Your customers will see available appointment times in their own timezone. Recommended for phone calls and online meetings.', 'simply-schedule-appointments' ), + 'timezoneStyleLockedHelp' => __( 'Your customers will see available appointment times in a your timezone. Recommended for in-person meetings.', 'simply-schedule-appointments' ), + 'timezoneStyleYourTimezone' => __( 'Your timezone is:', 'simply-schedule-appointments' ), + 'buffer' => __( 'Appointment buffer', 'simply-schedule-appointments' ), + 'buffer_help' => __( 'The amount of time that should be left free before and after an appointment.', 'simply-schedule-appointments' ), + 'buffer_before' => __( 'How much time should be left free before an appointment of this type?', 'simply-schedule-appointments' ), + 'buffer_after' => __( 'How much time should be left free after an appointment of this type?', 'simply-schedule-appointments' ), + 'first_available_within_help' => __( 'How much time before we resort to fallback flow?', 'simply-schedule-appointments' ), + 'first_available_within' => __( 'First Available within', 'simply-schedule-appointments' ), + 'first_available_notification' => __( 'The below flow is displayed when first available appointment is not within the time limit set', 'simply-schedule-appointments' ), + 'limitmax' => __( 'Limit the number of appointments of this type that can be booked in a day?', 'simply-schedule-appointments' ), + 'max_event_count' => __( 'Max number of appointments of this type to book per day', 'simply-schedule-appointments' ), + 'notice' => __( 'Notice required', 'simply-schedule-appointments' ), + 'notice_help' => __( 'How much notice you need when someone books an appointment', 'simply-schedule-appointments' ), + 'min_booking_notice' => __( 'Notice', 'simply-schedule-appointments' ), + 'min_booking_notice_help' => __( 'Minimum notice required when booking', 'simply-schedule-appointments' ), + 'advance' => __( 'Advance', 'simply-schedule-appointments' ), + 'advance_help' => __( 'How far into the future customers should be able to book this type of appointment', 'simply-schedule-appointments' ), + 'max_booking_notice' => __( 'Advance', 'simply-schedule-appointments' ), + 'max_booking_notice_help' => __( 'How far in advance customers can book an appointment', 'simply-schedule-appointments' ), + 'max_booking_notice_error' => __( 'Advance required must be 1 minute or more', 'simply-schedule-appointments' ), + 'min_max_error' => __( 'The Notice Required must be less than the Advance setting', 'simply-schedule-appointments' ), + 'booking_window' => __( 'Booking window', 'simply-schedule-appointments' ), + 'booking_window_help' => __( 'Define a specific date range for when customers will have access to book this type of appointment', 'simply-schedule-appointments' ), + 'booking_start_date' => __( 'Start', 'simply-schedule-appointments' ), + 'booking_end_date' => __( 'End', 'simply-schedule-appointments' ), + 'availability_window' => __( 'Availability window', 'simply-schedule-appointments' ), + 'availability_window_help' => __( 'Define a specific date range for when appointments are available to be booked', 'simply-schedule-appointments' ), + 'availability_start_date' => __( 'Start', 'simply-schedule-appointments' ), + 'availability_end_date' => __( 'End', 'simply-schedule-appointments' ), + 'max' => __( 'Per day limit', 'simply-schedule-appointments' ), + 'max_help' => __( 'Limit how many appointments of this type can be booked per day', 'simply-schedule-appointments' ), + 'display' => __( 'Display', 'simply-schedule-appointments' ), + 'required' => __( 'Require', 'simply-schedule-appointments' ), + 'confirmDelete' => __( 'Delete this appointment type?', 'simply-schedule-appointments' ), + 'confirmDeleteAppointments' => __( 'The following appointments of this type are booked:', 'simply-schedule-appointments' ), + 'deleteTypeWithMembershipsWarn' => __( 'This appointment type is associated with active membership(s). Please note that users will still be able to access their existing appointments but cannot schedule new ones under the following memberships.', 'simply-schedule-appointments' ), + 'confirmDeleteOk' => __( 'Delete', 'simply-schedule-appointments' ), + 'confirmDeleteCancel' => __( 'Keep', 'simply-schedule-appointments' ), + 'appointmentSync' => __( 'Add new appointments to this calendar', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesTitle' => __( 'Are you sure?', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesContent' => __( 'Are you sure you want to leave this page? Any unsaved changes will be lost.', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesOkay' => __( 'Leave without saving', 'simply-schedule-appointments' ), + 'confirmIgnoreChangesCancel' => __( 'Keep editing', 'simply-schedule-appointments' ), + 'saved' => __( 'saved', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'addNew' => __( 'Add New', 'simply-schedule-appointments' ), + 'create' => __( 'Create a new appointment type', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit', 'simply-schedule-appointments' ), + 'bulkEdit' => __( 'Bulk Edit', 'simply-schedule-appointments' ), + 'clone' => __( 'Clone', 'simply-schedule-appointments' ), + 'delete' => __( 'Delete', 'simply-schedule-appointments' ), + 'add-field' => __( 'Add Field', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel', 'simply-schedule-appointments' ), + 'update' => __( 'Update', 'simply-schedule-appointments' ), + 'save' => __( 'Save', 'simply-schedule-appointments' ), + 'editSingle' => __( 'Edit selected appointment types individually', 'simply-schedule-appointments' ), + 'back' => __( 'Back to Appointment Types', 'simply-schedule-appointments' ), + 'reorder' => __( 'Reorder', 'simply-schedule-appointments' ), + 'saveOrder' => __( 'Save order', 'simply-schedule-appointments' ), + 'labels' => _x( 'Labels', 'Appointment types labels Menu', 'simply-schedule-appointments' ), + 'clearLabelFilter' => __( 'Clear filter', 'simply-schedule-appointments' ), + ), + 'customer_information' => + array ( + 'Name' => __( 'Name', 'simply-schedule-appointments' ), + 'Email' => __( 'Email', 'simply-schedule-appointments' ), + 'Phone' => __( 'Phone', 'simply-schedule-appointments' ), + 'Address' => __( 'Address', 'simply-schedule-appointments' ), + 'City' => __( 'City', 'simply-schedule-appointments' ), + 'State' => __( 'State', 'simply-schedule-appointments' ), + 'Zip' => __( 'Zip Code', 'simply-schedule-appointments' ), + 'Notes' => __( 'Notes', 'simply-schedule-appointments' ), + ), + 'custom_fields' => + array ( + 'types' => + array ( + 'single-text' => __( 'Single Line Text', 'simply-schedule-appointments' ), + 'multi-text' => __( 'Multi Line Text', 'simply-schedule-appointments' ), + 'checkboxes' => __( 'Checkboxes', 'simply-schedule-appointments' ), + 'radios' => __( 'Radios', 'simply-schedule-appointments' ), + 'phone' => __( 'Phone number', 'simply-schedule-appointments' ), + ), + 'labels' => + array ( + 'label' => _x( 'Label', 'Input field label', 'simply-schedule-appointments' ), + 'required' => __( 'Required', 'simply-schedule-appointments' ), + 'type' => __( 'Type', 'simply-schedule-appointments' ), + 'icon' => __( 'Icon', 'simply-schedule-appointments' ), + 'values' => __( 'Values', 'simply-schedule-appointments' ), + 'one-per-line' => __( 'One value-per-line', 'simply-schedule-appointments' ), + 'instructions' => __( 'Instructions', 'simply-schedule-appointments' ), + ), + 'actions' => + array ( + 'menu' => __( 'Open menu for this field', 'simply-schedule-appointments' ), + ), + 'errors' => + array ( + 'label' => __( 'Label is already taken', 'simply-schedule-appointments' ), + ), + ), + 'mailchimp' => + array ( + 'optin' => __( 'Subscribe to newsletter', 'simply-schedule-appointments' ), + 'optinTextLabel' => __( 'Text to display next to opt in checkbox', 'simply-schedule-appointments' ), + 'optinTextError' => __( 'Opt in text is required', 'simply-schedule-appointments' ), + 'listSelect' => __( 'Customers will have the option to subscribe to which MailChimp list?', 'simply-schedule-appointments' ), + 'noLists' => __( 'There are no lists associated with your MailChimp account.', 'simply-schedule-appointments' ), + 'noSelection' => __( 'None', 'simply-schedule-appointments' ), + 'noConnection' => __( 'Mailchimp account hasn\'t been connected', 'simply-schedule-appointments' ), + 'setup' => __( 'Connect Mailchimp', 'simply-schedule-appointments' ), + ), + 'google_calendar' => + array ( + 'noAccessToken' => __( 'Google Calendar account hasn\'t been connected', 'simply-schedule-appointments' ), + 'setup' => __( 'Connect Google Calendar', 'simply-schedule-appointments' ), + 'checkSettings' => __( 'Check Settings', 'simply-schedule-appointments' ), + 'checkSettingsMessage' => __( 'There was a problem fetching your calendars. Please check your settings', 'simply-schedule-appointments' ), + 'sharedCalendarEvent' => __( 'Invite the customer to the event?', 'simply-schedule-appointments' ), + 'sharedCalendarEventDesc' => __( 'When creating the Google Calendar event, add the customer as an invitee', 'simply-schedule-appointments' ), + ), + 'web_meetings' => + array ( + 'providers' => + array ( + 'google' => + array ( + 'name' => __( 'Google Meet', 'simply-schedule-appointments' ), + 'label' => __( 'Google Meet - Generate a unique meeting URL', 'simply-schedule-appointments' ), + 'googleNoCalendarHeading' => __( 'No Google Calendar selected', 'simply-schedule-appointments' ), + 'noCalendarSelectedMessage' => __( 'To generate a Google Meet URL, you must select a Google Calendar for the "Sync appointments with this calendar" setting in the Google Calendar settings for this appointment type', 'simply-schedule-appointments' ), + 'googleEditSettings' => __( 'Edit Google Calendar Settings', 'simply-schedule-appointments' ), + ), + 'webex' => + array ( + 'name' => __( 'Webex', 'simply-schedule-appointments' ), + 'label' => __( 'Webex - generate a unique meeting URL', 'simply-schedule-appointments' ), + 'legend' => __( 'Webex Meeting Options', 'simply-schedule-appointments' ), + 'options' => + array ( + 'private' => __( 'Private Meeting: Host required to admit each meeting attendee', 'simply-schedule-appointments' ), + 'open' => __( 'Open Meeting: anyone with the link can immediately join', 'simply-schedule-appointments' ), + ), + ), + 'zoom' => + array ( + 'name' => __( 'Zoom', 'simply-schedule-appointments' ), + 'label' => __( 'Zoom - generate a unique meeting URL', 'simply-schedule-appointments' ), + 'legend' => __( 'Zoom Meeting Options', 'simply-schedule-appointments' ), + 'options' => + array ( + 'private' => __( 'Private Meeting: Host required to admit each meeting attendee', 'simply-schedule-appointments' ), + 'open' => __( 'Open Meeting: anyone with the link can immediately join', 'simply-schedule-appointments' ), + ), + 'notice' => + array ( + 'openMeeting' => __( 'Ensure "Authentication" is enabled in your Zoom settings and disable "Waiting Room" and "Passcode" for this option to work correctly.', 'simply-schedule-appointments' ), + ), + ), + 'custom' => + array ( + 'name' => __( 'Custom', 'simply-schedule-appointments' ), + 'label' => __( 'Custom - Enter a custom meeting URL', 'simply-schedule-appointments' ), + 'urlLabel' => __( 'Custom web meeting link', 'simply-schedule-appointments' ), + 'error' => __( 'Please enter a valid URL that is 256 characters or less', 'simply-schedule-appointments' ), + 'legend' => __( 'Enter a custom URL for a web meeting, for example, your Zoom Personal Meeting URL', 'simply-schedule-appointments' ), + 'settingsHeading' => __( 'Custom URL Settings', 'simply-schedule-appointments' ), + ), + 'staff' => + array ( + 'name' => __( 'Staff', 'simply-schedule-appointments' ), + 'label' => __( 'Use Team Member\'s web meeting URL', 'simply-schedule-appointments' ), + 'warning' => __( 'Not all team members assigned to this appointment type have a web meeting URL', 'simply-schedule-appointments' ), + 'urlLabel' => __( 'Team member web meeting link', 'simply-schedule-appointments' ), + 'error' => __( 'Please enter a valid URL that is 256 characters or less', 'simply-schedule-appointments' ), + 'legend' => __( 'If a team member doesn\'t have a web meeting URL, use this URL for any scheduled appointments', 'simply-schedule-appointments' ), + 'settingsHeading' => __( 'Default URL', 'simply-schedule-appointments' ), + ), + 'none' => + array ( + 'name' => __( 'None', 'simply-schedule-appointments' ), + 'label' => __( 'Do not create a meeting URL', 'simply-schedule-appointments' ), + ), + ), + ), + 'payments' => + array ( + 'price' => __( 'Price', 'simply-schedule-appointments' ), + 'priceError' => __( 'Price must be greater than: ', 'simply-schedule-appointments' ), + 'priceUSDError' => __( 'Price must be greater than 0.50', 'simply-schedule-appointments' ), + 'displayPrice' => __( 'Display price', 'simply-schedule-appointments' ), + 'currency' => __( 'Currency', 'simply-schedule-appointments' ), + 'currencyError' => __( 'You must specify a currency to take payments', 'simply-schedule-appointments' ), + 'noGateways' => __( 'You don\'t have any payment gateways set up.', 'simply-schedule-appointments' ), + 'setup' => __( 'Set up payments', 'simply-schedule-appointments' ), + 'paymentMethods' => __( 'Payment Methods', 'simply-schedule-appointments' ), + 'paymentMethodsError' => __( 'You must specify at least one method to accept payments', 'simply-schedule-appointments' ), + 'requiredPaymentTitle' => __( 'Require Payments', 'simply-schedule-appointments' ), + 'requiredPayment' => __( 'Is payment required to book an appointment?', 'simply-schedule-appointments' ), + 'required' => __( 'Required: Customer must submit a valid payment to reserve an appointment time', 'simply-schedule-appointments' ), + 'optional' => __( 'Optional: Customer may reserve an appointment time without payment but has the option to pay', 'simply-schedule-appointments' ), + 'none' => __( 'No payment required', 'simply-schedule-appointments' ), + 'refundPolicy' => __( 'Cancelation & Refund Policy', 'simply-schedule-appointments' ), + 'refundPolicyHelp' => __( 'This will be shown to your customers when booking and included in their confirmation email message', 'simply-schedule-appointments' ), + 'refundPolicySection' => + array ( + 'title' => __( 'Refund & Cancelation Policy', 'simply-schedule-appointments' ), + 'required' => + array ( + 'textEmptyError' => __( 'Text field cannot be empty if required', 'simply-schedule-appointments' ), + 'labelEmptyError' => __( 'Label field cannot be empty', 'simply-schedule-appointments' ), + 'switchLabel' => __( 'Require Refund & Cancelation Policy Agreement', 'simply-schedule-appointments' ), + 'checkboxMessage' => __( 'This will display a required checkbox in the customer information screen with a default label message \'I agree\'. You can always change the label here.', 'simply-schedule-appointments' ), + 'defaultLabel' => __( 'I agree', 'simply-schedule-appointments' ), + 'checkboxLabel' => __( 'Checkbox Label', 'simply-schedule-appointments' ), + 'helperText' => __( 'Enter the text that users will see next to the agreement checkbox. For example: I agree to the Refund & Cancelation Policy.', 'simply-schedule-appointments' ), + ), + 'display' => + array ( + 'title' => __( 'Where to display the cancelation & refund policy', 'simply-schedule-appointments' ), + 'default' => __( 'Default', 'simply-schedule-appointments' ), + 'options' => + array ( + 'customerInformationScreen' => __( 'Customer Information Screen', 'simply-schedule-appointments' ), + 'confirmationScreen' => __( 'Confirmation Screen', 'simply-schedule-appointments' ), + 'editRescheduleScreen' => __( 'Edit & Reschedule Screen', 'simply-schedule-appointments' ), + ), + ), + ), + ), + 'notifications' => + array ( + 'admin' => __( 'Send Admin Notification Email to', 'simply-schedule-appointments' ), + 'customer' => __( 'Send Customer Notification Email', 'simply-schedule-appointments' ), + ), + 'scheduling' => + array ( + 'before' => __( 'Before', 'simply-schedule-appointments' ), + 'after' => __( 'After', 'simply-schedule-appointments' ), + ), + 'zoom' => + array ( + 'noAuthCode' => __( 'Zoom account hasn\'t been connected', 'simply-schedule-appointments' ), + 'setup' => __( 'Connect Zoom', 'simply-schedule-appointments' ), + ), + 'webex' => + array ( + 'noAuthCode' => __( 'Webex account hasn\'t been connected', 'simply-schedule-appointments' ), + 'setup' => __( 'Connect Webex', 'simply-schedule-appointments' ), + ), + 'resources' => + array ( + 'assignResource' => __( 'Make sure to assign a resource', 'simply-schedule-appointments' ), + ), + ), + 'appointments' => + array ( + 'appointment' => __( 'Appointment', 'simply-schedule-appointments' ), + 'appointmentHistory' => __( 'Appointment History', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel this appointment', 'simply-schedule-appointments' ), + 'abandon' => __( 'Mark as abandoned', 'simply-schedule-appointments' ), + 'book' => __( 'Mark as booked', 'simply-schedule-appointments' ), + 'past' => __( 'Past Appointments', 'simply-schedule-appointments' ), + 'rescheduled' => __( 'Rescheduled', 'simply-schedule-appointments' ), + 'markAsNoShow' => __( 'Mark as no-show', 'simply-schedule-appointments' ), + 'upcoming' => __( 'Upcoming Appointments', 'simply-schedule-appointments' ), + 'dateRange' => __( 'Date Range', 'simply-schedule-appointments' ), + 'viewOriginal' => __( 'Original date/time', 'simply-schedule-appointments' ), + 'viewRescheduled' => __( 'New date/time', 'simply-schedule-appointments' ), + 'loadMore' => __( 'Load more appointments', 'simply-schedule-appointments' ), + 'allLoaded' => __( 'All appointments loaded', 'simply-schedule-appointments' ), + 'pendingPayment' => __( 'Pending Appointments', 'simply-schedule-appointments' ), + 'pendingPaymentDescription' => __( 'Pending appointments are appointments that a customer started booking, but did not complete the booking process to confirm the appointment. Usually that means payment was required for the appointment, but was never completed.', 'simply-schedule-appointments' ), + 'emptyPast' => __( 'There are no past appointments', 'simply-schedule-appointments' ), + 'emptyAll' => __( 'There are no appointments that match', 'simply-schedule-appointments' ), + 'emptyUpcoming' => __( 'There are no upcoming appointments scheduled.', 'simply-schedule-appointments' ), + 'pastEmpty' => __( 'No appointments have passed yet.', 'simply-schedule-appointments' ), + 'keepStatus' => __( 'Keep status', 'simply-schedule-appointments' ), + 'close' => __( 'Close', 'simply-schedule-appointments' ), + 'confirmStatusChange' => __( 'Confirm change', 'simply-schedule-appointments' ), + 'cancelConfirm' => __( 'Cancel this appointment?', 'simply-schedule-appointments' ), + 'cancelConfirmOk' => __( 'Cancel appointment', 'simply-schedule-appointments' ), + 'cancelConfirmCancel' => __( 'Keep appointment', 'simply-schedule-appointments' ), + 'cancelationNote' => __( 'Cancelation note', 'simply-schedule-appointments' ), + 'changeStatusTitle' => __( 'Change the status for this appointment.', 'simply-schedule-appointments' ), + 'changeToBooked' => __( 'Marking this appointment booked will reserve the time slot and send any notifications you have set up.', 'simply-schedule-appointments' ), + 'changeToNoShow' => __( 'Marking this appointment as a no-show cannot be undone.', 'simply-schedule-appointments' ), + 'changeToCanceled' => __( 'Marking this appointment canceled will release the time slot and send any notifications you have set up.', 'simply-schedule-appointments' ), + 'changeToAbandoned' => __( 'Marking this appointment abandoned will release this slot from being reserved and make it available for others to book again.', 'simply-schedule-appointments' ), + 'loadingSettings' => __( 'Loading settings', 'simply-schedule-appointments' ), + 'visibleToCustomers' => __( 'This note will be visible to your customers.', 'simply-schedule-appointments' ), + 'markAsAbandonConfirm' => __( 'Abandon this appointment?', 'simply-schedule-appointments' ), + 'markAsAbandonconfirmOK' => __( 'Abandon appointment', 'simply-schedule-appointments' ), + 'markAsBookedConfirm' => __( 'Mark this appointment as booked?', 'simply-schedule-appointments' ), + 'markAs' => __( 'Mark appointment as', 'simply-schedule-appointments' ), + 'markAsBookedConfirmOK' => __( 'Book appointment', 'simply-schedule-appointments' ), + 'bypassPaymentWarning' => __( 'This booking is still waiting on payment confirmation. If the payment fails after manually overriding the pending status, you\'re responsible for canceling this scheduled time or following up with the user to collect payment.', 'simply-schedule-appointments' ), + 'learnMorePending' => __( ' Learn more about appointment status.', 'simply-schedule-appointments' ), + 'deleteConfirm' => __( 'Delete this appointment?', 'simply-schedule-appointments' ), + 'cancelDeleteCancel' => __( 'Keep appointment', 'simply-schedule-appointments' ), + 'cancelDeleteOk' => __( 'Delete appointment', 'simply-schedule-appointments' ), + 'cancelRescheduleLink' => __( 'Reschedule / Cancel Link', 'simply-schedule-appointments' ), + 'cancelRescheduleLinkOpen' => __( 'Open Reschedule / Cancel Link', 'simply-schedule-appointments' ), + 'deleteConfirmExplanation' => __( 'This cannot be undone. All information associated with this appointment will be permanently removed', 'simply-schedule-appointments' ), + 'deleteConfirmExplanationCancelable' => __( 'Your customer will not receive any notification that the appointment was deleted. If you would like your customer to receive a notification of a canceled appointment, please cancel the appointment before deleting it.', 'simply-schedule-appointments' ), + 'deletedType' => __( 'Deleted appointment type', 'simply-schedule-appointments' ), + 'deletingSingle' => __( 'Deleting appointment', 'simply-schedule-appointments' ), + 'removeNoShowStatusConfirm' => __( 'Remove no-show status?', 'simply-schedule-appointments' ), + 'removeNoShowStatusConfirmExplanation' => __( 'This will remove the no-show status from this appointment and make it available for booking again.', 'simply-schedule-appointments' ), + 'cancelRemoveNoShowStatusCancel' => __( 'Keep status', 'simply-schedule-appointments' ), + 'cancelRemoveNoShowStatusOk' => __( 'Remove status', 'simply-schedule-appointments' ), + 'loadingSingle' => __( 'Getting your appointment details', 'simply-schedule-appointments' ), + 'viewDetails' => __( 'View appointment details', 'simply-schedule-appointments' ), + 'appointmentDetails' => __( 'Appointment Details', 'simply-schedule-appointments' ), + 'viewAll' => __( 'View all appointments', 'simply-schedule-appointments' ), + 'status' => __( 'Status', 'simply-schedule-appointments' ), + 'sms' => __( 'SMS reminders', 'simply-schedule-appointments' ), + 'reschedulingHistory' => __( 'Rescheduling History', 'simply-schedule-appointments' ), + 'created' => __( 'Created', 'simply-schedule-appointments' ), + 'author' => __( 'Booked by', 'simply-schedule-appointments' ), + 'customer' => __( 'Customer', 'simply-schedule-appointments' ), + 'lastMod' => __( 'Last modified', 'simply-schedule-appointments' ), + 'errorNotFound' => __( 'Appointment not found', 'simply-schedule-appointments' ), + 'errorNotFoundDescription' => __( 'We weren\'t able to find that appointment on the books.', 'simply-schedule-appointments' ), + 'errorLoading' => __( 'Unable to get appointment', 'simply-schedule-appointments' ), + 'errorLoadingDescription' => __( 'We weren\'t able to get that appointment. Try refreshing the page.', 'simply-schedule-appointments' ), + 'metaLoading' => __( 'Checking appointment information', 'simply-schedule-appointments' ), + 'metaFields' => + array ( + 'formidable_entry_admin_url' => __( 'Formidable Form', 'simply-schedule-appointments' ), + 'gravity_entry_admin_url' => __( 'Gravity Form', 'simply-schedule-appointments' ), + 'viewEntry' => __( 'View entry', 'simply-schedule-appointments' ), + 'booking_url' => __( 'Booking page URL', 'simply-schedule-appointments' ), + 'booking_title' => __( 'Booking page title', 'simply-schedule-appointments' ), + 'booking_post_id' => __( 'Booking page ID', 'simply-schedule-appointments' ), + ), + 'paymentLoading' => __( 'Checking for payments', 'simply-schedule-appointments' ), + 'paymentReceived' => __( 'Payment received', 'simply-schedule-appointments' ), + 'paymentInformation' => __( 'Payment Information', 'simply-schedule-appointments' ), + 'apptReserved' => __( 'This time slot is reserved while the payment is pending', 'simply-schedule-appointments' ), + 'noAvailableInformation' => __( 'Information not available until form is submitted', 'simply-schedule-appointments' ), + 'waiting' => __( 'Waiting for response from', 'simply-schedule-appointments' ), + 'abandonedIn' => __( 'This will be marked abandoned', 'simply-schedule-appointments' ), + 'abandonedOn' => __( 'This appointment has been abandoned on', 'simply-schedule-appointments' ), + 'payments' => + array ( + 'statuses' => + array ( + 'pending' => __( 'Pending', 'simply-schedule-appointments' ), + 'succeeded' => __( 'Succeeded', 'simply-schedule-appointments' ), + 'failed' => __( 'Failed', 'simply-schedule-appointments' ), + ), + 'modes' => + array ( + 'test' => __( 'Test Mode', 'simply-schedule-appointments' ), + ), + 'expires' => __( 'Exp.', 'simply-schedule-appointments' ), + ), + 'loadingHistory' => __( 'Loading appointment history', 'simply-schedule-appointments' ), + 'statuses' => + array ( + 'booked' => __( 'Booked', 'simply-schedule-appointments' ), + 'pending_form' => __( 'Pending Form Submission', 'simply-schedule-appointments' ), + 'pending_payment' => __( 'Pending Payment', 'simply-schedule-appointments' ), + 'canceled' => __( 'Canceled', 'simply-schedule-appointments' ), + 'abandoned' => __( 'Abandoned', 'simply-schedule-appointments' ), + 'no_show' => __( 'No Show', 'simply-schedule-appointments' ), + 'updating' => __( 'Updating', 'simply-schedule-appointments' ), + ), + 'statusesMeta' => + array ( + 'no_show' => __( 'No Show', 'simply-schedule-appointments' ), + 'no_show_reverted' => __( 'No Show Reverted', 'simply-schedule-appointments' ), + ), + 'actions' => + array ( + 'first_booked' => __( 'First Booked', 'simply-schedule-appointments' ), + 'booked' => __( 'Booked', 'simply-schedule-appointments' ), + 'pending_form' => __( 'Pending Form Submission', 'simply-schedule-appointments' ), + 'pending_payment' => __( 'Pending Payment', 'simply-schedule-appointments' ), + 'canceled' => __( 'Canceled', 'simply-schedule-appointments' ), + 'abandoned' => __( 'Abandoned', 'simply-schedule-appointments' ), + 'rescheduled' => __( 'Rescheduled', 'simply-schedule-appointments' ), + 'edited' => __( 'Edited', 'simply-schedule-appointments' ), + 'sync_appointment_to_calendar' => __( 'Synced', 'simply-schedule-appointments' ), + 'reassigned' => __( 'Reassigned', 'simply-schedule-appointments' ), + 'assigned' => __( 'Assigned', 'simply-schedule-appointments' ), + 'notification_scheduled' => __( 'Notification Scheduled', 'simply-schedule-appointments' ), + 'notification_sent' => __( 'Notification Sent', 'simply-schedule-appointments' ), + 'reminder' => __( 'Reminder', 'simply-schedule-appointments' ), + 'notification_canceled' => __( 'Notification Canceled', 'simply-schedule-appointments' ), + 'notification_not_sent' => __( 'Notification Not Sent', 'simply-schedule-appointments' ), + 'publish' => __( 'Created', 'simply-schedule-appointments' ), + 'delete' => __( 'Deleted', 'simply-schedule-appointments' ), + ), + 'smsStatuses' => + array ( + 'optedin' => __( 'Opted in', 'simply-schedule-appointments' ), + 'optedout' => __( 'Opted out', 'simply-schedule-appointments' ), + ), + 'filter' => + array ( + 'search' => __( 'Search', 'simply-schedule-appointments' ), + 'filter' => __( 'Filter', 'simply-schedule-appointments' ), + 'filterClose' => __( 'Close filters', 'simply-schedule-appointments' ), + 'export' => __( 'Export', 'simply-schedule-appointments' ), + 'exportTip' => __( 'Export visible appointments', 'simply-schedule-appointments' ), + 'subscribe' => __( 'Subscribe to calendar', 'simply-schedule-appointments' ), + 'timeLabel' => __( 'Appointment Range', 'simply-schedule-appointments' ), + 'typesAndLabels' => __( 'Appointment Types & Labels', 'simply-schedule-appointments' ), + 'selectAllTypes' => __( 'Select all appointment types with label', 'simply-schedule-appointments' ), + 'parentsLabel' => __( 'All types', 'simply-schedule-appointments' ), + 'startDate' => __( 'Start Date', 'simply-schedule-appointments' ), + 'endDate' => __( 'End Date', 'simply-schedule-appointments' ), + 'selected' => __( 'selected', 'simply-schedule-appointments' ), + 'staffLabel' => __( 'Team member', 'simply-schedule-appointments' ), + 'statusLabel' => __( 'Appointment Status', 'simply-schedule-appointments' ), + 'reset' => __( 'Reset filters', 'simply-schedule-appointments' ), + 'title' => __( 'Appointment Filters', 'simply-schedule-appointments' ), + 'modal' => + array ( + 'title' => __( 'Your Calendar Subscription URL', 'simply-schedule-appointments' ), + 'instructions' => __( 'Paste this link in any iCalendar compatible application to sync your appointments.', 'simply-schedule-appointments' ), + 'urlCopied' => __( 'ICS link copied to clipboard', 'simply-schedule-appointments' ), + ), + ), + 'group' => + array ( + 'people' => __( 'people', 'simply-schedule-appointments' ), + 'appointmentDetails' => __( 'Group Appointment Details', 'simply-schedule-appointments' ), + 'viewDetails' => __( 'View attendee details', 'simply-schedule-appointments' ), + 'cancelConfirm' => __( 'Cancel this group appointment?', 'simply-schedule-appointments' ), + 'cancelConfirmBody' => __( 'The following attendees for this group will be canceled:', 'simply-schedule-appointments' ), + 'cancelConfirmCancel' => __( 'Keep All', 'simply-schedule-appointments' ), + 'cancelConfirmOk' => __( 'Cancel All', 'simply-schedule-appointments' ), + 'deleteConfirm' => __( 'Delete this group appointment', 'simply-schedule-appointments' ), + 'cancelDeleteCancel' => __( 'Keep All', 'simply-schedule-appointments' ), + 'cancelDeleteOk' => __( 'Delete All', 'simply-schedule-appointments' ), + 'deleteConfirmExplanation' => __( 'This cannot be undone. All information associated with this group appointment will be permanently removed.', 'simply-schedule-appointments' ), + 'deleteConfirmExplanationCancelable' => __( 'The appointment attendees will not receive any notification that the appointment was deleted. If you would like the attendees to receive a notification of a canceled appointment, please cancel the group appointment before deleting it.', 'simply-schedule-appointments' ), + 'deleteConfirmBody' => __( 'The following attendees for this group will be deleted:', 'simply-schedule-appointments' ), + 'deleting' => __( 'Deleting group appointment', 'simply-schedule-appointments' ), + ), + 'tooManyToDisplay' => + array ( + 'headline' => __( 'Lots of appointments!', 'simply-schedule-appointments' ), + 'explanation' => __( 'Looks like you\'ve got a lot of appointments in this date range! You can use the Export button to export them all to a CSV file. Or you can click the button below to display them all here. Note that displaying so many appointments take a few minutes.', 'simply-schedule-appointments' ), + 'action' => __( 'Show All', 'simply-schedule-appointments' ), + ), + 'webMeetings' => + array ( + 'label' => __( 'Web Meeting:', 'simply-schedule-appointments' ), + ), + 'editStaffDialog' => + array ( + 'editTeam' => __( 'Edit Team Members', 'simply-schedule-appointments' ), + 'editForAppointment' => __( 'Edit Team Members for Appointment', 'simply-schedule-appointments' ), + 'checkingAvailability' => __( 'Checking team members availability', 'simply-schedule-appointments' ), + 'noMembersAssigned' => __( 'No team members will be assigned to this appointment.', 'simply-schedule-appointments' ), + 'selectUnavailableWarning' => __( 'Selecting an unavailable team member may result in scheduling conflicts with their calendar.', 'simply-schedule-appointments' ), + 'assignTeamMember' => __( 'Assign team members', 'simply-schedule-appointments' ), + 'displayAll' => __( 'Allow team members from other appointment types', 'simply-schedule-appointments' ), + 'notAssignedWithThisType' => __( 'Not assigned to this appointment type', 'simply-schedule-appointments' ), + 'inactive' => __( 'Inactive', 'simply-schedule-appointments' ), + 'unavailable' => __( 'Unavailable', 'simply-schedule-appointments' ), + 'currentlyAssigned' => __( 'Currently Assigned', 'simply-schedule-appointments' ), + 'currentAppointmentType' => __( 'Current Appointment type', 'simply-schedule-appointments' ), + 'otherAppointmentTypes' => __( 'Other Appointment types', 'simply-schedule-appointments' ), + ), + ), + 'help' => + array ( + 'timezone' => __( 'The timezone where you are located.', 'simply-schedule-appointments' ), + 'dateFormat' => __( 'The format you want to use for displaying the dates of your appointments and availability.', 'simply-schedule-appointments' ), + 'timeFormat' => __( 'The format you want to use for displaying the times of your appointments and availability', 'simply-schedule-appointments' ), + 'weekStartsOn' => __( 'The day that should be considered the first day of the week.', 'simply-schedule-appointments' ), + 'apptEmail' => __( 'The email address where admin notifications about appointments will be sent.', 'simply-schedule-appointments' ), + 'apptContact' => __( 'The name, business, and email address for the main person administering appointments', 'simply-schedule-appointments' ), + ), + 'support' => + array ( + 'availabilityDetective' => + array ( + 'intro' => __( 'Not sure why your availability for different appointment types isn\'t what you expected? We\'ll help you figure out what\'s going on.', 'simply-schedule-appointments' ), + 'title' => __( 'Availability Detective (beta)', 'simply-schedule-appointments' ), + 'appointmentType' => + array ( + 'label' => __( 'Which appointment type?', 'simply-schedule-appointments' ), + ), + 'getMore' => __( 'Get more information', 'simply-schedule-appointments' ), + 'summary' => __( 'About this appointment type', 'simply-schedule-appointments' ), + 'noAvailability' => + array ( + 'noSlots' => + array ( + 'label' => __( 'No availability', 'simply-schedule-appointments' ), + 'description' => __( 'This appointment type has no availability on this day of the week', 'simply-schedule-appointments' ), + 'action' => __( 'Edit Appointment Type', 'simply-schedule-appointments' ), + ), + 'tooShortSlots' => + array ( + 'label' => __( 'Not available for duration', 'simply-schedule-appointments' ), + 'description' => __( 'The duration of the appointment type is longer than any available times for booking on this day of the week.', 'simply-schedule-appointments' ), + 'action' => __( 'Edit Appointment Type', 'simply-schedule-appointments' ), + ), + ), + 'info' => + array ( + 'buffer_before' => + array ( + 'title' => __( 'Buffer before', 'simply-schedule-appointments' ), + 'desc' => __( 'Time to leave free before an appointment', 'simply-schedule-appointments' ), + ), + 'buffer_after' => + array ( + 'title' => __( 'Buffer after', 'simply-schedule-appointments' ), + 'desc' => __( 'Time to leave free after an appointment', 'simply-schedule-appointments' ), + ), + 'booking_window' => + array ( + 'title' => __( 'Booking Window', 'simply-schedule-appointments' ), + 'desc' => __( 'When the booking form is available for booking appointments', 'simply-schedule-appointments' ), + 'no_value' => __( 'Open', 'simply-schedule-appointments' ), + 'outsideBookingWindowWarning' => __( 'You are currently outside the booking window.', 'simply-schedule-appointments' ), + ), + 'availability_window' => + array ( + 'title' => __( 'Availability Window', 'simply-schedule-appointments' ), + 'desc' => __( 'When appointments can be booked', 'simply-schedule-appointments' ), + 'no_value' => __( 'Open', 'simply-schedule-appointments' ), + ), + 'min_booking_notice' => + array ( + 'title' => __( 'Minimum booking notice', 'simply-schedule-appointments' ), + 'desc' => __( 'How much notice is required when booking an appointment', 'simply-schedule-appointments' ), + 'explanation' => __( 'No appointments can be booked before:', 'simply-schedule-appointments' ), + ), + 'max_booking_notice' => + array ( + 'title' => __( 'Advance notice', 'simply-schedule-appointments' ), + 'desc' => __( 'How far into the future appointments can be booked', 'simply-schedule-appointments' ), + 'explanation' => __( 'No appointments can be booked after:', 'simply-schedule-appointments' ), + ), + 'date' => + array ( + 'title' => __( 'What date should be available?', 'simply-schedule-appointments' ), + ), + 'time' => + array ( + 'title' => __( 'What time should be available?', 'simply-schedule-appointments' ), + ), + ), + 'status' => + array ( + 'checking' => __( 'Checking availability', 'simply-schedule-appointments' ), + 'available' => __( 'Available', 'simply-schedule-appointments' ), + 'not_available' => __( 'Not available', 'simply-schedule-appointments' ), + ), + ), + 'appointmentStartDate' => __( 'Appointment start date', 'simply-schedule-appointments' ), + 'dotorg_communication' => __( 'WordPress.org communication', 'simply-schedule-appointments' ), + 'https_status' => __( 'HTTPS status', 'simply-schedule-appointments' ), + 'json_extension' => __( 'JSON extension', 'simply-schedule-appointments' ), + 'loadingSupport' => __( 'Loading your support details', 'simply-schedule-appointments' ), + 'moreDetails' => __( 'More Details', 'simply-schedule-appointments' ), + 'os' => __( 'Operating system', 'simply-schedule-appointments' ), + 'php_version' => __( 'PHP version', 'simply-schedule-appointments' ), + 'php_timezone' => __( 'PHP default timezone', 'simply-schedule-appointments' ), + 'support_pin' => __( 'SSA support pin', 'simply-schedule-appointments' ), + 'ssa_license' => __( 'License Status', 'simply-schedule-appointments' ), + 'scheduled_events' => __( 'Scheduled events', 'simply-schedule-appointments' ), + 'screenResolution' => __( 'Screen resolution', 'simply-schedule-appointments' ), + 'siteUrl' => __( 'Site URL', 'simply-schedule-appointments' ), + 'sql_server' => __( 'SQL server', 'simply-schedule-appointments' ), + 'ssl_support' => __( 'SSL support', 'simply-schedule-appointments' ), + 'supportDetails' => __( 'These details can help our support team troubleshoot any issues you might be having.', 'simply-schedule-appointments' ), + 'supportTitle' => __( 'Support', 'simply-schedule-appointments' ), + 'utf8mb4_support' => __( 'Utf8mb4 support', 'simply-schedule-appointments' ), + 'webBrowser' => __( 'Web browser', 'simply-schedule-appointments' ), + 'webBrowserSize' => __( 'Web browser size', 'simply-schedule-appointments' ), + 'wordpress_version' => __( 'WordPress version', 'simply-schedule-appointments' ), + 'plugin_version' => __( 'Simply Schedule Appointments version', 'simply-schedule-appointments' ), + 'ssa_quick_connect_status' => __( 'SSA Quick Connect Authorization', 'simply-schedule-appointments' ), + 'homeUrl' => __( 'Home URL', 'simply-schedule-appointments' ), + 'unknown' => __( 'Unknown', 'simply-schedule-appointments' ), + 'contact' => __( 'Contact Support Team', 'simply-schedule-appointments' ), + 'sendMessage' => __( 'Send Message', 'simply-schedule-appointments' ), + 'message' => __( 'Message to the support team', 'simply-schedule-appointments' ), + 'fromEmail' => __( 'Your email address', 'simply-schedule-appointments' ), + 'invalidEmail' => __( 'Invalid email', 'simply-schedule-appointments' ), + 'disclosure' => __( 'Messages sent to the support team through this form will include the debugging information visible on this page.', 'simply-schedule-appointments' ), + 'disclosureTime' => __( 'Messages sent to the support team through this form will include debugging information about this appointment type and general settings', 'simply-schedule-appointments' ), + 'includeSettings' => __( 'Include information about settings and appointment types', 'simply-schedule-appointments' ), + 'includeDescription' => __( 'Checking this box sends us extra helpful information about your settings and appointment types. It *does not* include any private information or any information about your customers or your appointments.', 'simply-schedule-appointments' ), + 'includePlugins' => __( 'Include list of active plugins', 'simply-schedule-appointments' ), + 'sendingMessage' => __( 'Sending your message', 'simply-schedule-appointments' ), + 'successTitle' => __( 'Success!', 'simply-schedule-appointments' ), + 'exportCopied' => __( 'Export code copied to your clipboard.', 'simply-schedule-appointments' ), + 'successMessage' => __( 'Your message was sent!', 'simply-schedule-appointments' ), + 'hearBack' => __( 'You should hear back from us by:', 'simply-schedule-appointments' ), + 'checkSpam' => __( 'Please check your spam folder if you haven\'t heard from us by then.', 'simply-schedule-appointments' ), + 'successMessageDetails' => __( 'Our support hours are 8am-4pm Monday through Friday (Eastern time)', 'simply-schedule-appointments' ), + 'messageFailedDescription' => __( 'Something stopped us from being able to send your message, but never fear. You can simply email us at support@ssaplugin.com for assistance. Include the debugging information on this page to help us help you as quickly as possible.', 'simply-schedule-appointments' ), + 'messageFailedDetails' => __( 'Error details:', 'simply-schedule-appointments' ), + 'showDebugging' => __( 'Show debugging info', 'simply-schedule-appointments' ), + 'debugger' => __( 'Debugger', 'simply-schedule-appointments' ), + 'debugLogs' => __( 'Debug Logs', 'simply-schedule-appointments' ), + 'loadDebugLog' => __( 'Load debug log', 'simply-schedule-appointments' ), + 'debugLogsWP' => __( 'WordPress Debug Logs', 'simply-schedule-appointments' ), + 'enableDebugLog' => __( 'Enable Debug Log', 'simply-schedule-appointments' ), + 'enableDebugLogWP' => __( 'Enable WordPress Debug Log', 'simply-schedule-appointments' ), + 'debugLogOptions' => __( 'Debug Log Options', 'simply-schedule-appointments' ), + 'debugLogRefresh' => __( 'Refresh Debug Log', 'simply-schedule-appointments' ), + 'debugLogDownload' => __( 'Download Log File', 'simply-schedule-appointments' ), + 'debugLogClear' => __( 'Clear Log File', 'simply-schedule-appointments' ), + 'debugLogEmpty' => __( 'Your debug log file is empty', 'simply-schedule-appointments' ), + 'debugLogEmptyDetails' => __( 'We will display here the debug log contents as soon as the system starts to log information on the file.', 'simply-schedule-appointments' ), + 'debugLogLoading' => __( 'Loading debug log contents...', 'simply-schedule-appointments' ), + 'debugLogLoadingWP' => __( 'Loading WordPress debug log contents...', 'simply-schedule-appointments' ), + 'supportRequestIntro' => __( 'Need more help?', 'simply-schedule-appointments' ), + 'supportRequestCta' => __( 'Ask our support team', 'simply-schedule-appointments' ), + 'guides' => + array ( + 'title' => __( 'Help Guides', 'simply-schedule-appointments' ), + 'title_contact' => __( 'These guides might help you', 'simply-schedule-appointments' ), + 'more' => __( 'Show More', 'simply-schedule-appointments' ), + 'less' => __( 'Show Less', 'simply-schedule-appointments' ), + 'notFound' => __( 'No help guides found.', 'simply-schedule-appointments' ), + 'loading' => __( 'Loading help guides...', 'simply-schedule-appointments' ), + 'visit' => __( 'Visit Help Center', 'simply-schedule-appointments' ), + ), + ), + 'tokenText' => + array ( + 'errors' => + array ( + 'required' => __( 'This field is required', 'simply-schedule-appointments' ), + 'validationError' => __( 'This template has invalid syntax. Check your Twig template variables for errors.', 'simply-schedule-appointments' ), + ), + ), + 'revisions' => + array ( + 'actions' => + array ( + 'first_booked' => __( 'First Booked', 'simply-schedule-appointments' ), + 'booked' => __( 'Booked', 'simply-schedule-appointments' ), + 'pending_form' => __( 'Pending Form Submission', 'simply-schedule-appointments' ), + 'pending_payment' => __( 'Pending Payment', 'simply-schedule-appointments' ), + 'canceled' => __( 'Canceled', 'simply-schedule-appointments' ), + 'abandoned' => __( 'Abandoned', 'simply-schedule-appointments' ), + 'rescheduled' => __( 'Rescheduled', 'simply-schedule-appointments' ), + 'edited' => __( 'Edited', 'simply-schedule-appointments' ), + 'sync_appointment_to_calendar' => __( 'Synced', 'simply-schedule-appointments' ), + 'reassigned' => __( 'Reassigned', 'simply-schedule-appointments' ), + 'assigned' => __( 'Assigned', 'simply-schedule-appointments' ), + 'notification_scheduled' => __( 'Notification Scheduled', 'simply-schedule-appointments' ), + 'notification_sent' => __( 'Notification Sent', 'simply-schedule-appointments' ), + 'reminder' => __( 'Reminder', 'simply-schedule-appointments' ), + 'notification_canceled' => __( 'Notification Canceled', 'simply-schedule-appointments' ), + 'notification_not_sent' => __( 'Notification Not Sent', 'simply-schedule-appointments' ), + 'publish' => __( 'Created', 'simply-schedule-appointments' ), + 'delete' => __( 'Deleted', 'simply-schedule-appointments' ), + 'status_changed' => __( 'Recovered', 'simply-schedule-appointments' ), + 'title_changed' => __( 'Title Changed', 'simply-schedule-appointments' ), + 'buffer_before_changed' => __( 'Buffer Before Changed', 'simply-schedule-appointments' ), + 'buffer_after_changed' => __( 'Buffer After Changed', 'simply-schedule-appointments' ), + 'max_event_count_changed' => __( 'Per Day Changed', 'simply-schedule-appointments' ), + 'min_booking_notice_changed' => __( 'Booking Notice Changed', 'simply-schedule-appointments' ), + 'capacity_changed' => __( 'Capacity Changed', 'simply-schedule-appointments' ), + 'capacity_type_changed' => __( 'Capacity Type Changed', 'simply-schedule-appointments' ), + 'timezone_style_changed' => __( 'Timezone Changed', 'simply-schedule-appointments' ), + 'duration_changed' => __( 'Duration Changed', 'simply-schedule-appointments' ), + 'label_id_changed' => __( 'Color Changed', 'simply-schedule-appointments' ), + 'slug_changed' => __( 'Slug Changed', 'simply-schedule-appointments' ), + 'instructions_changed' => __( 'Instructions Changed', 'simply-schedule-appointments' ), + 'availability_increment_changed' => __( 'Availability Start Times Changed', 'simply-schedule-appointments' ), + 'availability_type_changed' => __( 'Availability Type Changed', 'simply-schedule-appointments' ), + 'availability_changed' => __( 'Availability Schedule Changed', 'simply-schedule-appointments' ), + 'web_meetings_changed' => __( 'Web Meetings Changed', 'simply-schedule-appointments' ), + 'booking_flow_settings_changed' => __( 'Booking Flow Changed', 'simply-schedule-appointments' ), + 'customer_information_changed' => __( 'Customer Information Changed', 'simply-schedule-appointments' ), + 'staff_changed' => __( 'Team Members Changed', 'simply-schedule-appointments' ), + 'staff_ids_changed' => __( 'Team Members Staff Changed', 'simply-schedule-appointments' ), + 'staff_capacity_changed' => __( 'Staff Capacity Changed', 'simply-schedule-appointments' ), + 'has_max_capacity_changed' => __( 'Maximum Capacity Changed', 'simply-schedule-appointments' ), + 'reminder_sent' => __( 'Notification Sent', 'simply-schedule-appointments' ), + 'booking_end_date_changed' => __( 'Booking End Date', 'simply-schedule-appointments' ), + 'booking_start_date_changed' => __( 'Booking start Date', 'simply-schedule-appointments' ), + 'mailchimp_changed' => __( 'Mailchimp', 'simply-schedule-appointments' ), + 'reminder_not_sent' => __( 'Notification Not Sent', 'simply-schedule-appointments' ), + 'no_show' => __( 'No Show', 'simply-schedule-appointments' ), + 'no_show_reverted' => __( 'No Show Reverted', 'simply-schedule-appointments' ), + 'opt_out_notification' => __( 'Opt Out Notification', 'simply-schedule-appointments' ), + ), + ), +); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/languages/booking-app-new-translations.php b/wp-content/plugins/simply-schedule-appointments/languages/booking-app-new-translations.php new file mode 100644 index 0000000..92d244c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/languages/booking-app-new-translations.php @@ -0,0 +1,223 @@ +<?php $translations = array ( + 'actions' => + array ( + 'back' => __( 'Go back', 'simply-schedule-appointments' ), + 'editTimezone' => __( 'Change the timezone.', 'simply-schedule-appointments' ), + 'forward' => __( 'Go forward', 'simply-schedule-appointments' ), + 'saveTimezone' => __( 'Save timezone', 'simply-schedule-appointments' ), + 'searchCountry' => __( 'Search country...', 'simply-schedule-appointments' ), + ), + 'general' => + array ( + 'loadingInitial' => __( 'Loading', 'simply-schedule-appointments' ), + 'loadingTypes' => __( 'Getting appointment information', 'simply-schedule-appointments' ), + 'loadingAvailableSlots' => __( 'Loading Available Appointments', 'simply-schedule-appointments' ), + 'yourTimezone' => __( 'Your timezone:', 'simply-schedule-appointments' ), + 'selectTimezone' => __( 'Select a timezone', 'simply-schedule-appointments' ), + 'timezoneMismatch' => __( 'You are booking an appointment in timezone:', 'simply-schedule-appointments' ), + 'localTime' => __( 'Current local time is:', 'simply-schedule-appointments' ), + 'timezoneGuessWrong' => __( 'We\'re having trouble guessing your timezone. Please check to be sure the timezone is correct.', 'simply-schedule-appointments' ), + 'timezoneChangedWrong' => __( 'Please check your timezone. For best results, choose a timezone named for your country or region.', 'simply-schedule-appointments' ), + 'confirmSelection' => __( 'Confirm Selection', 'simply-schedule-appointments' ), + ), + 'pageTitles' => + array ( + 'book' => __( 'Enter your contact information', 'simply-schedule-appointments' ), + 'customerInformation' => __( 'Enter your contact information', 'simply-schedule-appointments' ), + 'Booked' => __( 'Appointment booked', 'simply-schedule-appointments' ), + 'confirmation' => __( 'Appointment booked', 'simply-schedule-appointments' ), + 'bookingDefault' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'bookingForm' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'formConfirm' => __( 'Appointment date selected', 'simply-schedule-appointments' ), + 'change' => __( 'Modify a booked appointment', 'simply-schedule-appointments' ), + 'date' => __( 'Select a date', 'simply-schedule-appointments' ), + 'formType' => __( 'Select a date', 'simply-schedule-appointments' ), + 'formDate' => __( 'Select a date', 'simply-schedule-appointments' ), + 'loadSelected' => __( 'Loading appointment', 'simply-schedule-appointments' ), + 'time' => __( 'Select a time', 'simply-schedule-appointments' ), + 'formTime' => __( 'Select a time', 'simply-schedule-appointments' ), + 'type' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'appointmentType' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'view' => __( 'View your appointment', 'simply-schedule-appointments' ), + 'express' => __( 'Select a date and time', 'simply-schedule-appointments' ), + ), + 'booking' => + array ( + 'back' => __( 'Back', 'simply-schedule-appointments' ), + 'booking' => __( 'Booking:', 'simply-schedule-appointments' ), + 'appointmentType' => __( 'What type of appointment are you booking?', 'simply-schedule-appointments' ), + 'infoHeader' => __( 'You are booking: ', 'simply-schedule-appointments' ), + 'confirmHeader' => __( 'Thank you! Your appointment is booked: ', 'simply-schedule-appointments' ), + 'when' => __( 'When: ', 'simply-schedule-appointments' ), + 'saving' => __( 'Saving', 'simply-schedule-appointments' ), + 'processingPayment' => + array ( + 'stripe' => __( 'Processing payment', 'simply-schedule-appointments' ), + 'paypal' => __( 'Pay with PayPal', 'simply-schedule-appointments' ), + ), + 'paypalMessage' => __( 'We\'ll hold your appointment time for 10 minutes to give you time to complete payment with PayPal', 'simply-schedule-appointments' ), + 'bookingAppointment' => __( 'Booking your appointment', 'simply-schedule-appointments' ), + 'calendarSave' => __( 'Save to calendar', 'simply-schedule-appointments' ), + 'calendarSaveGoogle' => __( 'Google calendar', 'simply-schedule-appointments' ), + 'calendarSaveOther' => __( 'Other', 'simply-schedule-appointments' ), + 'invitationHasBeenSent' => __( 'A calendar invitation has been sent to your email address', 'simply-schedule-appointments' ), + 'dateSelect' => __( 'Select a date', 'simply-schedule-appointments' ), + 'timeSelect' => __( 'Select a time on', 'simply-schedule-appointments' ), + 'smsOptIn' => __( 'Please remind me about this appointment by text message at this number', 'simply-schedule-appointments' ), + 'bookButton' => __( 'Book this appointment', 'simply-schedule-appointments' ), + 'updateButton' => __( 'Update this appointment', 'simply-schedule-appointments' ), + 'checkAppointment' => __( 'Saving your appointment information', 'simply-schedule-appointments' ), + 'available' => __( 'Available: ', 'simply-schedule-appointments' ), + 'redirecting' => __( 'Please wait while we redirect you', 'simply-schedule-appointments' ), + ), + 'suggestFirstAvailable' => + array ( + 'next' => __( 'Next available appointment', 'simply-schedule-appointments' ), + 'confirm' => __( 'Confirm Appointment Time', 'simply-schedule-appointments' ), + 'pickAnother' => __( 'Or, pick another time', 'simply-schedule-appointments' ), + ), + 'change' => + array ( + 'changeHeader' => __( 'Make a change', 'simply-schedule-appointments' ), + 'canceledIndicator' => __( 'Canceled:', 'simply-schedule-appointments' ), + 'canceling' => __( 'Canceling appointment', 'simply-schedule-appointments' ), + 'cancelConfirm' => __( 'Are you sure you want to cancel?', 'simply-schedule-appointments' ), + 'cancelConfirmCancel' => __( 'Keep Appointment', 'simply-schedule-appointments' ), + 'cancelConfirmOkay' => __( 'Cancel Appointment', 'simply-schedule-appointments' ), + 'cancelationNote' => __( 'Cancelation Note', 'simply-schedule-appointments' ), + 'reschedulingNote' => __( 'Rescheduling Note', 'simply-schedule-appointments' ), + 'past' => __( 'This appointment is in the past. It cannot be edited.', 'simply-schedule-appointments' ), + 'canceled' => __( 'This appointment has been canceled', 'simply-schedule-appointments' ), + 'reschedule' => __( 'Reschedule', 'simply-schedule-appointments' ), + 'viewAsAdmin' => __( 'View as admin', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel Appointment', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit Information', 'simply-schedule-appointments' ), + 'changeTime' => __( 'Change selected time', 'simply-schedule-appointments' ), + 'new' => __( 'Schedule a new appointment', 'simply-schedule-appointments' ), + 'next' => __( 'What would you like to do next?', 'simply-schedule-appointments' ), + ), + 'reschedulingDialog' => + array ( + 'title' => __( 'Would you like to leave a rescheduling note?', 'simply-schedule-appointments' ), + 'text' => __( 'This appointment will be rescheduled to', 'simply-schedule-appointments' ), + 'textfieldLabel' => __( 'Rescheduling Note', 'simply-schedule-appointments' ), + 'textfieldHelpText' => __( 'This note will be visible to your customer and will be sent with any notifications you have set up.', 'simply-schedule-appointments' ), + 'actions' => + array ( + 'close' => __( 'Close', 'simply-schedule-appointments' ), + 'clearAndClose' => __( 'Clear & Close', 'simply-schedule-appointments' ), + 'addNote' => __( 'Add Note', 'simply-schedule-appointments' ), + ), + 'review' => + array ( + 'none' => __( 'None', 'simply-schedule-appointments' ), + 'screenReader' => + array ( + 'edit' => __( 'Edit rescheduling note', 'simply-schedule-appointments' ), + 'add' => __( 'Add rescheduling note', 'simply-schedule-appointments' ), + ), + ), + ), + 'errors' => + array ( + 'heading' => __( 'Uh oh.', 'simply-schedule-appointments' ), + 'intro' => __( 'We ran into a problem: ', 'simply-schedule-appointments' ), + 'api' => __( 'Error loading API', 'simply-schedule-appointments' ), + 'settings' => __( 'Unable to get the settings', 'simply-schedule-appointments' ), + 'appointmentTypes' => __( 'Unable to get the available appointment types', 'simply-schedule-appointments' ), + 'noAppointmentTypes' => __( 'No appointment types have been set up yet.', 'simply-schedule-appointments' ), + 'requiredField' => __( ' is required.', 'simply-schedule-appointments' ), + 'fieldRequired' => __( 'Field required.', 'simply-schedule-appointments' ), + 'requiredEmail' => __( 'A valid email address is required', 'simply-schedule-appointments' ), + 'requiredPhone' => __( 'Please enter a valid phone number', 'simply-schedule-appointments' ), + 'outsideBookingWindow' => __( 'This appointment type cannot be booked at this time', 'simply-schedule-appointments' ), + 'noAvailableSlots' => __( 'There are no available appointment times', 'simply-schedule-appointments' ), + 'noPastAppointments' => __( 'You can\'t book appointments in the past.', 'simply-schedule-appointments' ), + 'timeTaken' => __( 'Sorry, that time was just booked and is no longer available. Please choose another time.', 'simply-schedule-appointments' ), + 'pickNewTime' => __( 'Pick a new time', 'simply-schedule-appointments' ), + 'pickNewDate' => __( 'Pick a new date', 'simply-schedule-appointments' ), + 'retry' => __( 'Retry', 'simply-schedule-appointments' ), + 'bookingFailed' => __( 'Sorry, we couldn\'t save your appointment', 'simply-schedule-appointments' ), + 'connectionError' => __( 'Connection lost. We\'re having trouble communicating', 'simply-schedule-appointments' ), + 'noResults' => __( 'No results found', 'simply-schedule-appointments' ), + 'noSlotsOnDate' => __( 'No available appointments for this date.', 'simply-schedule-appointments' ), + ), + 'day' => + array ( + 'night' => __( 'Night', 'simply-schedule-appointments' ), + 'morning' => __( 'Morning', 'simply-schedule-appointments' ), + 'afternoon' => __( 'Afternoon', 'simply-schedule-appointments' ), + 'evening' => __( 'Evening', 'simply-schedule-appointments' ), + ), + 'units' => + array ( + 'minute_singular' => __( 'minute', 'simply-schedule-appointments' ), + 'minute_plural' => __( 'minutes', 'simply-schedule-appointments' ), + 'week_singular' => __( 'week', 'simply-schedule-appointments' ), + 'week_plural' => __( 'weeks', 'simply-schedule-appointments' ), + 'day_singular' => __( 'day', 'simply-schedule-appointments' ), + 'day_plural' => __( 'days', 'simply-schedule-appointments' ), + 'hour_singular' => __( 'hour', 'simply-schedule-appointments' ), + 'hour_plural' => __( 'hours', 'simply-schedule-appointments' ), + ), + 'appointmentTypes' => + array ( + 'customer_information' => + array ( + 'Name' => __( 'Name', 'simply-schedule-appointments' ), + 'Email' => __( 'Email', 'simply-schedule-appointments' ), + 'Phone' => __( 'Phone', 'simply-schedule-appointments' ), + 'Address' => __( 'Address', 'simply-schedule-appointments' ), + 'City' => __( 'City', 'simply-schedule-appointments' ), + 'State' => __( 'State', 'simply-schedule-appointments' ), + 'Zip' => __( 'Zip', 'simply-schedule-appointments' ), + 'Notes' => __( 'Notes', 'simply-schedule-appointments' ), + ), + ), + 'payments' => + array ( + 'price' => __( 'Price', 'simply-schedule-appointments' ), + 'loading' => __( 'Loading payment method', 'simply-schedule-appointments' ), + 'paymentMethod' => __( 'Payment Method', 'simply-schedule-appointments' ), + 'refundPolicy' => __( 'Refund Policy', 'simply-schedule-appointments' ), + 'payLater' => __( 'Pay Later', 'simply-schedule-appointments' ), + 'canceled' => __( 'No payment was processed. Please try again.', 'simply-schedule-appointments' ), + 'stripe' => + array ( + 'bookAndPayLabel' => __( 'Confirm and Pay', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel', 'simply-schedule-appointments' ), + 'processing' => __( 'Processing your payment...', 'simply-schedule-appointments' ), + ), + 'paypal' => + array ( + 'bookAndPayLabel' => __( 'Confirm and Pay', 'simply-schedule-appointments' ), + ), + 'stripeLabel' => __( 'Book', 'simply-schedule-appointments' ), + 'paymentReceived' => __( 'Payment Received:', 'simply-schedule-appointments' ), + 'paymentDue' => __( 'Payment Due:', 'simply-schedule-appointments' ), + 'paymentFailed' => __( 'Unable to process payment. Please try again.', 'simply-schedule-appointments' ), + 'paymentDelayHeader' => __( 'Things are taking longer than expected', 'simply-schedule-appointments' ), + 'paypalDelayText' => __( 'PayPal is taking a little longer than usual to process your payment. Don\'t worry - we\'ll hold your appointment time for you. This usually resolves within a few minutes, or in rare cases, a few hours. Once your payment is processed, you\'ll receive an email confirmation of this appointment. If you don\'t receive that, please get in touch.', 'simply-schedule-appointments' ), + 'stripeDelayText' => __( 'Stripe is taking a little longer than usual to process your payment. Don\'t worry - we\'ll hold your appointment time for you. This usually resolves within a few minutes, or in rare cases, a few hours. Once your payment is processed, you\'ll receive an email confirmation of this appointment. If you don\'t receive that, please get in touch.', 'simply-schedule-appointments' ), + ), + 'resources' => + array ( + 'selectResource' => __( 'Select a Resource', 'simply-schedule-appointments' ), + 'any' => __( 'Any', 'simply-schedule-appointments' ), + 'toBeAssigned' => __( 'To be assigned', 'simply-schedule-appointments' ), + ), + 'teamMembers' => + array ( + 'selectTeamMember' => __( 'Team Member', 'simply-schedule-appointments' ), + 'any' => __( 'Any', 'simply-schedule-appointments' ), + 'toBeAssigned' => __( 'To be assigned', 'simply-schedule-appointments' ), + 'selectedMember' => __( 'Team Member: ', 'simply-schedule-appointments' ), + ), + 'inputs' => + array ( + 'phone' => + array ( + 'placeholder' => __( 'Enter a phone number', 'simply-schedule-appointments' ), + ), + ), +); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/languages/booking-app-translations.php b/wp-content/plugins/simply-schedule-appointments/languages/booking-app-translations.php new file mode 100644 index 0000000..9809654 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/languages/booking-app-translations.php @@ -0,0 +1,157 @@ +<?php $translations = array ( + 'actions' => + array ( + 'back' => __( 'Go back', 'simply-schedule-appointments' ), + 'editTimezone' => __( 'Change the timezone.', 'simply-schedule-appointments' ), + 'forward' => __( 'Go forward', 'simply-schedule-appointments' ), + 'saveTimezone' => __( 'Save timezone', 'simply-schedule-appointments' ), + ), + 'general' => + array ( + 'loadingInitial' => __( 'Loading', 'simply-schedule-appointments' ), + 'loadingTypes' => __( 'Getting appointment information', 'simply-schedule-appointments' ), + 'loadingAvailableSlots' => __( 'Loading Available Appointments', 'simply-schedule-appointments' ), + 'yourTimezone' => __( 'Your timezone:', 'simply-schedule-appointments' ), + 'selectTimezone' => __( 'Select a timezone', 'simply-schedule-appointments' ), + 'timezoneMismatch' => __( 'You are booking an appointment in timezone:', 'simply-schedule-appointments' ), + 'localTime' => __( 'Current local time is:', 'simply-schedule-appointments' ), + 'timezoneGuessWrong' => __( 'We\'re having trouble guessing your timezone. Please check to be sure the timezone is correct.', 'simply-schedule-appointments' ), + 'timezoneChangedWrong' => __( 'Please check your timezone. For best results, choose a timezone named for your country or region.', 'simply-schedule-appointments' ), + ), + 'pageTitles' => + array ( + 'book' => __( 'Enter your contact information', 'simply-schedule-appointments' ), + 'Booked' => __( 'Appointment booked', 'simply-schedule-appointments' ), + 'bookingDefault' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'bookingForm' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'formConfirm' => __( 'Appointment date selected', 'simply-schedule-appointments' ), + 'change' => __( 'Modify a booked appointment', 'simply-schedule-appointments' ), + 'date' => __( 'Select a date', 'simply-schedule-appointments' ), + 'formType' => __( 'Select a date', 'simply-schedule-appointments' ), + 'formDate' => __( 'Select a date', 'simply-schedule-appointments' ), + 'loadSelected' => __( 'Loading appointment', 'simply-schedule-appointments' ), + 'time' => __( 'Select a time', 'simply-schedule-appointments' ), + 'formTime' => __( 'Select a time', 'simply-schedule-appointments' ), + 'type' => __( 'Select an appointment type', 'simply-schedule-appointments' ), + 'view' => __( 'View your appointment', 'simply-schedule-appointments' ), + ), + 'booking' => + array ( + 'booking' => __( 'Booking:', 'simply-schedule-appointments' ), + 'appointmentType' => __( 'What type of appointment are you booking?', 'simply-schedule-appointments' ), + 'infoHeader' => __( 'You are booking: ', 'simply-schedule-appointments' ), + 'confirmHeader' => __( 'Thank you! Your appointment is booked', 'simply-schedule-appointments' ), + 'when' => __( 'When: ', 'simply-schedule-appointments' ), + 'saving' => __( 'Saving', 'simply-schedule-appointments' ), + 'processingPayment' => + array ( + 'stripe' => __( 'Processing payment', 'simply-schedule-appointments' ), + 'paypal' => __( 'Pay with PayPal', 'simply-schedule-appointments' ), + ), + 'paypalMessage' => __( 'We\'ll hold your appointment time for 10 minutes to give you time to complete payment with PayPal', 'simply-schedule-appointments' ), + 'bookingAppointment' => __( 'Booking your appointment', 'simply-schedule-appointments' ), + 'calendarSave' => __( 'Save to calendar', 'simply-schedule-appointments' ), + 'calendarSaveGoogle' => __( 'Google calendar', 'simply-schedule-appointments' ), + 'calendarSaveOther' => __( 'Other', 'simply-schedule-appointments' ), + 'dateSelect' => __( 'Select a date', 'simply-schedule-appointments' ), + 'timeSelect' => __( 'Select a time on', 'simply-schedule-appointments' ), + 'smsOptIn' => __( 'Please remind me about this appointment by text message at this number', 'simply-schedule-appointments' ), + 'bookButton' => __( 'Book this appointment', 'simply-schedule-appointments' ), + 'updateButton' => __( 'Update this appointment', 'simply-schedule-appointments' ), + 'checkAppointment' => __( 'Saving your appointment information', 'simply-schedule-appointments' ), + 'available' => __( 'Available: ', 'simply-schedule-appointments' ), + ), + 'change' => + array ( + 'changeHeader' => __( 'Make a change', 'simply-schedule-appointments' ), + 'canceledIndicator' => __( 'Canceled:', 'simply-schedule-appointments' ), + 'canceling' => __( 'Canceling appointment', 'simply-schedule-appointments' ), + 'cancelConfirm' => __( 'Are you sure you want to cancel?', 'simply-schedule-appointments' ), + 'cancelConfirmCancel' => __( 'Keep Appointment', 'simply-schedule-appointments' ), + 'cancelConfirmOkay' => __( 'Cancel Appointment', 'simply-schedule-appointments' ), + 'past' => __( 'This appointment is in the past. It cannot be edited.', 'simply-schedule-appointments' ), + 'canceled' => __( 'This appointment has been canceled', 'simply-schedule-appointments' ), + 'reschedule' => __( 'Reschedule', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel Appointment', 'simply-schedule-appointments' ), + 'edit' => __( 'Edit Information', 'simply-schedule-appointments' ), + 'changeTime' => __( 'Change selected time', 'simply-schedule-appointments' ), + 'new' => __( 'Schedule a new appointment', 'simply-schedule-appointments' ), + 'next' => __( 'What would you like to do next?', 'simply-schedule-appointments' ), + ), + 'errors' => + array ( + 'heading' => __( 'Uh oh.', 'simply-schedule-appointments' ), + 'intro' => __( 'We ran into a problem: ', 'simply-schedule-appointments' ), + 'api' => __( 'Error loading API', 'simply-schedule-appointments' ), + 'settings' => __( 'Unable to get the settings', 'simply-schedule-appointments' ), + 'appointmentTypes' => __( 'Unable to get the available appointment types', 'simply-schedule-appointments' ), + 'noAppointmentTypes' => __( 'No appointment types have been set up yet.', 'simply-schedule-appointments' ), + 'requiredField' => __( ' is required.', 'simply-schedule-appointments' ), + 'requiredEmail' => __( 'A valid email address is required', 'simply-schedule-appointments' ), + 'requiredPhone' => __( 'Please enter a valid phone number', 'simply-schedule-appointments' ), + 'outsideBookingWindow' => __( 'This appointment type cannot be booked at this time', 'simply-schedule-appointments' ), + 'noAvailableSlots' => __( 'There are no available appointment times', 'simply-schedule-appointments' ), + 'noPastAppointments' => __( 'You can\'t book appointments in the past.', 'simply-schedule-appointments' ), + 'timeTaken' => __( 'Sorry, that time was just booked and is no longer available. Please choose another time.', 'simply-schedule-appointments' ), + 'pickNewTime' => __( 'Pick a new time', 'simply-schedule-appointments' ), + 'retry' => __( 'Retry', 'simply-schedule-appointments' ), + 'bookingFailed' => __( 'Sorry, we couldn\'t save your appointment', 'simply-schedule-appointments' ), + 'connectionError' => __( 'Connection lost. We\'re having trouble communicating', 'simply-schedule-appointments' ), + ), + 'day' => + array ( + 'night' => __( 'Night', 'simply-schedule-appointments' ), + 'morning' => __( 'Morning', 'simply-schedule-appointments' ), + 'afternoon' => __( 'Afternoon', 'simply-schedule-appointments' ), + 'evening' => __( 'Evening', 'simply-schedule-appointments' ), + ), + 'units' => + array ( + 'minute_singular' => __( 'minute', 'simply-schedule-appointments' ), + 'minute_plural' => __( 'minutes', 'simply-schedule-appointments' ), + 'week_singular' => __( 'week', 'simply-schedule-appointments' ), + 'week_plural' => __( 'weeks', 'simply-schedule-appointments' ), + 'day_singular' => __( 'day', 'simply-schedule-appointments' ), + 'day_plural' => __( 'days', 'simply-schedule-appointments' ), + 'hour_singular' => __( 'hour', 'simply-schedule-appointments' ), + 'hour_plural' => __( 'hours', 'simply-schedule-appointments' ), + ), + 'appointmentTypes' => + array ( + 'customer_information' => + array ( + 'Name' => __( 'Name', 'simply-schedule-appointments' ), + 'Email' => __( 'Email', 'simply-schedule-appointments' ), + 'Phone' => __( 'Phone', 'simply-schedule-appointments' ), + 'Address' => __( 'Address', 'simply-schedule-appointments' ), + 'City' => __( 'City', 'simply-schedule-appointments' ), + 'State' => __( 'State', 'simply-schedule-appointments' ), + 'Zip' => __( 'Zip', 'simply-schedule-appointments' ), + 'Notes' => __( 'Notes', 'simply-schedule-appointments' ), + ), + ), + 'payments' => + array ( + 'price' => __( 'Price', 'simply-schedule-appointments' ), + 'loading' => __( 'Loading payment method', 'simply-schedule-appointments' ), + 'paymentMethod' => __( 'Payment Method', 'simply-schedule-appointments' ), + 'refundPolicy' => __( 'Refund Policy', 'simply-schedule-appointments' ), + 'payLater' => __( 'Pay Later', 'simply-schedule-appointments' ), + 'canceled' => __( 'No payment was processed. Please try again.', 'simply-schedule-appointments' ), + 'stripe' => + array ( + 'bookAndPayLabel' => __( 'Confirm and Pay', 'simply-schedule-appointments' ), + 'cancel' => __( 'Cancel', 'simply-schedule-appointments' ), + 'processing' => __( 'Processing your payment...', 'simply-schedule-appointments' ), + ), + 'paypal' => + array ( + 'bookAndPayLabel' => __( 'Confirm and Pay', 'simply-schedule-appointments' ), + ), + 'stripeLabel' => __( 'Book', 'simply-schedule-appointments' ), + 'paymentReceived' => __( 'Payment Received:', 'simply-schedule-appointments' ), + 'paymentFailed' => __( 'Unable to process payment. Please try again.', 'simply-schedule-appointments' ), + 'paypalDelayHeader' => __( 'Things are taking longer than expected', 'simply-schedule-appointments' ), + 'paypalDelayText' => __( 'PayPal is taking a little longer than usual to process your payment. Don\'t worry - we\'ll hold your appointment time for you. This usually resolves within a few minutes, or in rare cases, a few hours. Once your payment is processed, you\'ll receive an email confirmation of this appointment. If you don\'t receive that, please get in touch.', 'simply-schedule-appointments' ), + ), +); \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/readme.txt b/wp-content/plugins/simply-schedule-appointments/readme.txt new file mode 100644 index 0000000..7835de9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/readme.txt @@ -0,0 +1,309 @@ +=== Appointment Booking Calendar — Simply Schedule Appointments Booking Plugin === +Contributors: croixhaug, nataliemac, simplyscheduleappointments +Donate link: https://simplyscheduleappointments.com +Tags: booking system, appointments, booking, scheduling, appointment booking +Requires at least: 5.1 +Tested up to: 7.0 +Stable tag: 1.6.10.2 +Requires PHP: 7.4 +License: GPLv2 +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Unlimited appointments, booking calendars, and notifications. Powerful appointment booking plugin and booking system. Start scheduling for free today! + +== Description == + +**Simply Schedule Appointments® is an easy-to-use WordPress appointment booking plugin.** It's an automated appointment booking system loved by 70,000+ businesses, with a 5-star review average. + +The Simply Schedule Appointments booking calendars are easy and fast to set up. And enjoyable for your customers and clients to book and schedule appointments. **You can set up the appointment scheduling calendars to take your first booking in less than 5 minutes!** + +And, the best part is that our 5-star support team is here to help you each step of the way, either through our comprehensive and organized [Help Center](https://simplyscheduleappointments.com/help-center/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=help-center), here on the [WordPress Forums](https://wordpress.org/support/plugin/simply-schedule-appointments/#new-topic-0), or directly from the Simply Schedule Appointments [Support Tab](https://simplyscheduleappointments.com/guides/support-tools/) within the plugin. + += Booking System Features to Help You Schedule Business Meeting Appointments = + +Features included with the Simply Schedule Appointments Free Basic Edition for booking appointments: + +* [Unlimited Booking Calendars](https://simplyscheduleappointments.com/guides/appointment-type-settings/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=unlimited-booking-calendars) and [Customizable Notifications](https://simplyscheduleappointments.com/guides/email-notifications/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=customizable-notifications) +* Use [Advanced Scheduling Options](https://simplyscheduleappointments.com/guides/advanced-scheduling-options/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=advanced-scheduling-options) and [Blackout Dates](https://simplyscheduleappointments.com/guides/blackout-dates/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=blackout-dates) to highly tailor your schedule +* Embed the appointment booking calendars using the Block Editor, [Elementor widgets](https://simplyscheduleappointments.com/elementor-appointment-booking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=elementor), [Beaver Builder modules](https://simplyscheduleappointments.com/beaver-builder-appointment-scheduling/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=beaver-builder), and [Divi modules](https://simplyscheduleappointments.com/integrations/divi-booking-widgets/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=divi) +* [Style and Customize the Booking Calendars](https://simplyscheduleappointments.com/guides/custom-styles?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=custom-styles) to match your brand and website +* [Translation-ready](https://simplyscheduleappointments.com/guides/translating-simply-schedule-appointments/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=translating-ssa) - including Spanish, German, French, and more! +* Deeply connected with WordPress, including integrations for the [The Events Calendar](https://simplyscheduleappointments.com/guides/the-events-calendar-setup/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=the-events-calendar) plugin, [WP Fusion Automations](https://simplyscheduleappointments.com/guides/wp-fusion-automations/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=wp-fusion), and more! + +Features included with the Simply Schedule Appointments Paid Premium Editions for booking appointments: + +* [Group or class event booking](https://simplyscheduleappointments.com/guides/capacity-and-group-bookings/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=capacity-and-group-booking) - Book time slots up to a certain capacity +* [Booking Flows](https://simplyscheduleappointments.com/guides/booking-flows/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=booking-flows) - Choose from a selection of booking steps and layouts +* [Google Calendar Sync](https://simplyscheduleappointments.com/guides/syncing-google-calendar/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=google-calendar) - Allow your site's booking system to check your personal calendar for conflicts and customize those [calendar events](https://simplyscheduleappointments.com/guides/customize-calendar-events/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=customize-calendar-events) +* [Team booking](https://simplyscheduleappointments.com/guides/setup-team-booking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=team-booking) - Allow your staff to receive bookings and customize their own schedules +* [Resource booking](https://simplyscheduleappointments.com/guides/start-here-resource-booking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=resource-booking) - Schedule meeting rooms, rental items and things such as bikes or tables, or set max occupancies +* [Mailchimp](https://simplyscheduleappointments.com/integrations/mailchimp/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=mailchimp) - Automatically add users as new contacts to your audience from the booking form +* [Stripe](https://simplyscheduleappointments.com/guides/payments-setting-up-stripe/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=stripe) and [PayPal](https://simplyscheduleappointments.com/guides/paypal-payments/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=paypal) for [Payments](https://simplyscheduleappointments.com/guides/adding-payments-to-appointment-types/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=payments) - Instantly get paid for your time and expertise +* [Twilio for SMS](https://simplyscheduleappointments.com/guides/sms-notifications/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=sms-twilio) notifications and reminders +* [Gravity Forms](https://simplyscheduleappointments.com/integrations/gravity-forms/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=gravity-forms) and [Formidable Forms](https://simplyscheduleappointments.com/integrations/formidable-forms/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=formidable-forms) Integration - Create complex booking forms +* [Zoom](https://simplyscheduleappointments.com/guides/zoom/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=zoom) and [Google Meet](https://simplyscheduleappointments.com/guides/google-meet/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=google-meet) for virtual meetings +* [Google Analytics and Tag Manager tracking](https://simplyscheduleappointments.com/guides/conversion-tracking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=conversion-tracking) enabled to count booking form conversions +* [Trigger Webhooks](https://simplyscheduleappointments.com/guides/webhooks/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=webhooks) for appointment actions and connect to Zapier +* [ICS Subscription Feeds](https://simplyscheduleappointments.com/guides/ics-subscription-feed/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=ics-feed) - Sync your personal calendar applications to all incoming bookings. + +Simply Schedule Appointments is perfect if you want to let your customers schedule phone calls, in-person or virtual video meetings, or [coaching appointments](https://simplyscheduleappointments.com/scheduling-for-coaches/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=coaches). The perfect tool for business consultations, interviews, or scheduling services. + +You can tame and automate your schedule and easily manage when you're available for appointments. And block off dates when you don't want to be disturbed for bookings — no more phone calls or back-and-forth emails to find a meeting time that works. Simply let your [WordPress booking system](https://simplyscheduleappointments.com/wordpress-booking-plugin/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=wp-booking-plugin) take care of it! + +Easily limit how many daily appointments you schedule and set the minimum time between bookings. Automate your schedule while still maintaining control of your availability — manage your booking calendars, time slots, and appointments all in one place. + +Offer different types of appointment calendars for your services. For example, you could allow new clients to schedule on an introduction call calendar or let established customers schedule a longer time slot with a separate calendar. And, forget about double-bookings, Simply Schedule Appointments is capable of preventing unexpected scheduling problems! + +Are you looking to offer tutoring or remote teaching classes? Let your students quickly book times with you for lessons, reviews, or simple consultations. Localized time zones make meetings for distance learning and remote office hours a breeze to schedule. + +Simply Schedule Appointments contains all the data from your appointments and customers within your WordPress site. Own your data and be fully [GDPR-compliant](https://simplyscheduleappointments.com/guides/gdpr-and-privacy-faq/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=gdpr) and make it easier for your booking system to achieve [HIPAA compliance](https://simplyscheduleappointments.com/guides/hipaa-capable/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=hipaa). + +[Complete documentation to start booking appointments today is available on our website.](https://simplyscheduleappointments.com/help-center/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=help-center) + += Getting Started with the WordPress Booking Calendars is Easy = + +Use the built-in [Setup Wizard](https://simplyscheduleappointments.com/guides/after-the-setup-wizard/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=setup-wizard) to create your first [Appointment Type](https://simplyscheduleappointments.com/guides/appointment-type-settings/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=appointment-type) in under 5 minutes. Next, just embed the booking calendar on your site using our general booking shortcode `[ssa_booking]` or our native WordPress editor block: + +[youtube https://youtu.be/yUWQdQhfaJY] + += Who This Booking System is For = + +Simply Schedule Appointments is ideal for anyone who needs to automate and book appointments with clients and customers, including booking for: + +* **Client Meeting Booking** — Entrepreneurs, Web developers, Consultants, [Personal and Business Coaches](https://simplyscheduleappointments.com/scheduling-for-coaches/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=coaches), [Lawyers](https://simplyscheduleappointments.com/scheduling-for-lawyers/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=lawyers), Car Dealers, Real Estate, [Agencies](https://simplyscheduleappointments.com/demo-sites/scheduling-for-agencies-2/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=agencies) +* **Event Booking** — Wedding coordinators, Dress Shops, Boutiques, Workshop Teachers, Food Truck Lots +* **Class Lessons or Tutor Scheduling** — [Personal trainers](https://simplyscheduleappointments.com/scheduling-for-personal-trainers/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=personal-trainers), [Yoga studios](https://simplyscheduleappointments.com/scheduling-for-yoga-studios/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=yoga-studios), Exercise Studios, Language / ESL Tutors, Dance Studios, Fitness Professionals, Music Teacher, Instructors, Professors +* **Service Booking** — [Handyman Services](https://simplyscheduleappointments.com/scheduling-for-handyman-services/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=handyman), Contractors, [Hair Salons, Barbershops](https://simplyscheduleappointments.com/demo-sites/scheduling-for-hairstylist/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=hairstylist-barbers), Photographers, Tattoo Shops, [Notaries](https://simplyscheduleappointments.com/demo-sites/scheduling-for-mobile-notaries/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=notaries), Tax Preparations, Home Inspections +* **Visitor Booking** — Bakeries, Restaurants, Museums, Retirement Homes, Curbside Pickup +* **Patient Booking** — Nutritionists, Vaccination Appointments, Chiropractors, Physical Therapists, Pharmacy Prescription Pickups +* **Simple Reservations** — Equipment Rentals, Room Reservations, Table Reservations for Restaurants, Office Reservations + +Simply Schedule Appointments offers an excellent experience for your customers who need to book appointments. Our [WordPress booking plugin](https://simplyscheduleappointments.com/wordpress-booking-plugin/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=wp-booking-plugin) has just the features you need without all the extra bloat and needless settings found in other appointment booking plugins. And our UI is snappy, highly responsive, and a joy to use. + += Flexible, Fast, and Powerful Booking Calendars = + +Other appointment scheduling plugins are either too simple or too complicated. They lack the [basic features](https://simplyscheduleappointments.com/features/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=features) you need to start automating your schedule and booking appointments, or, if they do have those features, as you grow and add services, staff, and locations, they become complex and confusing to use for booking. + +[Simply Schedule Appointments](https://simplyscheduleappointments.com/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=ssa) is ready to grow with your business' booking needs — without all the confusion and clutter of settings that don't apply to you. It's also highly compatible with WordPress and can be added to any theme and page layout on your site. + +Simply Schedule Appointments offers [fully responsive booking calendars](https://simplyscheduleappointments.com/demos/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=demos) and works efficiently on any device – even touch screens. Our WordPress booking plugin will work dependably and reliably, whether you're managing your appointment availability from your tablet or your customer is booking an appointment from their smartphone. + += User-Friendly and Accessible Booking System = + +Our WordPress booking calendar system was designed with people in mind, first and foremost. So we're always thinking about how people will be using our appointment scheduling plugin, what they'll expect, and what booking features they'll want and need. + +This WordPress booking calendar system is built with you and your customer in mind and is accessible for everyone. We believe appointment scheduling should be as clear and straightforward as possible while maintaining the flexibility and booking features our customers need. + +We've made sure that everyone can use our appointment scheduling plugin, including people with auditory, visual, and physical disabilities. + +Everyone deserves access to everything the web offers, so we built our [WordPress booking calendar plugin with accessibility in mind](https://simplyscheduleappointments.com/accessibility-booking-plugin-wordpress/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=accessibility). As a result, you'll never have to worry that a customer will find themselves unable to schedule an appointment because of their abilities or the device they're using. + += Deep Integrations With All the Tools and WordPress Plugins You Love = + +Integrations included with the Simply Schedule Appointments Free Basic Edition for booking appointments: + +* [Logged in WordPress users](https://simplyscheduleappointments.com/guides/wordpress-users/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=wp-users) can see their appointments and benefit from auto-filling Name and Email fields. +* [Elementor widgets](https://simplyscheduleappointments.com/elementor-appointment-booking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=elementor) +* [Beaver Builder modules](https://simplyscheduleappointments.com/beaver-builder-appointment-scheduling/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=beaver-builder) +* [Divi modules](https://simplyscheduleappointments.com/integrations/divi-booking-widgets/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=divi) +* [WP Fusion Automation](https://simplyscheduleappointments.com/guides/wp-fusion-automations/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=wp-fusion) +* [The Events Calendar](https://simplyscheduleappointments.com/guides/the-events-calendar-setup/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=the-events-calendar) + +Integrations included with the Simply Schedule Appointments Paid Premium Editions for booking appointments: + +* [Google Calendar](https://simplyscheduleappointments.com/guides/syncing-google-calendar/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=google-calendar) +* [Mailchimp](https://simplyscheduleappointments.com/integrations/mailchimp/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=mailchimp) +* [Stripe](https://simplyscheduleappointments.com/guides/payments-setting-up-stripe/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=stripe) and [PayPal](https://simplyscheduleappointments.com/guides/paypal-payments/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=paypal) for [Payments](https://simplyscheduleappointments.com/guides/adding-payments-to-appointment-types/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=payments) +* [Webhooks](https://simplyscheduleappointments.com/guides/webhooks/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=webhooks) for [Zapier](https://simplyscheduleappointments.com/guides/zapier-integration-webhooks/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=zapier) and [Make](https://simplyscheduleappointments.com/guides/make-integration-webhooks/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=make) +* [Twilio for SMS](https://simplyscheduleappointments.com/guides/sms-notifications/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=sms-twilio) notifications +* [Gravity Forms](https://simplyscheduleappointments.com/guides/gravity-forms-appointment-field/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=gravity-forms) +* [Gravity Wiz Perks](https://simplyscheduleappointments.com/guides/gravity-wiz-magical-perks/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=gravity-wiz) +* [Formidable Forms](https://simplyscheduleappointments.com/guides/formidable-forms-appointment-field/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=formidable-forms) +* [Google Analytics and Google Tag Manager](https://simplyscheduleappointments.com/guides/conversion-tracking/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=conversion-tracking) +* [Zoom](https://simplyscheduleappointments.com/guides/zoom/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=zoom) and [Google Meet](https://simplyscheduleappointments.com/guides/google-meet/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=google-meet) for [virtual meetings](https://simplyscheduleappointments.com/guides/web-meetings/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=web-meetings) +* [The Events Calendar](https://simplyscheduleappointments.com/guides/the-events-calendar-setup/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=the-events-calendar) +* [Project Panorama](https://simplyscheduleappointments.com/guides/project-panorama-integration/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=project-panorama) +* [LifterLMS](https://simplyscheduleappointments.com/lifterlms-integration/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=lifterlms) +* [Webex](https://simplyscheduleappointments.com/guides/webex/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=webex) +* [Facebook pixel](https://simplyscheduleappointments.com/guides/facebook-pixel/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=fb-pixel) + += Useful Links to Help You Start Booking Appointments Today = + +* [Help Center for Troubleshooting and Setup Guides](https://simplyscheduleappointments.com/help-center/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=help-center) +* [Free Basic Edition Setup Guide](https://simplyscheduleappointments.com/guides/basic-edition-guide/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=basic-edition-guide) +* [Booking Demos to Try Before Installation](https://simplyscheduleappointments.com/demos/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=demos) +* [How to Display the Booking Calendars on a WordPress Page or Post](https://simplyscheduleappointments.com/guides/display-the-booking-calendar/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=display-guide) +* [Admin Dashboard Walkthrough Guide](https://simplyscheduleappointments.com/guides/admin-appointments-page-walkthrough/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=admin-walkthrough) +* [Full Appointment Type Settings Guide](https://simplyscheduleappointments.com/guides/appointment-type-settings/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=appointment-type-guide) + +== Installation == + +1. Upload the plugin files to the `/wp-content/plugins/plugin-name` directory, or install the plugin through the WordPress plugins screen directly. +1. Activate the plugin through the 'Plugins' screen in WordPress +1. Select the Appointments option in the WordPress Dashboard menu to set up and configure the plugin. + += Manual Installation = + +1. Upload the entire `/simply-schedule-appointments` directory to the `/wp-content/plugins/` directory. +1. Activate Simply Schedule Appointments through the 'Plugins' menu in WordPress. + += After Installing = + +1. You'll see a new item on the left-hand menu called 'Appointments'. Click that to get started. +1. Our start-up wizard will walk you through the basic settings and setting up your first appointment type. +1. You may use the `[ssa_booking]` shortcode on any post or page to add an appointment booking form for your customers. + +For more details, please see our [detailed documentation](https://simplyscheduleappointments.com/help-center/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=help-center). + +== Frequently Asked Questions == + += How do I show the booking form? = + +To embed the Simply Schedule Appointments booking calendars on your WordPress pages or posts you can use a shortcode or a page builder module (ex. Elementor Appointment Booking module). You can paste the booking shortcode below using a text box to display all of your appointment types: + +`[ssa_booking]` + +[Guide on all the ways you can display the Appointment Type Booking Calendars on your site.](https://simplyscheduleappointments.com/guides/display-the-booking-calendar/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=display-guide) + += Where can I read the documentation? = + +The full documentation is available at [our website](https://simplyscheduleappointments.com/help-center/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=help-center). +Or, get started with our [free Basic Edition guide](https://simplyscheduleappointments.com/guides/basic-edition-guide/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=basic-edition-guide). + += Will I end up being double-booked? = + +Nope. Once a customer has booked an appointment time, that time is no longer available for booking. So you'll never find yourself double-booked. + +Additionally, we do some extra checks while a customer is booking an appointment just to be sure their selected time is still available. If someone else books their selected time while they're in the process of booking, we'll let them know and ask them to select another time. + +We also offer [Google Calendar syncing in our Plus, Pro, or Business Edition](https://simplyscheduleappointments.com/guides/syncing-google-calendar/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=google-calendar) to make sure you never double-book appointments with your personal schedule. + += Can I customize the appearance of the booking form? = + +Yes, you can. We offer settings for color and font that will let you customize the form to blend seamlessly into any theme. + +[You can additionally add custom CSS to customize the form even further](https://simplyscheduleappointments.com/guides/helpful-customization-guides/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=css-customize). + += Are there limitations on the number of booking calendars or appointments I can make? = + +No! The free Basic Edition of Simply Schedule Appointments allows you to create an unlimited number of Appointment Types so that you can create a booking calendar for each of your business' services. + +And the booking plugin will never limit the number of appointments that you can book. + += Can I test the Simply Schedule Appointments booking calendars before installation? = + +Yes, we have a [variety of booking demos](https://simplyscheduleappointments.com/demos/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=demos) where you can book test appointments. + += How can I upgrade to the Simply Schedule Appointments Plus, Professional, and Business Editions? = + +The Plus, Professional, and Business Editions are paid versions of the Simply Schedule Appointments booking plugin. [Purchase and download the Premium Booking Editions.](https://simplyscheduleappointments.com/pricing/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=pricing) + += I have a question or need help with the plugin, how do I contact your support team? = + +To contact our support team, submit your message through our [WordPress support forum](https://wordpress.org/support/plugin/simply-schedule-appointments/#new-topic-0). Or, send us a message through the `Contact support team` button within the plugin. Lastly, you can also submit your message through our website's [Contact page](https://simplyscheduleappointments.com/contact/). + +[vimeo https://vimeo.com/827031203] + += How does Simply Schedule Appointments compare to Calendly? = + +We bring all of the great features that people are familiar with in the Calendly scheduling tool. But with the versatility and freedom that WordPress offers. + +Compared to Calendly, customers who use Simply Schedule Appointments find that this plugin offers: +* A better range of styling options to match your website +* More ways to mesh the booking calendars into the website workflow through integrations, for example Gravity Forms and MemberPress. +* And, the package tiers are much less complicated — we don't charge by number of team members or number of calendars, it's all unlimited! + += I'm not a developer, can I still set this up? = + +Yes of course! The majority of our customers are not developers — setup is really as simple as: +1. Activating the plugin on the site +2. Going through our setup wizard to create your first booking calendar +3. Embedding the calendar on any page or post of your choosing + +See our guide on [how to get started](https://simplyscheduleappointments.com/guides/after-the-setup-wizard/?utm_source=website&utm_medium=promo-link&utm_campaign=wordpress-org&utm_content=after-the-setup-wizard). + +== Screenshots == + +1. The Appointments Dashboard When You First Open the Plugin - Initialize the Setup Wizard. +2. Appointment Types Page - Manage Your Booking Calendars. +3. Appointments Page - View Your Upcoming Bookings. +4. Settings Page - Manage Notifications, Translations, Blackout Dates, Styles, and More! +5. Support Page - View Plugin Diagnostics and Easily Get in Touch With Our Support Team. +6. Display the Booking Calendars on your WordPress page or post. +7. View the Booking Calendar Availability using a Weekly View. +8. View the Booking Calendar Availability using a Monthly View. +9. Schedule an Appointment using the built-in Booking Form. +10. Final Confirmation on the Booking Form. + +=== Changelog === + +== 1.6.10.2 - 2026-03-11 == + += Fixes = + +- Improve lifetime license status message in admin support +- PHP 8.3 Compatibility Fixes +- Switch fetch wp users to be a post request +- Ics subscribe to calendar request improvements + +== 1.6.10.0 - 2026-03-05 == + += Fixes = + +- Vulnerability - Insecure Direct Object Reference to Authenticated (Staff+) Sensitive Information Exposure +- Add Authorization to Settings REST API Endpoint +- Unauthenticated SQL Injection in Simply Schedule Appointments Plugin + +== 1.6.9.29 - 2026-02-24 == + += Fixes = + +- Fixed admin app displaying incomplete number of grouped appointments +- Vulnerability - Unauthenticated SQL Injection via 'append_where_sql' Parameter + +== 1.6.9.27 - 2026-02-10 == + += Fixes = + +- Implement permission checks for Memberpress API endpoints + +== 1.6.9.25 - 2026-02-03 == + += Fixes = + +- Ticket: Issue with inserting links over text in the calendar events template + +== 1.6.9.21 - 2026-01-06 == + += Features and Improvements = + +- Divi five integration + +== 1.6.9.19 - 2025-12-23 == + += Fixes = + +- Ticket: SA number series (75) not getting accepted within the Phone field + += Features and Improvements = + +- Feature request: Add 'today' class on the current day for easier custom styling + +== 1.6.9.17 - 2025-12-09 == + += Fixes = + +- Fix RTL support for tel phone field +- Fix auto-scroll to phone field on form validation +- Block logged out users from loading admin app single-page-app + +== 1.6.9.15 - 2025-12-02 == + += Fixes = + +- Track SSA versions and update time stamp + +== 1.6.9.13 - 2025-11-26 == + + +For older changelog entries, please see the [additional CHANGELOG.md file](https://plugins.svn.wordpress.org/simply-schedule-appointments/trunk/CHANGELOG.md) delivered with the plugin. diff --git a/wp-content/plugins/simply-schedule-appointments/simply-schedule-appointments.php b/wp-content/plugins/simply-schedule-appointments/simply-schedule-appointments.php new file mode 100644 index 0000000..b99dc84 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/simply-schedule-appointments.php @@ -0,0 +1,937 @@ +<?php +/** + * Plugin Name: Simply Schedule Appointments + * Plugin URI: https://simplyscheduleappointments.com + * Description: Easy appointment scheduling + * Version: 1.6.10.2 + * Requires PHP: 7.4 + * Author: NSquared + * Author URI: https://nsquared.io/ + * Donate link: https://simplyscheduleappointments.com + * License: GPLv2 + * Text Domain: simply-schedule-appointments + * Domain Path: /languages + * + * @link https://simplyscheduleappointments.com + * + * @package Simply_Schedule_Appointments + * @version 1.6.10.2 + * + * Built using generator-plugin-wp (https://github.com/WebDevStudios/generator-plugin-wp) + */ + + +/** + * Copyright (c) 2017 N Squared (email : support@simplyscheduleappointments.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 or, at + * your discretion, any later version, as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +/** + * Autoloads files with classes when needed. + * + * @since 0.0.0 + * @param string $class_name Name of the class being requested. + */ +if ( ! function_exists( 'ssa_autoload_classes' ) ) { + function ssa_autoload_classes( $class_name ) { + + // If our class doesn't have our prefix, don't load it. + if ( 0 !== strpos( $class_name, 'SSA_' ) ) { + return; + } + + // Set up our filename. + $filename = strtolower( str_replace( '_', '-', substr( $class_name, strlen( 'SSA_' ) ) ) ); + + // Include our file. + Simply_Schedule_Appointments::include_file( 'includes/class-' . $filename ); + } +} + +spl_autoload_register( 'ssa_autoload_classes' ); +if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { + if ( version_compare( phpversion(), '7.0', '>=' ) ) { + include_once __DIR__ . '/vendor/autoload.php'; + } + }; + +define( 'SSA_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); + +/** + * Main initiation class. + * + * @since 0.0.0 + */ +final class Simply_Schedule_Appointments { + + // declare class properties, avoid dynamic properties and their warnings + public $action_scheduler; + public $advanced_scheduling_availability; + public $advanced_scheduling_settings; + public $appointment_meta_model; + public $appointment_model; + public $appointment_type_label_model; + public $appointment_type_model; + public $async_action_model; + public $availability_cache_invalidation; + public $availability_cache; + public $availability_default; + public $availability_external_model; + public $availability_functions; + public $availability_model; + public $beaver_builder; + public $blackout_dates_settings; + public $blackout_dates; + public $block_booking; + public $block_upcoming_appointments; + public $bootstrap; + public $cache; + public $calendar_events_settings; + public $capabilities; + public $capacity_settings; + public $capacity; + public $csv_exporter; + public $customer_information; + public $customers; + public $dashboard_upcoming_appointments_widget; + public $developer_settings; + public $divi; + public $elementor; + public $error_notices; + public $filesystem; + public $formidable; + public $forms; + public $gcal_exporter; + public $google_calendar_admin; + public $google_calendar_api; + public $embed_booking_app_api; + public $google_calendar_client; + public $google_calendar_settings; + public $google_calendar; + public $gravityforms; + public $health_check; + public $hooks; + public $license_api; + public $license_settings; + public $license; + public $mailchimp_api; + public $mailchimp_settings; + public $mailchimp; + public $missing; + public $notices_api; + public $notices; + public $notification_model; + public $notifications_api; + public $notifications_settings; + public $notifications; + public $offline_payments_settings; + public $offline_payments; + public $payment_model; + public $payments_settings; + public $payments; + public $paypal_settings; + public $paypal; + public $reminders; + public $resource_appointment_model; + public $resource_group_appointment_type_model; + public $resource_group_model; + public $resource_group_resource_model; + public $resource_model; + public $resources_settings; + public $resources; + public $revision_meta_model; + public $revision_model; + public $scheduling_max_per_day; + public $settings_api; + public $settings_global; + public $settings_installed; + public $settings; + public $shortcodes; + public $sms_api; + public $sms_settings; + public $sms; + public $staff_appointment_model; + public $staff_appointment_type_model; + public $staff_availability; + public $staff_model; + public $staff_settings; + public $staff; + public $stripe_settings; + public $stripe; + public $styles_settings; + public $styles; + public $support_status_api; + public $support_status; + public $support; + public $templates_api; + public $templates; + public $tracking_settings; + public $tracking; + public $translation_settings; + public $translation; + public $upgrade; + public $users; + public $utils; + public $validation; + public $web_meetings; + public $webex_settings; + public $webex; + public $webhooks_settings; + public $webhooks; + public $woocommerce_settings; + public $woocommerce; + public $wp_admin; + public $zoom_settings; + public $zoom; + public $memberpress; + public $memberpress_api; + + /** + * Current version. + * + * @var string + * @since 0.0.0 + */ + const VERSION = '1.6.10.2'; + + /** + * URL of plugin directory. + * + * @var string + * @since 0.0.0 + */ + protected $url = ''; + + /** + * Path of plugin directory. + * + * @var string + * @since 0.0.0 + */ + protected $path = ''; + + /** + * Plugin basename. + * + * @var string + * @since 0.0.0 + */ + protected $basename = ''; + + /** + * Detailed activation error messages. + * + * @var array + * @since 0.0.0 + */ + protected $activation_errors = array(); + + /** + * Singleton instance of plugin. + * + * @var Simply_Schedule_Appointments + * @since 0.0.0 + */ + protected static $single_instance = null; + + /** + * Instance of SSA_Debug + * + * @since4.0.1 + * @var SSA_Debug + */ + protected $debug; + + /** + * Creates or returns an instance of this class. + * + * @since 0.0.0 + * @return Simply_Schedule_Appointments A single instance of this class. + */ + public static function get_instance() { + if ( null === self::$single_instance ) { + self::$single_instance = new self(); + } + + return self::$single_instance; + } + + /** + * Sets up our plugin. + * + * @since 0.0.0 + */ + protected function __construct() { + $this->basename = plugin_basename( __FILE__ ); + $this->url = plugin_dir_url( __FILE__ ); + $this->path = plugin_dir_path( __FILE__ ); + + require $this->dir( 'includes/lib/td-health-check/health-check.php' ); + $this->health_check = new TD_Health_Check(); + require_once __DIR__ . '/vendor/woocommerce/action-scheduler/action-scheduler.php'; + + if ( ! defined( 'WP_SENTRY_VERSION' ) ) { + define( 'WP_SENTRY_VERSION', 'v' . self::VERSION ); + } + } + + /** + * Attach other plugin classes to the base plugin class. + * + * @since 0.0.0 + */ + public function plugin_classes() { + $classes = array( + 'settings' => 'SSA_Settings', + 'bootstrap' => 'SSA_Bootstrap', + 'missing' => 'SSA_Missing', + 'upgrade' => 'SSA_Upgrade', + 'utils' => 'SSA_Utils', + 'validation' => 'SSA_Validation', + 'capabilities' => 'SSA_Capabilities', + 'hooks' => 'SSA_Hooks', + + 'resources' => 'SSA_Resources', + 'resources_settings' => 'SSA_Resources_Settings', + 'resource_model' => 'SSA_Resource_Model', + 'resource_group_model' => 'SSA_Resource_Group_Model', + 'resource_appointment_model' => 'SSA_Resource_Appointment_Model', + 'resource_group_appointment_type_model' => 'SSA_Resource_Group_Appointment_Type_Model', + 'resource_group_resource_model' => 'SSA_Resource_Group_Resource_Model', + 'revision_model' => 'SSA_Revision_Model', + 'revision_meta_model' => 'SSA_Revision_Meta_Model', + 'appointment_model' => 'SSA_Appointment_Model', + 'appointment_meta_model' => 'SSA_Appointment_Meta_Model', + 'appointment_type_model' => 'SSA_Appointment_Type_Model', + 'availability_model' => 'SSA_Availability_Model', + 'appointment_type_label_model' => 'SSA_Appointment_Type_Label_Model', + 'availability_external_model' => 'SSA_Availability_External_Model', + 'availability_functions' => 'SSA_Availability_Functions', + 'availability_default' => 'SSA_Availability_Default', + 'availability_cache' => 'SSA_Availability_Cache', + 'availability_cache_invalidation' => 'SSA_Availability_Cache_Invalidation', + + 'capacity_settings' => 'SSA_Capacity_Settings', + 'capacity' => 'SSA_Capacity', + 'cache' => 'SSA_Cache', + + 'debug' => 'SSA_Debug', + + 'customers' => 'SSA_Customers', + 'customer_information' => 'SSA_Customer_Information', + + 'scheduling_max_per_day' => 'SSA_Scheduling_Max_Per_Day', + + 'settings_installed' => 'SSA_Settings_Installed', + 'settings_global' => 'SSA_Settings_Global', + + 'gcal_exporter' => 'SSA_Gcal_Exporter', + 'notifications' => 'SSA_Notifications', + 'notifications_settings' => 'SSA_Notifications_Settings', + 'notification_model' => 'SSA_Notification_Model', + 'notices' => 'SSA_Notices', + 'error_notices' => 'SSA_Error_Notices', + 'csv_exporter' => 'SSA_CSV_Exporter', + + 'calendar_events_settings' => 'SSA_Calendar_Events_Settings', + + 'async_action_model' => 'SSA_Async_Action_Model', + + /* Features */ + 'developer_settings' => 'SSA_Developer_Settings', + + 'license_settings' => 'SSA_License_Settings', + 'license' => 'SSA_License', + + 'advanced_scheduling_settings' => 'SSA_Advanced_Scheduling_Settings', + 'advanced_scheduling_availability' => 'SSA_Advanced_Scheduling_Availability', + + 'blackout_dates_settings' => 'SSA_Blackout_Dates_Settings', + 'blackout_dates' => 'SSA_Blackout_Dates', + + 'elementor' => 'SSA_Elementor', + 'beaver_builder' => 'SSA_Beaver_Builder', + 'divi' => 'SSA_Divi', + 'forms' => 'SSA_Forms', + 'formidable' => 'SSA_Formidable', + + 'staff_settings' => 'SSA_Staff_Settings', + 'staff' => 'SSA_Staff', + + 'staff_model' => 'SSA_Staff_Model', + 'staff_appointment_model' => 'SSA_Staff_Appointment_Model', + 'staff_appointment_type_model' => 'SSA_Staff_Appointment_Type_Model', + 'staff_availability' => 'SSA_Staff_Availability', + + 'google_calendar_settings' => 'SSA_Google_Calendar_Settings', + 'google_calendar' => 'SSA_Google_Calendar', + 'google_calendar_client' => 'SSA_Google_Calendar_Client', + 'google_calendar_admin' => 'SSA_Google_Calendar_Admin', + + 'gravityforms' => 'SSA_Gravityforms', + + 'payment_model' => 'SSA_Payment_Model', + + 'mailchimp_settings' => 'SSA_Mailchimp_Settings', + 'mailchimp' => 'SSA_Mailchimp', + + 'offline_payments_settings' => 'SSA_Offline_Payments_Settings', + 'offline_payments' => 'SSA_Offline_Payments', + + 'payments_settings' => 'SSA_Payments_Settings', + 'payments' => 'SSA_Payments', + + 'paypal_settings' => 'SSA_Paypal_Settings', + 'paypal' => 'SSA_Paypal', + + 'reminders' => 'SSA_Reminders', + + 'sms' => 'SSA_Sms', + 'sms_settings' => 'SSA_Sms_Settings', + + 'stripe_settings' => 'SSA_Stripe_Settings', + 'stripe' => 'SSA_Stripe', + + 'styles_settings' => 'SSA_Styles_Settings', + 'styles' => 'SSA_Styles', + + 'support' => 'SSA_Support', + 'support_status' => 'SSA_Support_Status', + + 'templates' => 'SSA_Templates', + + 'tracking_settings' => 'SSA_Tracking_Settings', + 'tracking' => 'SSA_Tracking', + + 'translation' => 'SSA_Translation', + 'translation_settings' => 'SSA_Translation_Settings', + + 'users' => 'SSA_Users', + + 'webhooks_settings' => 'SSA_Webhooks_Settings', + 'webhooks' => 'SSA_Webhooks', + + 'web_meetings' => 'SSA_Web_Meetings', + + 'woocommerce_settings' => 'SSA_Woocommerce_Settings', + 'woocommerce' => 'SSA_Woocommerce', + + 'webex' => 'SSA_Webex', + 'webex_settings' => 'SSA_Webex_Settings', + + 'zoom_settings' => 'SSA_Zoom_Settings', + 'zoom' => 'SSA_Zoom', + + 'memberpress' => 'SSA_Memberpress', + + 'shortcodes' => 'SSA_Shortcodes', + 'block_booking' => 'SSA_Block_Booking', + 'block_upcoming_appointments' => 'SSA_Block_Upcoming_Appointments', + 'filesystem' => 'SSA_Filesystem', + 'wp_admin' => 'SSA_Wp_Admin', + 'action_scheduler' => 'SSA_Action_Scheduler', + 'dashboard_upcoming_appointments_widget' => 'SSA_Dashboard_Upcoming_Appointments_Widget', + + // NO API CLASSES SHOULD BE HERE (should be defined in rest_api_init hook) + ); + + include __DIR__ . '/includes/class-exception.php'; + + foreach ( $classes as $variable_name => $class_name ) { + if ( class_exists( $class_name ) ) { + $this->$variable_name = new $class_name( $this ); + } else { + $this->$variable_name = $this->missing; + } + } + } // END OF PLUGIN CLASSES FUNCTION + + /** + * Attach other plugin classes to the base plugin class. + * + * @since 0.0.2 + */ + public function rest_api_init() { + $classes = array( + 'settings_api' => 'SSA_Settings_Api', + 'notices_api' => 'SSA_Notices_Api', + 'license_api' => 'SSA_License_Api', + 'templates_api' => 'SSA_Templates_Api', + + 'google_calendar_api' => 'SSA_Google_Calendar_Api', + 'notifications_api' => 'SSA_Notifications_Api', + 'mailchimp_api' => 'SSA_Mailchimp_Api', + 'sms_api' => 'SSA_Sms_Api', + 'support_status_api' => 'SSA_Support_Status_Api', + 'memberpress_api' => 'SSA_Memberpress_Api', + 'embed_booking_app_api'=> 'SSA_Embed_Booking_App_Api', + ); + + foreach ( $classes as $variable_name => $class_name ) { + if ( class_exists( $class_name ) ) { + $this->$variable_name = new $class_name( $this ); + } else { + $this->$variable_name = $this->missing; + } + } + } + + /** + * data-cfasync is an HTML attribute used to indicate to Cloudflare's Rocket Loader + * whether or not to load a particular script asynchronously + */ + public function rocket_loader_filter( $tag, $handle, $src ) { + if( 'ssa-iframe-outer' === $handle || 'ssa-form-embed' === $handle ){ + return str_replace( '<script', '<script data-cfasync="false"', $tag ); + } + // keep other scripts untouched + return $tag; + } + + /** + * Add hooks and filters. + * Priority needs to be + * < 10 for CPT_Core, + * < 5 for Taxonomy_Core, + * and 0 for Widgets because widgets_init runs at init priority 1. + * + * @since 0.0.0 + */ + public function hooks() { + if ( ! function_exists( 'ray' ) ) { + function ray() { + // we need this empty function in case a ray() call mistakenly makes it into a production release + } + } + $this->plugins_loaded(); + add_action( 'init', array( $this, 'init' ), 0 ); + // Avoid Cloudflare's Rocket Loader lazy load the editor iframe + add_filter( 'script_loader_tag', array( $this, 'rocket_loader_filter' ), 10, 3 ); + add_action( 'rest_api_init', array( $this, 'rest_api_init' ), 0 ); + } + /** + * Activate the plugin. + * + * @since 0.0.0 + */ + public function _activate() { + // Bail early if requirements aren't met. + if ( ! $this->check_requirements() ) { + return; + } + + // Make sure any rewrite functionality has been loaded. + flush_rewrite_rules(); + } + + /** + * Deactivate the plugin. + * Uninstall routines should be in uninstall.php. + * + * @since 0.0.0 + */ + public function _deactivate() { + // Add deactivation cleanup functionality here. + } + + public static function _uninstall(){ + global $wpdb; + $table_prefix = $wpdb->prefix; + // Get Developer Settings + $wpdb->query("SELECT option_value FROM $wpdb->options WHERE option_name = 'ssa_settings_json'"); + $settings = json_decode($wpdb->last_result[0]->option_value); + + if ( ! empty( $settings->developer->remove_data_on_uninstall) ) { + // Finds and delete all rows from the wp_options table that contains "ssa_" in the option_name column. + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'ssa\_%' OR option_name LIKE 'wp_ssa\_%' OR option_name LIKE '{$table_prefix}ssa\_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery + + // Truncate all ssa database tables. + $wpdb->query("DROP TABLE {$table_prefix}ssa_appointments"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_appointment_meta"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_appointment_types"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_availability"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_availability_external"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_async_actions"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_payments"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_staff"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_staff_appointments"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_staff_appointment_types"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_appointment_type_labels"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_revisions"); + $wpdb->query("DROP TABLE {$table_prefix}ssa_revision_meta"); + } + } + + public function plugins_loaded() { + // Bail early if requirements aren't met. + if ( ! $this->check_requirements() ) { + return; + } + + require $this->dir( 'includes/lib/td-util/td-util-init.php' ); + + // Initialize plugin classes. + $this->plugin_classes(); + + do_action( 'ssa_loaded' ); + } + + /** + * Init hooks + * + * @since 0.0.0 + */ + public function init() { + // Load translated strings for plugin. + load_plugin_textdomain( 'simply-schedule-appointments', false, dirname( $this->basename ) . '/languages/' ); + } + + /** + * Check if the plugin meets requirements and + * disable it if they are not present. + * + * @since 0.0.0 + * + * @return boolean True if requirements met, false if not. + */ + public function check_requirements() { + + // Bail early if plugin meets requirements. + if ( $this->meets_requirements() ) { + return true; + } + + // Add a dashboard notice. + add_action( 'all_admin_notices', array( $this, 'requirements_not_met_notice' ) ); + + // Deactivate our plugin. + add_action( 'admin_init', array( $this, 'deactivate_me' ) ); + + // Didn't meet the requirements. + return false; + } + + /** + * Deactivates this plugin, hook this function on admin_init. + * + * @since 0.0.0 + */ + public function deactivate_me() { + + // We do a check for deactivate_plugins before calling it, to protect + // any developers from accidentally calling it too early and breaking things. + if ( function_exists( 'deactivate_plugins' ) ) { + deactivate_plugins( $this->basename ); + } + } + + /** + * Check that all plugin requirements are met. + * + * @since 0.0.0 + * + * @return boolean True if requirements are met. + */ + public function meets_requirements() { + if ( version_compare( phpversion(), '7.4', '<' ) ) { + $this->activation_errors[] = 'Simply Schedule Appointments requires <strong>PHP version 7.4 or higher</strong>. Most WordPress hosts are supporting PHP 7, so your web host should easily be able to update you to PHP 7.4 or higher if you contact them. <br />A higher PHP version is safer, faster, and best of all lets you use Simply Schedule Appointments :) <br /><a href="https://simplyscheduleappointments.com/">Learn More</a>'; + return false; + } + + if ( ! class_exists( '\League\Period\Period' ) ) { + $this->activation_errors[] = 'Core library <code>Period</code> missing, please <a href="mailto:support@simplyscheduleappointments.com">contact support</a>'; + } + + if ( ! empty( $this->activation_errors ) ) { + return false; + } + + // Handle edge case - with no permalinks set, all WP REST API calls will fail + global $wp_rewrite; + if ( ! empty( $wp_rewrite ) && empty( $wp_rewrite->permalink_structure ) ) { + $wp_rewrite->set_permalink_structure( '/%postname%/' ); + update_option( 'rewrite_rules', false ); + $wp_rewrite->flush_rules( true ); + } + + // Do checks for required classes / functions or similar. + // Add detailed messages to $this->activation_errors array. + return true; + } + + /** + * Adds a notice to the dashboard if the plugin requirements are not met. + * + * @since 0.0.0 + */ + public function requirements_not_met_notice() { + + // Compile default message. + $default_message = sprintf( __( 'Simply Schedule Appointments detected that your system does not meet the minimum requirements. We\'ve <a href="%s">deactivated</a> Simply Schedule Appointments to make sure nothing breaks.', 'simply-schedule-appointments' ), admin_url( 'plugins.php' ) ); + + // Default details to null. + $details = null; + + // Add details if any exist. + if ( $this->activation_errors && is_array( $this->activation_errors ) ) { + $details = '<h4>' . implode( '</h4><br /><h4>', $this->activation_errors ) . '</h4>'; + } + + // Output errors. + ?> + <div id="message" class="error"> + <h3><?php echo wp_kses_post( $default_message ); ?></h3> + <?php echo wp_kses_post( $details ); ?> + </div> + <?php + } + + /** + * Magic getter for our object. + * + * @since 0.0.0 + * + * @param string $field Field to get. + * @throws Exception Throws an exception if the field is invalid. + * @return mixed Value of the field. + */ + public function __get( $field ) { + switch ( $field ) { + case 'version': + return self::VERSION; + case 'basename': + case 'url': + case 'path': + case 'mailchimp': + case 'mailchimp_settings': + case 'memberpress': + case 'memberpress_api': + case 'mailchimp_api': + case 'appointments': + case 'appointments_api': + case 'appointments_db': + case 'db': + case 'appointment_types_db': + case 'settings': + case 'settings_api': + case 'settings_global': + case 'settings_installed': + case 'validation': + case 'bootstrap': + case 'capabilities': + case 'utils': + case 'db_model': + case 'revision_model': + case 'revision_meta_model': + case 'appointment_model': + case 'appointment_meta_model': + case 'appointment_type_model': + case 'appointment_type_label_model': + case 'wp_admin': + case 'availability_model': + case 'availability_external_model': + case 'availability_functions': + case 'availability_default': + case 'availability_cache': + case 'scheduling_max_per_day': + case 'ics_exporter': + case 'csv_exporter': + case 'block_booking': + case 'shortcodes': + case 'appointment_object': + case 'filesystem': + case 'upgrade': + case 'gcal_exporter': + case 'block_upcoming_appointments': + case 'dashboard_upcoming_appointments_widget': + case 'notifications': + case 'notifications_api': + case 'notifications_settings': + case 'license': + case 'license_api': + case 'async_action_model': + case 'advanced_scheduling_settings': + case 'advanced_scheduling_availability': + case 'blackout_dates': + case 'blackout_dates_settings': + case 'capacity_settings': + case 'capacity': + case 'cache': + case 'customer_information': + case 'customers': + case 'debug': + case 'missing': + if ( property_exists( $this, $field ) && ! is_null( $this->$field ) ) { + return $this->$field; + } else { + return $this->missing; + } + default: + return $this->missing; + } + } + + /** + * Include a file from the includes directory. + * + * @since 0.0.0 + * + * @param string $filename Name of the file to be included. + * @return boolean Result of include call. + */ + public static function include_file( $filename ) { + $file = self::dir( $filename . '.php' ); + if ( file_exists( $file ) ) { + return include_once $file; + } + return false; + } + + /** + * This plugin's directory. + * + * @since 0.0.0 + * + * @param string $path (optional) appended path. + * @return string Directory and path. + */ + public static function dir( $path = '' ) { + static $dir; + $dir = $dir ? $dir : trailingslashit( dirname( __FILE__ ) ); + return $dir . $path; + } + + /** + * This plugin's template subdirectory. + * + * @since 0.0.0 + * + * @param string $path (optional) appended path. + * @return string Directory and path. + */ + public static function template_subdirectory() { + return apply_filters( 'ssa_template_subdirectory', 'ssa/' ); + } + + /** + * This plugin's url. + * + * @since 0.0.0 + * + * @param string $path (optional) appended path. + * @return string URL and path. + */ + public static function url( $path = '' ) { + static $url; + $url = $url ? $url : trailingslashit( plugin_dir_url( __FILE__ ) ); + return $url . $path; + } + + /** + * This plugin's version. + * + * @since 4.4.9 + * + * @return string + */ + public function get_current_version() { + return $this->__get( 'version' ); + } + + /** + * The current user's edition. + * + * @since 6.0.4 + * + * @return integer + */ + public function get_current_edition() { + $current_edition = substr( $this->get_current_version(), 0, 1 ); + + // Handle case when there is no prefix added yet, assume it's development environment + $editions = array_keys( $this->ssa_editions() ); + if ( ! in_array( $current_edition, $editions ) ) { + $current_edition = max( $editions ); + } + return (int) $current_edition; + } + + private function ssa_editions () { + return array( + '1' => 'Basic', + '2' => 'Plus', + '3' => 'Pro', + '4' => 'Business', + ); + } + + /** + * The current ssa edition; Business, Pro, Plus, Basic + * + * @return string + */ + public function get_current_edition_str() { + $editions = $this->ssa_editions(); + $curr_edition = $this->get_current_edition(); + return $editions[ strval( $curr_edition ) ]; + } + + /** + * Update current plugin's version on the database. + * + * @since 4.4.9 + * + * @return void + */ + public function store_current_version() { + $version = $this->get_current_version(); + update_option( 'ssa_plugin_version', $version ); + } +} + +/** + * Grab the Simply_Schedule_Appointments object and return it. + * Wrapper for Simply_Schedule_Appointments::get_instance(). + * + * @since 0.0.0 + * @return Simply_Schedule_Appointments Singleton instance of plugin class. + */ +function ssa() { + return Simply_Schedule_Appointments::get_instance(); +} + +// Kick it off. +add_action( 'plugins_loaded', array( ssa(), 'hooks' ) ); + +// Activation and deactivation. +register_activation_hook( __FILE__, array( ssa(), '_activate' ) ); +register_deactivation_hook( __FILE__, array( ssa(), '_deactivate' ) ); + +// Uninstall +register_uninstall_hook( __FILE__, array( 'Simply_Schedule_Appointments', '_uninstall' ) ); + +function ssa_is_debug() { + if ( defined( 'SSA_DEBUG' ) && SSA_DEBUG ) { + return true; + } + + return false; +} + +if ( defined( 'WP_CLI' ) && WP_CLI && method_exists( 'WP_CLI', 'add_command' ) ) { + require_once ssa()->dir( 'includes/class-cli.php' ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/templates/admin-app/custom.css b/wp-content/plugins/simply-schedule-appointments/templates/admin-app/custom.css new file mode 100644 index 0000000..02d3351 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/admin-app/custom.css @@ -0,0 +1,6 @@ +/* +Note: Do not edit this file. +If you wish to add your own CSS, copy this file to your parent/child theme inside ssa/admin-app/ + (e.g. wp-content/themes/your-theme/ssa/admin-app/custom.css) +*/ + diff --git a/wp-content/plugins/simply-schedule-appointments/templates/booking-app/custom.css b/wp-content/plugins/simply-schedule-appointments/templates/booking-app/custom.css new file mode 100644 index 0000000..8e4bbd3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/booking-app/custom.css @@ -0,0 +1,6 @@ +/* +Note: Do not edit this file. +If you wish to add your own CSS, copy this file to your parent/child theme inside ssa/booking-app/ + (e.g. wp-content/themes/your-theme/ssa/booking-app/custom.css) +*/ + diff --git a/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/customer.php b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/customer.php new file mode 100644 index 0000000..fc5aeaf --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/customer.php @@ -0,0 +1,33 @@ +<?php +/** + * Calendar Event Details (Customer) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/calendar-events/customer.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 4.3.7.4 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +{% if Appointment.web_meeting_url %} +<?php _e( "This event has a web meeting:", 'simply-schedule-appointments' ) ?> +{{Appointment.web_meeting_url}} +{% endif %} + +{% if instructions %} +<?php echo sprintf( __( 'Instructions: %s', 'simply-schedule-appointments' ), '{{ instructions|raw }}' ); ?> +{% endif %} + +{% if Appointment.AppointmentType.description %} +{{ Appointment.AppointmentType.description }} +{% endif %} + +<?php _e('Need to make changes to this event?', 'simply-schedule-appointments') ?> +{{Appointment.public_edit_url}} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-admin.php b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-admin.php new file mode 100644 index 0000000..0445b41 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-admin.php @@ -0,0 +1,25 @@ +<?php +/** + * Calendar Event Details (Group - Admin only) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/calendar-events/group-admin.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 4.3.7.4 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +{% if Appointment.web_meeting_url %} +<?php _e( "This event has a web meeting:", 'simply-schedule-appointments' ) ?> +{{Appointment.web_meeting_url}} +{% endif %} + +<?php _e( "Attendees:", 'simply-schedule-appointments' ) ?> +{{ attendees_list }} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-shared.php b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-shared.php new file mode 100644 index 0000000..dab6d43 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/group-shared.php @@ -0,0 +1,25 @@ +<?php +/** + * Calendar Event Details (Group - Shared) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/calendar-events/group-shared.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 4.3.7.4 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +{% if Appointment.web_meeting_url %} +<?php _e( "This event has a web meeting:", 'simply-schedule-appointments' ) ?> +{{Appointment.web_meeting_url}} +{% endif %} + +<?php _e( "Attendees:", 'simply-schedule-appointments' ) ?> +{{ attendees_list }} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-admin.php b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-admin.php new file mode 100644 index 0000000..15f815d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-admin.php @@ -0,0 +1,28 @@ +<?php +/** + * Calendar Event Details (Individual - Admin only) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/calendar_-events/individual-admin.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 4.3.7.4 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +{% if Appointment.web_meeting_url %} +<?php _e( "This event has a web meeting:", 'simply-schedule-appointments' ) ?> +{{Appointment.web_meeting_url}} +{% endif %} + +<?php echo __( 'Customer details:' ) ?> +{{ Appointment.customer_information_summary }} + +<?php _e('Need to make changes to this event?', 'simply-schedule-appointments') ?> +{{Appointment.public_edit_url}} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-shared.php b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-shared.php new file mode 100644 index 0000000..80fea2b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/calendar-events/individual-shared.php @@ -0,0 +1,28 @@ +<?php +/** + * Calendar Event Details (Individual - Shared) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/calendar-events/individual-shared.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 4.3.7.4 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +{% if Appointment.web_meeting_url %} +<?php _e( "This event has a web meeting:", 'simply-schedule-appointments' ) ?> +{{Appointment.web_meeting_url}} +{% endif %} + +<?php echo __( 'Your details:' ) ?> +{{ Appointment.customer_information_summary }} + +<?php _e('Need to make changes to this event?', 'simply-schedule-appointments') ?> +{{Appointment.public_edit_url}} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/customer/past-appointments.php b/wp-content/plugins/simply-schedule-appointments/templates/customer/past-appointments.php new file mode 100644 index 0000000..c54bc5a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/customer/past-appointments.php @@ -0,0 +1,53 @@ +<?php +// $atts are defined in class-shortcodes.php +// don't try to load this file directly, instead call ssa()->shortcodes->ssa_past_appointments() + +$past_appointments = ssa()->appointment_model->query( $atts ); + +$settings = ssa()->settings->get(); +$date_format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; +?> + +<div class="ssa-past-appointments"> + <ul class="ssa-past-appointments"> + <?php if ( ! is_user_logged_in() ) : ?> + <?php echo wp_kses_post( $atts['logged_out_message'] ); ?> + <?php elseif ( empty( $past_appointments ) ) : ?> + <?php echo wp_kses_post( $atts['no_results_message'] ); ?> + <?php else : ?> + <?php foreach ( $past_appointments as $past_appointment ) : ?> + <li> + <span class="ssa-past-appointments-appointment"> + <span class="ssa-past-appointments-start-date"> + <?php + $past_appointment_datetime = ssa_datetime( $past_appointment['start_date'] ); + if ( ! empty( $past_appointment['customer_timezone'] ) ) { + $customer_timezone_string = $past_appointment['customer_timezone']; + } else { + $customer_timezone_string = 'UTC'; + } + $customer_timezone = new DateTimezone( $customer_timezone_string ); + $localized_string = $past_appointment_datetime->setTimezone( $customer_timezone )->format( $date_format ); + $localized_string = SSA_Utils::translate_formatted_date( $localized_string ); + + echo $localized_string; + + if ( filter_var( $atts['appointment_type_displayed'], FILTER_VALIDATE_BOOLEAN ) ) { + $past_appointment_type = new SSA_Appointment_Type_Object( $past_appointment['appointment_type_id'] ); + echo ' ' . $past_appointment_type->get_title(); + } + + if ( ! empty( $past_appointment['web_meeting_url'] ) && filter_var( $atts['web_meeting_url'], FILTER_VALIDATE_BOOLEAN ) ) { + echo ' <a target="_blank" href="' . $past_appointment['web_meeting_url'] . '">' . 'Open Web Meeting' . '</a>'; + } + if ( ! empty( $atts['details_link_displayed'] ) ) { + echo ' <a target="_blank" href="' . ssa()->appointment_model->get_public_edit_url( $past_appointment['id'] ) . '">' . wp_kses_post( $atts['details_link_label'] ) . '</a>'; + } + ?> + </span> + </span> + </li> + <?php endforeach; ?> + <?php endif ?> + </ul> +</div> diff --git a/wp-content/plugins/simply-schedule-appointments/templates/customer/upcoming-appointments.php b/wp-content/plugins/simply-schedule-appointments/templates/customer/upcoming-appointments.php new file mode 100644 index 0000000..07600f1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/customer/upcoming-appointments.php @@ -0,0 +1,196 @@ +<?php +// $atts are defined in class-shortcodes.php +// don't try to load this file directly, instead call ssa()->shortcodes->ssa_upcoming_appointments() + +$upcoming_appointments = ssa()->appointment_model->query( $atts ); + +$settings = ssa()->settings->get(); +$date_format = SSA_Utils::localize_default_date_strings($settings['global']['date_format']); +$time_format = SSA_Utils::localize_default_date_strings($settings['global']['time_format']); +?> +<div class="ssa-upcoming-appointments-container" role="region" aria-labelledby="appointments-heading"> + <div class="ssa-upcoming-appointments"> + <?php if ( ! is_user_logged_in() ) : ?> + <?php echo wp_kses_post( $atts['logged_out_message'] ); ?> + <?php elseif ( empty( $upcoming_appointments ) && !empty( $atts['block_settings']['no_results_message'] ) ) : ?> + <?php echo wp_kses_post( $atts['block_settings']['no_results_message'] ); ?> + <?php elseif ( empty( $upcoming_appointments ) ) : ?> + <?php echo wp_kses_post( $atts['no_results_message'] ); ?> + <?php else : ?> + <?php foreach ( $upcoming_appointments as $upcoming_appointment ) : ?> + <?php $staff_details = ssa()->staff_appointment_model->get_staff_details_for_appointment_id( $upcoming_appointment['id'] ); + $resources = ssa()->resource_appointment_model->get_resource_details( $upcoming_appointment['id'] ); + $show_staff_image = false; + $show_staff_name = false; + $show_appointment_type = false; + $hide_team_member = false; + $hide_resources = false; + $show_all_resources = false; + if (!empty($atts['block_settings']['memberInformation']) && is_array($atts['block_settings']['memberInformation'])) { + foreach ($atts['block_settings']['memberInformation'] as $setting) { + if ($setting['value'] === 'Display Team Members' && $setting['checked'] == "true") { + $hide_team_member = true; + } + if ($setting['value'] === 'Display Member Images' && $setting['checked'] == "true") { + $show_staff_image = true; + } + if ($setting['value'] === 'Display Member Names' && $setting['checked'] == "true") { + $show_staff_name = true; + } + } + } + if (!empty($atts['block_settings']['memberInfo']) && is_array($atts['block_settings']['memberInfo'])) { + if (in_array('Display Team Members', $atts['block_settings']['memberInfo'])) { + $hide_team_member = true; + } + if (in_array('Display Member Images', $atts['block_settings']['memberInfo'])) { + $show_staff_image = true; + } + if (in_array('Display Member Names', $atts['block_settings']['memberInfo'])) { + $show_staff_name = true; + } + } + if (!empty($atts['block_settings']['appointmentDisplay'])) { + if (is_array($atts['block_settings']['appointmentDisplay'])) { + foreach ($atts['block_settings']['appointmentDisplay'] as $options) { + if ($options['value'] === 'Display Appointment Types' && $options['checked'] == "true") { + $show_appointment_type = true; + } + } + } else { + $show_appointment_type = true; + } + } + if (!empty($atts['block_settings']['resourceDisplay'])) { + if (is_array($atts['block_settings']['resourceDisplay'])) { + foreach ($atts['block_settings']['resourceDisplay'] as $options) { + if ($options['value'] === 'Display Resources' && $options['checked'] == "true") { + $hide_resources = true; + } + } + } elseif ($atts['block_settings']['resourceDisplay'] === 'Display Resources'){ + $hide_resources = true; + } + } + if (!empty($atts['block_settings']['allResourcesTypeOption'])) { + if (is_array($atts['block_settings']['allResourcesTypeOption'])) { + foreach ($atts['block_settings']['allResourcesTypeOption'] as $options) { + if ($options['value'] === 'All' && $options['checked'] == "true") { + $show_all_resources = true; + } + } + } elseif ($atts['block_settings']['allResourcesTypeOption'] === 'All') { + $show_all_resources = true; + } + } + ?> + <div class="appointment-card" role="article" aria-labelledby="appointment-<?php echo $upcoming_appointment['id']; ?>"> + <div class="appointment-card-header"> + <?php + if ($staff_details && is_array($staff_details) && count($staff_details) > 1) { + if (!$hide_team_member && $show_staff_image) { + $count = 0; + echo "<div class='staff-images-container'>"; + foreach ($staff_details as $staff_member) { + $position_class = ($count === 0) ? 'secondary-image' : 'primary-image'; + echo '<img class="staff-avatar ' . esc_attr($position_class) . '" src="' . esc_url(get_avatar_url($staff_member['email'])) . '" />'; + $count++; + if ($count >= 2) { + break; + } + } + echo "</div>"; + } + } elseif (is_array($staff_details) && count($staff_details) === 1) { + if ($staff_details) { + if (!$hide_team_member && $show_staff_image) { + echo '<img src="' . esc_url(get_avatar_url($staff_details[0]['email'])) . '" />'; + } + } + } + ?> + <div class="appointment-information"> + <div class="appointment-header"> + <?php + $upcoming_appointment_datetime = ssa_datetime( $upcoming_appointment['start_date'] ); + + if ( ! empty( $upcoming_appointment['customer_timezone'] ) ) { + $customer_timezone_string = $upcoming_appointment['customer_timezone']; + } else { + $customer_timezone_string = 'UTC'; + } + $customer_timezone = new DateTimezone( $customer_timezone_string ); + $localized_date = $upcoming_appointment_datetime->setTimezone($customer_timezone)->format($date_format); + $localized_time = $upcoming_appointment_datetime->setTimezone($customer_timezone)->format($time_format. ' (T)'); + + $localized_date = SSA_Utils::translate_formatted_date($localized_date); + + echo '<p><span class="appointment-date">' . esc_html__($localized_date, 'simply-schedule-appointments') . + '</span> <span class="appointment-time">' . esc_html__('at', 'simply-schedule-appointments') . ' ' . esc_html__($localized_time, 'simply-schedule-appointments') . '</span></p>'; + + $upcoming_appointment_type = new SSA_Appointment_Type_Object( $upcoming_appointment['appointment_type_id'] ); + $upcoming_appointment_title = $upcoming_appointment_type->get_title(); + + if ($staff_details && $show_appointment_type && !$hide_team_member && $show_staff_name) { + echo '<p>' . esc_html__($upcoming_appointment_title, 'simply-schedule-appointments') . ' ' . esc_html__('with', 'simply-schedule-appointments') . ' '; + $staff_names = array_map('esc_html', array_column($staff_details, 'name')); + echo '<span class="appointment-staff">' . implode(', ', $staff_names) . '</span>'; + echo '</p>'; + } elseif ($staff_details && !$hide_team_member && $show_staff_name) { + echo '<p>' . esc_html__('With', 'simply-schedule-appointments') . ' '; + $staff_names = array_map('esc_html', array_column($staff_details, 'name')); + echo '<span class="appointment-staff">' . implode(', ', $staff_names) . '</span>'; + echo '</p>'; + } elseif ($show_appointment_type) { + echo '<p>' . esc_html__($upcoming_appointment_title, 'simply-schedule-appointments') . '</p>'; + } elseif ( filter_var( $atts['appointment_type_displayed'], FILTER_VALIDATE_BOOLEAN ) ) { + echo '<p>' . esc_html__($upcoming_appointment_title, 'simply-schedule-appointments') . '</p>'; + } + + ?> + </div> + <div class="appointment-details"> + <ul> + <?php + if (!empty($resources) && !$hide_resources){ + if( !$show_all_resources){ + if( !empty( $atts['block_settings']['resourceTypes'] )){ + $appointmentResources = $atts['block_settings']['resourceTypes']; + foreach ($resources as $resource) { + if ( + is_array($appointmentResources) && + in_array($resource['resource_group_id'], $appointmentResources) + ) { + echo '<li>' . esc_html__($resource['group_title'] . ': ' . $resource['resource_title'], 'simply-schedule-appointments') . '</li>'; + } + } + } + } else { + foreach ($resources as $resource) { + echo '<li>' . esc_html__($resource['group_title'] . ': ' . $resource['resource_title'], 'simply-schedule-appointments') . '</li>'; + } + } + } + ?> + <?php if ( ! empty( $upcoming_appointment['web_meeting_url'] ) && filter_var( $atts['web_meeting_url'], FILTER_VALIDATE_BOOLEAN ) ) : ?> + <li> + <?php echo esc_html__( 'On', 'simply-schedule-appointments'); ?> + <a target="_blank" href="<?php echo esc_url( $upcoming_appointment['web_meeting_url'] ); ?>"><?php esc_html_e( 'Web Meeting', 'simply-schedule-appointments' ); ?></a> + </li> + <?php endif; ?> + </ul> + </div> + </div> + </div> + <div class="action-bar"> + <?php + if ( ! empty( $atts['details_link_displayed'] ) ) { + echo '<button id="details_button" onclick="window.open(\'' . ssa()->appointment_model->get_public_edit_url($upcoming_appointment['id']) . '\', \'_blank\')">' . wp_kses_post( $atts['details_link_label'] ) . '</button>'; + } + ?> + </div> + </div> + <?php endforeach; ?> + <?php endif ?> + </div> +</div> diff --git a/wp-content/plugins/simply-schedule-appointments/templates/dashboard/dashboard-upcoming-appointments-widget.php b/wp-content/plugins/simply-schedule-appointments/templates/dashboard/dashboard-upcoming-appointments-widget.php new file mode 100644 index 0000000..2a4de2e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/dashboard/dashboard-upcoming-appointments-widget.php @@ -0,0 +1,106 @@ +<?php +// $atts are defined in class-shortcodes.php +// don't try to load this file directly, instead call ssa()->shortcodes->ssa_upcoming_appointments() + +$settings = ssa()->settings->get(); +$upcoming_appointments = ssa()->appointment_model->query( $atts ); +$all_appointment_types = ssa()->appointment_type_model->get_all_appointment_types(); +$mapped_appointment_types = array(); +foreach( $all_appointment_types as $appointment_type ){ + if(empty($mapped_appointment_types[$appointment_type['id']])){ + $mapped_appointment_types[$appointment_type['id']] = $appointment_type; + } +} + + +$date_format = SSA_Utils::localize_default_date_strings( 'F j, Y g:i a' ) . ' (T)'; +?> + +<div class="ssa-upcoming-appointments"> + <ul class="ssa-upcoming-appointments"> + <?php if ( ! is_user_logged_in() ) : ?> + <?php echo wp_kses_post( $atts['logged_out_message'] ); ?> + <?php elseif ( empty( $upcoming_appointments ) ) : ?> + <?php echo wp_kses_post( $atts['no_results_message'] ); ?> + <?php else : ?> + <?php + foreach ( $upcoming_appointments as $upcoming_appointment ) : + $members = ssa()->staff_appointment_model->get_staff_details_for_appointment_id( $upcoming_appointment['id'] ); + $upcoming_appointment_type = $mapped_appointment_types[$upcoming_appointment['appointment_type_id']]; + + $members_names = array(); + if ( !empty( $members ) ){ + foreach ( $members as $member){ + $members_names[] = $member['name']; + } + } + $label= $upcoming_appointment_type['label_color']; + ?> + <li class="ssa-upcoming-appointment"> + <i aria-hidden="true" class="md-icon md-primary md-size-2x md-theme-<?php echo $label;?> material-icons"> person </i> + <div class="md-list-text-container"> + <h4> + <?php + // output name of the client who booked the meeting. + $user_name = $upcoming_appointment['customer_information']['Name']; + echo ( ' ' . ucfirst( $user_name ) . ' ' ); + ?> + </h4> + <!-- Appointment type --> + <p> + <?php + if ( filter_var( $atts['appointment_type_displayed'], FILTER_VALIDATE_BOOLEAN ) ) { + echo ' ' . $upcoming_appointment_type['title']; + } + ?> + <!-- Appointment team members --> + <?php + if ( filter_var( $atts['team_members_displayed'], FILTER_VALIDATE_BOOLEAN ) && ! empty( $members_names ) ) { + echo ' with ' . join( ', ', $members_names ); + } + ?> + </p> + <!-- Appointment Time --> + <p> + <?php + $upcoming_appointment_datetime = ssa_datetime( $upcoming_appointment['start_date'] ); + if ( ! empty( $upcoming_appointment['customer_timezone'] ) ) { + $customer_timezone_string = $upcoming_appointment['customer_timezone']; + } else { + $customer_timezone_string = 'UTC'; + } + + // display the localized time according to business timezone. + $date_timezone = new DateTimeZone( $settings['global']['timezone_string'] ); + $localized_string = $upcoming_appointment_datetime->setTimezone( $date_timezone )->format( $date_format ); + $localized_string = SSA_Utils::translate_formatted_date( $localized_string ); + + echo $localized_string; + ?> + + </p> + <!-- Appointment Links --> + <p class="ssa-upcoming-appointment-links"> + <?php + // link meeting details to the admin ssa panel. + if ( ! empty( $upcoming_appointment['web_meeting_url'] ) && filter_var( $atts['web_meeting_url'], FILTER_VALIDATE_BOOLEAN ) ) { + echo ' <a target="_blank" href="' . $upcoming_appointment['web_meeting_url'] . '"> ' . wp_kses_post( $atts['web_meeting_link_label'] ) . ' </a>'; + } + + if ( ! empty( $atts['details_link_displayed'] ) ) { + echo '<a target="_blank" href=' . ssa()->wp_admin->url( '/ssa/appointment/' ) . $upcoming_appointment['id'] . '>' . wp_kses_post( $atts['details_link_label'] ) . '</a>'; + } + ?> + + </p> + </div> + </li> + <?php endforeach; ?> + <?php + if ( ! empty( $upcoming_appointments ) ) { + echo '<a href=' . ssa()->wp_admin->url( '/ssa/appointments' ) . '><li class="ssa-upcoming-appointment"><div class="md-list-text-container">'.wp_kses_post( $atts['all_appointments_link_label'] ). '</div></li></a>'; + } + ?> + <?php endif; ?> + </ul> +</div> diff --git a/wp-content/plugins/simply-schedule-appointments/templates/memberpress/admin-dashboard-appointments-content.php b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/admin-dashboard-appointments-content.php new file mode 100644 index 0000000..ab615d6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/admin-dashboard-appointments-content.php @@ -0,0 +1,174 @@ + +<?php if(!defined('ABSPATH')) {die('You are not allowed to call this page directly.');} // phpcs:ignore ?> + +<?php +$post_id = $product->ID; +// Default values +$included_appointment_types = array(); +$included_appointment_types_ids = array(); +$enabled = false; + +// Get product settings for this post/membership +$product_settings = get_post_meta( $post_id, SSA_Mepr_Membership::$ssa_product_post_meta_key_str ); + +if ( ! empty( $product_settings[0] ) ) { + $product_settings = $product_settings[0]; + $enabled = $product_settings[ SSA_Mepr_Membership::$ssa_product_is_enabled_str ]; + $included_appointment_types = $product_settings[ SSA_Mepr_Membership::$ssa_product_product_settings_str ]; + + if( ! empty( $included_appointment_types ) ) { + foreach ($included_appointment_types as $id => $settings) { + if( empty( $settings['active'] ) ) { + continue; + } + $included_appointment_types_ids[] = $id; + } + } +} + +$appointment_types = $this->plugin->appointment_type_model->query( array( 'status' => 'publish' ) ); + +?> +<div class="product_options_page appointments"> + +<!-- In case there are no appointment types created --> +<?php if(empty($appointment_types)): ?> + + <div class="ssa-memberpress-memberships-empty-container"> + <p> + <?= __('Looks like Simply Schedule Appointments isn\'t fully set up yet.', 'simply-schedule-appointments'); ?> + </p> + <span> + <?= sprintf( __( 'Head to %1$s the SSA dashboard %2$s to get that squared away.', 'simply-schedule-appointments' ), + '<a href="' . $this->plugin->wp_admin->url( 'ssa/appointment-types/all' ) . '" target="_blank">', + '</a>' + ); + ?> + </span> + </div> + +<?php else: ?> + + <div + class="ssa-memberpress-memberships-container" + style="width: fit-content; display:block;" + > + <div> + <input + aria-describedby="ssa-memberpress-helperText" + type="checkbox" + name="ssa-mepr-include-appointments" + id="ssa-mepr-include-appointments" <?php checked($enabled); ?> + /> + <label for="ssa-mepr-include-appointments"> + <?= __('Do you want to include appointments with this membership?', 'simply-schedule-appointments' ); ?> + </label> + <span + id="ssa-memberpress-helperText" + class="ssa-memberpress-helperText" + style="display: <?php echo $enabled ? 'none' : 'block'; ?>" + aria-hidden="<?php echo $enabled ? 'true' : 'false'; ?>" + > + <?= __('Enable this feature to allow members to book appointments as part of their membership.', 'simply-schedule-appointments' ); ?> + + <!-- TODO Set the guide url --> + <a href="https://simplyscheduleappointments.com/guides/memberpress-booking-subscriptions" target="_blank"> + <?= __('Learn more', 'simply-schedule-appointments'); ?> + </a> + + </span> + + </div> + + <div + id="ssa-mepr-appointments-block" + style="display: <?= $enabled ? 'block' : 'none'; ?>" + aria-hidden="<?= $enabled ? 'false' : 'true'; ?>" + > + <div> + <p + id="ssa-mepr-note-not-setup" + class="ssa-mepr-note" + style="display: <?php echo empty( $included_appointment_types ) ? 'block' : 'none'; ?>" + aria-hidden="<?php echo empty( $included_appointment_types ) ? 'false' : 'true'; ?>" + + > + <?= __('No appointment types are set up for this membership yet.', 'simply-schedule-appointments'); ?> + </p> + <p + id="ssa-mepr-note-offers" + class="ssa-mepr-note" + style="display: <?= ! empty( $included_appointment_types ) ? 'block' : 'none'; ?>" + aria-hidden="<?= ! empty( $included_appointment_types ) ? 'false' : 'true'; ?>" + > + <?= __('This Membership offers the following appointments', 'simply-schedule-appointments'); ?>: + </p> + </div> + + <!-- Appointment types table --> + <div + id="ssa-mepr-appointment-type-table" + style="display:none;" + > + <div + class="ssa-mepr-flex-column" + style="margin: 5px 0 15px 0;"> + + <!-- foxy logo --> + <div class="ssa-mepr-image-wrapper"> + <img + src= <?= $this->plugin->url('assets/images/foxes/logo-ssa.svg') ?> + alt="Simply Schedule Appointments Foxy Icon" + class="ssa-mepr-foxy-icon" + > + </div> + + <!-- Here the render method in javascript will populate the table content --> + <div id="ssa-mepr-appointment-type-table-content"></div> + + </div> + </div> <!-- End Appointment types table --> + + <!-- Appointment types Dropdown --> + <div> + <label for="ssa_apptTypesDropdown"> + <?= __('Add a new appointment type', 'simply-schedule-appointments'); ?>: + </label> + <select + name="appointment-types" + id="ssa_apptTypesDropdown" + aria-description="<?= __('Click the add button to choose the selected option', 'simply-schedule-appointments'); ?>" + > + <?php foreach ($appointment_types as $appointment_type): + $is_included = in_array( $appointment_type['id'], $included_appointment_types_ids ); + ?> + <option + value="<?= $appointment_type['id']; ?>" + data-title="<?= $appointment_type['title']; ?>" + <?= $is_included ? 'disabled' : '' ; ?> + aria-disabled="<?= $is_included ? 'true' : 'false'; ?>" + > + <?= $appointment_type['title']; ?> + </option> + <?php endforeach; ?> + </select> + + <button + id="ssa-mepr-action-btn" + class="button" + > + <span class="ssa-screen-reader-text"> + <?= __('Add the selected appointment type', 'simply-schedule-appointments'); ?> + </span> + <span aria-hidden="true"> + <?= __('Add', 'simply-schedule-appointments'); ?> + </span> + </button> + </div> <!-- End Appointment types Dropdown --> + </div> +<div> + +<?php endif; ?> + +</div> + diff --git a/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-booking-iframes.php b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-booking-iframes.php new file mode 100644 index 0000000..2795545 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-booking-iframes.php @@ -0,0 +1,25 @@ +<?php if(!defined('ABSPATH')) {die('You are not allowed to call this page directly.');} // phpcs:ignore ?> + +<div id="ssa-mepr-booking-app-container" style="display:none;"> + <button id="ssa-mepr-back-appointments" class="ssa-btn-raised-bordered"> + ←  <?= __('Back To Appointments', 'simply-schedule-appointments'); ?> + </button> + <?php foreach ($bookable_memberships as $membership): + $membership_id = $membership->get_product_id(); + $bookable_types = $user->get_bookable_types_for_membership($membership_id); + foreach ($bookable_types as $appointment_type_id): ?> + <div + class="ssa-mepr-booking-app-iframe-container" + data-type-id="<?= $appointment_type_id ?>" + data-product-id="<?= $membership_id ?>" + style="display:none" + > + <!-- The iframe goes here --> + <?= $this->plugin->shortcodes->ssa_booking([ + 'mepr_membership_id' => $membership_id, + 'types' => $appointment_type_id + ]); ?> + </div> + <?php endforeach; ?> + <?php endforeach; ?> +</div> \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-filter.php b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-filter.php new file mode 100644 index 0000000..cbfd3b1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-filter.php @@ -0,0 +1,91 @@ +<?php if(!defined('ABSPATH')) {die('You are not allowed to call this page directly.');} // phpcs:ignore ?> + +<?php +$user_id = $this->ssa_mepr_get_user_id(); +$user = new SSA_Mepr_User( $user_id ); +$past_appointments = $user->get_prepared_past_appointments(); + +$memberships = $user->extract_memberships_details_from_appointments( $past_appointments ); +$appointment_types = $user->extract_appointment_types_details_from_appointments( $past_appointments ); + +$appointment_statuses_keys = array_merge( + SSA_Appointment_Model::get_booked_statuses(), + SSA_Appointment_Model::get_canceled_statuses(), + SSA_Appointment_Model::get_abandoned_statuses() +); + +$statuses = array(); +foreach ($appointment_statuses_keys as $key) { + $statuses[ $key ] = $this->get_admin_app_translations()['appointments']['statuses'][$key]; +} + +$date_options = array( + 'last_30_days' => __('Last 30 days', 'simply-schedule-appointments'), + 'last_90_days' => __('Last 90 days', 'simply-schedule-appointments'), + 'all' => __('All', 'simply-schedule-appointments'), +); + +// Start Section +echo '<section class="ssa-mepr__past-appointments" id="ssa-mepr__past-appointments-section">'; + +echo '<h2>'. __('Past Appointments', 'simply-schedule-appointments') .'</h2>'; + +// Start the form +echo '<form id="appointments-filter-form">'; + +// Membership select +echo '<div class="ssa_mepr_inner-filter-container">'; +echo '<label for="ssa_mepr_select_membership">'. __('Membership', 'simply-schedule-appointments') .'</label>'; +echo '<br>'; +echo '<select id="ssa_mepr_select_membership" name="membership">'; +echo '<option value="any">'. __('Any', 'simply-schedule-appointments') .'</option>'; +foreach ($memberships as $membership) { + echo '<option value="'.$membership['id'].'">'.$membership['title'].'</option>'; +} +echo '</select>'; +echo '</div>'; + +// Appointment type select +echo '<div class="ssa_mepr_inner-filter-container">'; +echo '<label for="ssa_mepr_select_appointment_types">'. __('Appointment Type', 'simply-schedule-appointments') .'</label>'; +echo '<br>'; +echo '<select id="ssa_mepr_select_appointment_types" name="appointment_type">'; +echo '<option value="any">'. __('Any', 'simply-schedule-appointments') .'</option>'; +foreach ($appointment_types as $appointmentType) { + echo '<option value="'.$appointmentType['id'].'">'.$appointmentType['title'].'</option>'; +} +echo '</select>'; +echo '</div>'; + +// Date options +echo '<div class="ssa_mepr_inner-filter-container">'; +echo '<label for="ssa_mepr_select_date">'. __('Date', 'simply-schedule-appointments') .'</label>'; +echo '<br>'; +echo '<select id="ssa_mepr_select_date" name="date">'; +foreach ($date_options as $key => $date_option) { + echo '<option value="'.$key.'">'.$date_option.'</option>'; +} +echo '</select>'; +echo '</div>'; + +// Status select +echo '<div class="ssa_mepr_inner-filter-container">'; +echo '<label for="ssa_mepr_select_status">'. __('Status', 'simply-schedule-appointments') .'</label>'; +echo '<br>'; +echo '<select id="ssa_mepr_select_status" name="status">'; +echo '<option value="any">'. __('Any', 'simply-schedule-appointments') .'</option>'; +foreach ( $statuses as $key => $status ) { + $selected = ($key === 'booked') ? 'selected' : ''; + echo '<option value="'.$key.'" '.$selected.'>'.$status.'</option>'; +} +echo '</select>'; +echo '</div>'; + +// End the form +echo '</form>'; + +// Render table +$this->render_past_appointments_table(); + +// End the section +echo '</section>'; \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-table.php b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-table.php new file mode 100644 index 0000000..dfa7a7b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-past-appointments-table.php @@ -0,0 +1,16 @@ +<?php if(!defined('ABSPATH')) {die('You are not allowed to call this page directly.');} // phpcs:ignore ?> + +<div id="ssa_mepr_past_table_container" class="mp_wrapper"> + <table id="mepr-account-past-appointments-table" class="mepr-account-table"> + <thead> + <tr> + <th><?php echo __('Membership', 'simply-schedule-appointments'); ?></th> + <th><?php echo __('Appointment type', 'simply-schedule-appointments'); ?></th> + <th><?php echo __('Appointments', 'simply-schedule-appointments'); ?></th> + </tr> + </thead> + <tbody id="ssa-mepr-past-appointments-table-body" > + <!-- The body will be populated with javascript --> + </tbody> + </table> +</div> \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-upcoming-appointments-table.php b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-upcoming-appointments-table.php new file mode 100644 index 0000000..095ced1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/memberpress/user-account-upcoming-appointments-table.php @@ -0,0 +1,17 @@ +<?php if(!defined('ABSPATH')) {die('You are not allowed to call this page directly.');} // phpcs:ignore ?> + +<div id="ssa_mepr_accountview_table_container" class="mp_wrapper"> + <table id="mepr-account-appointment-table" class="mepr-account-table"> + <thead> + <tr> + <th><?php echo __('Membership', 'simply-schedule-appointments'); ?></th> + <th><?php echo __('Appointment types', 'simply-schedule-appointments'); ?></th> + <th><?php echo __('Upcoming appointments', 'simply-schedule-appointments'); ?></th> + </tr> + </thead> + <tbody id="ssa-mepr-appointments-table-body" > + <!-- The body will be populated with javascript --> + </tbody> + </table> +</div> + \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-customer.php b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-customer.php new file mode 100644 index 0000000..45aef97 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-customer.php @@ -0,0 +1,39 @@ +<?php +/** + * Appointment Booked (to Customer) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/notifications/email/text/booked-customer.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 2.5.0 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +<?php echo sprintf( __( 'Hi %s,', 'simply-schedule-appointments' ), '{{ Appointment.customer_information.Name }}' ); ?> + +<?php echo sprintf( __( 'This is a confirmation of the appointment you just booked on %s', 'simply-schedule-appointments' ), '{{ Global.site_url }}' ); ?> + +<?php echo sprintf( __( 'Appointment scheduled for %s', 'simply-schedule-appointments' ), '{{ Appointment.customer_start_date }}' );?> + +{% if instructions %} +<?php echo sprintf( __( 'Instructions: %s', 'simply-schedule-appointments' ), '{{ instructions|raw }}' ); ?> +{% endif %} + +{% if Appointment.web_meeting_url %} +<?php echo sprintf( __( 'At your appointment time, join the meeting using this link: %s' ), '{{ Appointment.web_meeting_url }}' ); ?> +{% endif %} + +<?php echo sprintf( __( 'Type: %s', 'simply-schedule-appointments' ), '{{ Appointment.AppointmentType.title|raw }}' ); ?> + +<?php echo __( 'Your details:' ) ?> +{{ Appointment.customer_information_summary }} + +<?php echo __( 'If you need to cancel or change your appointment, you can do so by visiting this link:', 'simply-schedule-appointments' ); ?> +{{ Appointment.public_edit_url }} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-staff.php b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-staff.php new file mode 100644 index 0000000..c2d8fb0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/booked-staff.php @@ -0,0 +1,35 @@ +<?php +/** + * Appointment Booked (to Staff) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/notifications/email/text/booked-staff.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 2.5.0 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +<?php echo sprintf( __( '%s just booked an appointment on %s', 'simply-schedule-appointments' ), '{{ Appointment.customer_information.Name }}', '{{ Global.home_url }}' ); ?> + +<?php echo __( 'Appointment Details:', 'simply-schedule-appointments' );?> +<?php echo sprintf( __( 'Starting at %s', 'simply-schedule-appointments' ), '{{ Appointment.business_start_date }}' );?> + +{% if instructions %} +<?php echo sprintf( __( 'Instructions: %s', 'simply-schedule-appointments' ), '{{ instructions|raw }}' ); ?> +{% endif %} + +{% if Appointment.web_meeting_url %} +<?php echo sprintf( __( 'At your appointment time, join the meeting using this link: %s' ), '{{ Appointment.web_meeting_url }}' ); ?> +{% endif %} + +<?php echo sprintf( __( 'Type: %s', 'simply-schedule-appointments' ), '{{ Appointment.AppointmentType.title|raw }}' ); ?> + +<?php echo __( 'Customer details:' ) ?> +{{ Appointment.customer_information_summary }} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-customer.php b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-customer.php new file mode 100644 index 0000000..785babc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-customer.php @@ -0,0 +1,21 @@ +<?php +/** + * Appointment Booked (to Customer) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/notifications/email/text/canceled-customer.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 2.5.0 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +<?php echo sprintf( __( 'Hi %s,', 'simply-schedule-appointments' ), '{{ Appointment.customer_information.Name }}' ); ?> + +<?php echo sprintf( __( 'Your appointment "%s" (booked on %s) has been canceled', 'simply-schedule-appointments' ), '{{ Appointment.AppointmentType.title|raw }}', '{{ Global.home_url }}' ); ?> \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-staff.php b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-staff.php new file mode 100644 index 0000000..6e9ff59 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/notifications/email/text/canceled-staff.php @@ -0,0 +1,28 @@ +<?php +/** + * Appointment Booked (to Staff) + * * + * This template can be overridden by copying it to wp-content/themes/your-theme/ssa/notifications/email/text/canceled-staff.php + * Note: this is just the default template that is used as a starting pont. + * Once the user makes edits in the SSA Settings interface, + * the template stored in the database will be used instead + * + * @see https://simplyscheduleappointments.com + * @author Simply Schedule Appointments + * @package SSA/Templates + * @version 2.5.0 + */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; // Exit if accessed directly +} ?> +<?php echo sprintf( __( 'Your appointment "%s" with %s has been canceled', 'simply-schedule-appointments' ), '{{ Appointment.AppointmentType.title|raw }}', '{{ Appointment.customer_information.Name }}' ); ?> + +<?php echo __( '*** Canceled ***', 'simply-schedule-appointments' );?> +<?php echo __( 'Appointment Details:', 'simply-schedule-appointments' );?> +<?php echo sprintf( __( '%s', 'simply-schedule-appointments' ), '{{ Appointment.business_start_date }}' );?> + +<?php echo sprintf( __( 'Type: %s', 'simply-schedule-appointments' ), '{{ Appointment.AppointmentType.title|raw }}' ); ?> + +<?php echo __( 'Customer details:' ) ?> +{{ Appointment.customer_information_summary }} \ No newline at end of file diff --git a/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions-meta.php b/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions-meta.php new file mode 100644 index 0000000..161e1a8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions-meta.php @@ -0,0 +1,74 @@ +<style> + +.table-wrapper { + font-family: monospace; +} +table { + border-collapse: collapse; + width: 100%; +} + +table, th, td { + border: 1px solid black; +} + +th, td { + max-width: 30rem; +} + +td pre { + max-width: 100%; + white-space: pre-wrap; + word-wrap: break-word; +} + +thead th { + background-color: #f5f5f5; + position: sticky; + top: 0; + z-index: 10; + box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4); +} + +th, td { + padding: 8px 12px; +} + +th { + background-color: #f2f2f2; +} +</style> + +<div class="table-wrapper"> + <h1>SSA revisions_meta</h1> + <table> + <thead> + <tr> + <?php foreach (array_keys($revisions_meta[0]) as $header): ?> + <th> + <?php echo htmlspecialchars($header); ?> + </th> + <?php endforeach; ?> + </tr> + </thead> + <tbody> + <?php foreach ($revisions_meta as $item): ?> + <tr> + <?php foreach ($item as $value): ?> + <td> + <?php + if (is_array($value)) { + echo '<pre>'; + echo htmlspecialchars(json_encode($value, JSON_PRETTY_PRINT)); + echo '</pre>'; + } else { + echo htmlspecialchars($value); + } + ?> + </td> + <?php endforeach; ?> + </tr> + <?php endforeach; ?> + </tbody> + </table> +</div> diff --git a/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions.php b/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions.php new file mode 100644 index 0000000..6ec6217 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/templates/ssa-logs/revisions.php @@ -0,0 +1,73 @@ +<style> + +.table-wrapper { + font-family: monospace; +} +table { + border-collapse: collapse; + width: 100%; +} + +table, th, td { + border: 1px solid black; +} + +thead th { + background-color: #f5f5f5; + position: sticky; + top: 0; + z-index: 10; + box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4); +} + +th, td { + padding: 8px 12px; +} + +th { + background-color: #f2f2f2; +} +</style> + +<div class="table-wrapper"> + <h1>SSA Revisions</h1> + <table> + <thead> + <tr> + <?php foreach (array_keys($revisions[0]) as $key => $header): ?> + <th <?php if (strtolower($header) == "stack_trace") echo 'style="min-width: 150em;"'; ?> > + <?php echo htmlspecialchars($header); ?> + </th> + <?php endforeach; ?> + </tr> + </thead> + <tbody> + <?php foreach ($revisions as $item): ?> + <tr> + <?php foreach ($item as $key => $value): ?> + <td> + <?php + if($key == 'stack_trace'){ + $lines = explode('#', json_encode($value)); + $formattedOutput = ""; + + foreach ($lines as $line) { + if (trim($line) != '') { + $formattedOutput .= "#" . $line . "\n"; + } + } + + echo nl2br($formattedOutput); + } else if (is_array($value)) { + echo htmlspecialchars(json_encode($value)); + } else { + echo htmlspecialchars($value); + } + ?> + </td> + <?php endforeach; ?> + </tr> + <?php endforeach; ?> + </tbody> + </table> +</div> diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/autoload.php b/wp-content/plugins/simply-schedule-appointments/vendor/autoload.php new file mode 100644 index 0000000..8a6d9b3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/autoload.php @@ -0,0 +1,22 @@ +<?php + +// autoload.php @generated by Composer + +if (PHP_VERSION_ID < 50600) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + throw new RuntimeException($err); +} + +require_once __DIR__ . '/composer/autoload_real.php'; + +return ComposerAutoloaderInitac976778682823519fec1635a03c7f12::getLoader(); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/ClassLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/ClassLoader.php new file mode 100644 index 0000000..7824d8f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/ClassLoader.php @@ -0,0 +1,579 @@ +<?php + +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Jordi Boggiano <j.boggiano@seld.be> + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array<string, array<string, int>> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array<string, list<string>> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list<string> + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array<string, array<string, list<string>>> + */ + private $prefixesPsr0 = array(); + /** + * @var list<string> + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array<string, string> + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array<string, bool> + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array<string, self> + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array<string, list<string>> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array<string, list<string>> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list<string> + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list<string> + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array<string, string> Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array<string, string> $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array<string, self> + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/InstalledVersions.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..2052022 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/InstalledVersions.php @@ -0,0 +1,396 @@ +<?php + +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to + * @internal + */ + private static $selfDir = null; + + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null + */ + private static $installed; + + /** + * @var bool + */ + private static $installedIsLocalDir; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + + // when using reload, we disable the duplicate protection to ensure that self::$installed data is + // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not, + // so we have to assume it does not, and that may result in duplicate data being returned when listing + // all installed packages for example + self::$installedIsLocalDir = false; + } + + /** + * @return string + */ + private static function getSelfDir() + { + if (self::$selfDir === null) { + self::$selfDir = strtr(__DIR__, '\\', '/'); + } + + return self::$selfDir; + } + + /** + * @return array[] + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + $copiedLocalDir = false; + + if (self::$canGetVendors) { + $selfDir = self::getSelfDir(); + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + $vendorDir = strtr($vendorDir, '\\', '/'); + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require $vendorDir.'/composer/installed.php'; + self::$installedByVendor[$vendorDir] = $required; + $installed[] = $required; + if (self::$installed === null && $vendorDir.'/composer' === $selfDir) { + self::$installed = $required; + self::$installedIsLocalDir = true; + } + } + if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) { + $copiedLocalDir = true; + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array() && !$copiedLocalDir) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_classmap.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..3885b22 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_classmap.php @@ -0,0 +1,17 @@ +<?php + +// autoload_classmap.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_files.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_files.php new file mode 100644 index 0000000..813d481 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_files.php @@ -0,0 +1,19 @@ +<?php + +// autoload_files.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', + '794a8c4f11f45485d800443266f99e7a' => $vendorDir . '/league/period/src/functions_include.php', + '89efb1254ef2d1c5d80096acd12c4098' => $vendorDir . '/twig/twig/src/Resources/core.php', + 'ffecb95d45175fd40f75be8a23b34f90' => $vendorDir . '/twig/twig/src/Resources/debug.php', + 'c7baa00073ee9c61edf148c51917cfb4' => $vendorDir . '/twig/twig/src/Resources/escaper.php', + 'f844ccf1d25df8663951193c3fc307c8' => $vendorDir . '/twig/twig/src/Resources/string_loader.php', +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_namespaces.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..b32d2ab --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_namespaces.php @@ -0,0 +1,10 @@ +<?php + +// autoload_namespaces.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( + 'NSquared\\SSA\\Vendor\\' => array($baseDir . '/includes/third-party'), +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_psr4.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..5522fe1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_psr4.php @@ -0,0 +1,15 @@ +<?php + +// autoload_psr4.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( + 'Twig\\' => array($vendorDir . '/twig/twig/src'), + 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'League\\Period\\' => array($vendorDir . '/league/period/src'), +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_real.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_real.php new file mode 100644 index 0000000..1d1fd61 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_real.php @@ -0,0 +1,50 @@ +<?php + +// autoload_real.php @generated by Composer + +class ComposerAutoloaderInitac976778682823519fec1635a03c7f12 +{ + private static $loader; + + public static function loadClassLoader($class) + { + if ('Composer\Autoload\ClassLoader' === $class) { + require __DIR__ . '/ClassLoader.php'; + } + } + + /** + * @return \Composer\Autoload\ClassLoader + */ + public static function getLoader() + { + if (null !== self::$loader) { + return self::$loader; + } + + require __DIR__ . '/platform_check.php'; + + spl_autoload_register(array('ComposerAutoloaderInitac976778682823519fec1635a03c7f12', 'loadClassLoader'), true, true); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); + spl_autoload_unregister(array('ComposerAutoloaderInitac976778682823519fec1635a03c7f12', 'loadClassLoader')); + + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInitac976778682823519fec1635a03c7f12::getInitializer($loader)); + + $loader->register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInitac976778682823519fec1635a03c7f12::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_static.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_static.php new file mode 100644 index 0000000..31647a0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/autoload_static.php @@ -0,0 +1,98 @@ +<?php + +// autoload_static.php @generated by Composer + +namespace Composer\Autoload; + +class ComposerStaticInitac976778682823519fec1635a03c7f12 +{ + public static $files = array ( + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', + '794a8c4f11f45485d800443266f99e7a' => __DIR__ . '/..' . '/league/period/src/functions_include.php', + '89efb1254ef2d1c5d80096acd12c4098' => __DIR__ . '/..' . '/twig/twig/src/Resources/core.php', + 'ffecb95d45175fd40f75be8a23b34f90' => __DIR__ . '/..' . '/twig/twig/src/Resources/debug.php', + 'c7baa00073ee9c61edf148c51917cfb4' => __DIR__ . '/..' . '/twig/twig/src/Resources/escaper.php', + 'f844ccf1d25df8663951193c3fc307c8' => __DIR__ . '/..' . '/twig/twig/src/Resources/string_loader.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'T' => + array ( + 'Twig\\' => 5, + ), + 'S' => + array ( + 'Symfony\\Polyfill\\Php81\\' => 23, + 'Symfony\\Polyfill\\Php80\\' => 23, + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Ctype\\' => 23, + ), + 'L' => + array ( + 'League\\Period\\' => 14, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Twig\\' => + array ( + 0 => __DIR__ . '/..' . '/twig/twig/src', + ), + 'Symfony\\Polyfill\\Php81\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php81', + ), + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'League\\Period\\' => + array ( + 0 => __DIR__ . '/..' . '/league/period/src', + ), + ); + + public static $prefixesPsr0 = array ( + 'N' => + array ( + 'NSquared\\SSA\\Vendor\\' => + array ( + 0 => __DIR__ . '/../..' . '/includes/third-party', + ), + ), + ); + + public static $classMap = array ( + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitac976778682823519fec1635a03c7f12::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitac976778682823519fec1635a03c7f12::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitac976778682823519fec1635a03c7f12::$prefixesPsr0; + $loader->classMap = ComposerStaticInitac976778682823519fec1635a03c7f12::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.json b/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.json new file mode 100644 index 0000000..e53e882 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.json @@ -0,0 +1,637 @@ +{ + "packages": [ + { + "name": "league/period", + "version": "4.12.0", + "version_normalized": "4.12.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/period.git", + "reference": "766e9dddabbbef7d9655efd857ce977f8541b596" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/period/zipball/766e9dddabbbef7d9655efd857ce977f8541b596", + "reference": "766e9dddabbbef7d9655efd857ce977f8541b596", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2.0 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.19 || ~v3.4.0", + "phpstan/phpstan": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.0.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "time": "2022-02-21T08:41:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Period\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "Time range API for PHP", + "homepage": "http://period.thephpleague.com", + "keywords": [ + "boundaries", + "calendar", + "collection", + "date", + "dateinterval", + "dateperiod", + "datetime", + "gap", + "intersections", + "interval", + "period", + "range", + "schedule", + "sequence", + "time", + "timeline", + "unions" + ], + "support": { + "docs": "https://period.thephpleague.com", + "issues": "https://github.com/thephpleague/period/issues", + "source": "https://github.com/thephpleague/period" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "install-path": "../league/period" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.4", + "version_normalized": "2.5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2024-09-25T14:11:13+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/deprecation-contracts" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "version_normalized": "1.33.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2024-09-09T11:45:10+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "version_normalized": "1.33.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2024-12-23T08:48:59+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "version_normalized": "1.33.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "time": "2025-01-02T08:10:11+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.33.0", + "version_normalized": "1.33.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "time": "2024-09-09T11:45:10+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php81" + }, + { + "name": "twig/twig", + "version": "v3.11.3", + "version_normalized": "3.11.3.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "time": "2024-11-07T12:34:41+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.11.3" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "install-path": "../twig/twig" + }, + { + "name": "woocommerce/action-scheduler", + "version": "3.9.3", + "version_normalized": "3.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/woocommerce/action-scheduler.git", + "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/c58cdbab17651303d406cd3b22cf9d75c71c986c", + "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5", + "woocommerce/woocommerce-sniffs": "0.1.0", + "wp-cli/wp-cli": "~2.5.0", + "yoast/phpunit-polyfills": "^2.0" + }, + "time": "2025-07-15T09:32:30+00:00", + "type": "wordpress-plugin", + "extra": { + "scripts-description": { + "test": "Run unit tests", + "phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer", + "phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier" + } + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "description": "Action Scheduler for WordPress and WooCommerce", + "homepage": "https://actionscheduler.org/", + "support": { + "issues": "https://github.com/woocommerce/action-scheduler/issues", + "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.3" + }, + "install-path": "../woocommerce/action-scheduler" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.php new file mode 100644 index 0000000..7d8d0be --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/installed.php @@ -0,0 +1,95 @@ +<?php return array( + 'root' => array( + 'name' => '__root__', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'da1243bc84ca77ba8958f264110d16e80837c034', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'da1243bc84ca77ba8958f264110d16e80837c034', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'league/period' => array( + 'pretty_version' => '4.12.0', + 'version' => '4.12.0.0', + 'reference' => '766e9dddabbbef7d9655efd857ce977f8541b596', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/period', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.5.4', + 'version' => '2.5.4.0', + 'reference' => '605389f2a7e5625f273b53960dc46aeaf9c62918', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.33.0', + 'version' => '1.33.0.0', + 'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.33.0', + 'version' => '1.33.0.0', + 'reference' => '6d857f4d76bd4b343eac26d6b539585d2bc56493', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.33.0', + 'version' => '1.33.0.0', + 'reference' => '0cc9dd0f17f61d8131e7df6b84bd344899fe2608', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-php81' => array( + 'pretty_version' => 'v1.33.0', + 'version' => '1.33.0.0', + 'reference' => '4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php81', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'twig/twig' => array( + 'pretty_version' => 'v3.11.3', + 'version' => '3.11.3.0', + 'reference' => '3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../twig/twig', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'woocommerce/action-scheduler' => array( + 'pretty_version' => '3.9.3', + 'version' => '3.9.3.0', + 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/composer/platform_check.php b/wp-content/plugins/simply-schedule-appointments/vendor/composer/platform_check.php new file mode 100644 index 0000000..2a9ec55 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/composer/platform_check.php @@ -0,0 +1,25 @@ +<?php + +// platform_check.php @generated by Composer + +$issues = array(); + +if (!(PHP_VERSION_ID >= 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + throw new \RuntimeException( + 'Composer detected issues in your platform: ' . implode(' ', $issues) + ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/LICENSE new file mode 100644 index 0000000..40a92a9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 ignace nyamagana butera + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/autoload.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/autoload.php new file mode 100644 index 0000000..ddce22d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/autoload.php @@ -0,0 +1,18 @@ +<?php + +require __DIR__.'/src/functions_include.php'; + +spl_autoload_register(function ($className) { + + $prefix = 'League\Period\\'; + if (0 !== strpos($className, $prefix)) { + return; + } + + $file = __DIR__.'/src/'.str_replace('\\', '/', substr($className, strlen($prefix))).'.php'; + if (!is_readable($file)) { + return; + } + + require $file; +}); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/phpstan.neon b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/phpstan.neon new file mode 100644 index 0000000..26c79de --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/phpstan.neon @@ -0,0 +1,37 @@ +includes: + - vendor/phpstan/phpstan-strict-rules/rules.neon + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-phpunit/rules.neon +parameters: + checkGenericClassInNonGenericObjectType: false + checkMissingIterableValueType: false + ignoreErrors: + - message: '#Argument of an invalid type DateInterval supplied for foreach, only iterables are supported.#' + path: src/Duration.php + - message: '#Strict comparison using === between false and DateInterval will always evaluate to false.#' + path: src/Duration.php + - message: '#^Variable property access on (.*)?.#' + path: src/Duration.php + - message: '#Parameter \#1 ...\$intervals of class League\\Period\\Sequence constructor expects League\\Period\\Period, League\\Period\\Period\|null given.#' + path: src/Period.php + - message: '#Parameter \#2 \$endDate of class League\\Period\\Period constructor expects DateTimeInterface\|int\|string, DateTimeInterface\|null given.#' + path: src/Period.php + - message: '#Parameter \#1 \$year_or_datepoint of function League\\Period\\(.*) expects DateTimeInterface\|int\|string, array given.#' + path: src/FunctionTest.php + - message: '#Parameter \#1 \$datetime of class League\\Period\\Datepoint constructor expects string, int\|string given.#' + path: src/Datepoint.php + - message: '#Parameter \#1 \$datetime of class DateTimeImmutable constructor expects string, int\|string given.#' + path: src/Period.php + - message: '#Parameter \#(1|2) \$duration of function League\\Period\\(.*) expects DateInterval\|int\|string, array given.#' + path: src/FunctionTest.php + - message: '#Parameter \#1 \$datepoint of function League\\Period\\(.*) expects DateTimeInterface\|int\|string, array given.#' + path: src/FunctionTest.php + - message: '#Instanceof between League\\Period\\Sequence and League\\Period\\Sequence will always evaluate to true.#' + path: src/Chart/Dataset.php + - message: '#Only numeric types are allowed in post-increment, string given.#' + path: src/Chart/LatinLetter.php + - message: '#Variable method call on League\\Period.#' + path: src/DurationRelationTest.php + - message: '#Generator expects value type string, string\|false given.#' + path: src/Chart/ReverseLabel.php + reportUnmatchedIgnoredErrors: true diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/AffixLabel.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/AffixLabel.php new file mode 100644 index 0000000..897e4b9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/AffixLabel.php @@ -0,0 +1,121 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function preg_replace; + +final class AffixLabel implements LabelGenerator +{ + /** + * @var LabelGenerator + */ + private $labelGenerator; + + /** + * @var string + */ + private $prefix = ''; + + /** + * @var string + */ + private $suffix = ''; + + /** + * New instance. + */ + public function __construct(LabelGenerator $labelGenerator, string $prefix = '', string $suffix = '') + { + $this->labelGenerator = $labelGenerator; + $this->prefix = $this->filterString($prefix); + $this->suffix = $this->filterString($suffix); + } + + private function filterString(string $str): string + { + return (string) preg_replace("/[\r\n]/", '', $str); + } + + /** + * {@inheritdoc} + */ + public function generate(int $nbLabels): \Iterator + { + foreach ($this->labelGenerator->generate($nbLabels) as $key => $label) { + yield $key => $this->prefix.$label.$this->suffix; + } + } + + /** + * {@inheritdoc} + */ + public function format(string $label): string + { + return $this->prefix.$this->labelGenerator->format($label).$this->suffix; + } + + /** + * Returns the suffix. + */ + public function suffix(): string + { + return $this->suffix; + } + + /** + * Returns the prefix. + */ + public function prefix(): string + { + return $this->prefix; + } + + /** + * Return an instance with the suffix. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the suffix. + */ + public function withSuffix(string $suffix): self + { + $suffix = $this->filterString($suffix); + if ($suffix === $this->suffix) { + return $this; + } + + $clone = clone $this; + $clone->suffix = $suffix; + + return $clone; + } + + /** + * Return an instance with the prefix. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the prefix. + */ + public function withPrefix(string $prefix): self + { + $prefix = $this->filterString($prefix); + if ($prefix === $this->prefix) { + return $this; + } + + $clone = clone $this; + $clone->prefix = $prefix; + + return $clone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Chart.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Chart.php new file mode 100644 index 0000000..94ec0ac --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Chart.php @@ -0,0 +1,25 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +/** + * An interface to draw a dataset of intervals. + */ +interface Chart +{ + /** + * Visualizes one or more intervals provided via a Dataset object. + */ + public function stroke(Data $dataset): void; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ConsoleOutput.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ConsoleOutput.php new file mode 100644 index 0000000..81b63f1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ConsoleOutput.php @@ -0,0 +1,124 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function array_keys; +use function chr; +use function fflush; +use function fwrite; +use function implode; +use function preg_replace; +use function preg_replace_callback; +use function stripos; +use function strtolower; +use const PHP_EOL; +use const PHP_OS; + +final class ConsoleOutput implements Output +{ + private const REGEXP_POSIX_PLACEHOLDER = '/(\s+)/msi'; + + private const POSIX_COLOR_CODES = [ + self::COLOR_DEFAULT => '0', + self::COLOR_BLACK => '30', + self::COLOR_RED => '31', + self::COLOR_GREEN => '32', + self::COLOR_YELLOW => '33', + self::COLOR_BLUE => '34', + self::COLOR_MAGENTA => '35', + self::COLOR_CYAN => '36', + self::COLOR_WHITE => '37', + ]; + + /** + * @var resource + */ + private $stream; + + /** + * Stdout constructor. + * + * @param resource|mixed $resource + */ + public function __construct($resource) + { + if (!is_resource($resource)) { + throw new \TypeError(sprintf('Argument passed must be a stream resource, %s given', gettype($resource))); + } + + if ('stream' !== ($type = get_resource_type($resource))) { + throw new \TypeError(sprintf('Argument passed must be a stream resource, %s resource given', $type)); + } + + $this->stream = $resource; + } + + /** + * {@inheritDoc} + */ + public function writeln(string $message = '', string $color = self::COLOR_DEFAULT): void + { + $line = $this->format($this->colorize($message, $color)).PHP_EOL; + fwrite($this->stream, $line); + fflush($this->stream); + } + + /** + * Colorizes the given string. + */ + private function colorize(string $characters, string $color): string + { + if (!isset(self::POSIX_COLOR_CODES[strtolower($color)])) { + return $characters; + } + + return "<<$color>>$characters<<".Output::COLOR_DEFAULT.'>>'; + } + + /** + * Returns a formatted line. + */ + private function format(string $str): string + { + static $formatter; + if (null === $formatter) { + $formatter = $this->formatter(); + } + + static $regexp; + if (null === $regexp) { + $regexp = ',<<\s*((('.implode('|', array_keys(self::POSIX_COLOR_CODES)).')(\s*))+)>>,Umsi'; + } + + return (string) preg_replace_callback($regexp, $formatter, $str); + } + + /** + * Return a writer formatter depending on the OS. + */ + private function formatter(): callable + { + if (0 !== stripos(PHP_OS, 'WIN')) { + return function (array $matches): string { + $str = (string) preg_replace(self::REGEXP_POSIX_PLACEHOLDER, ';', (string) $matches[1]); + + return chr(27).'['.strtr($str, self::POSIX_COLOR_CODES).'m'; + }; + } + + return function (array $matches): string { + return (string) $matches[0]; + }; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Data.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Data.php new file mode 100644 index 0000000..c2cd3cc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Data.php @@ -0,0 +1,77 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use League\Period\Period; +use League\Period\Sequence; + +interface Data extends \Countable, \IteratorAggregate, \JsonSerializable +{ + /** + * Returns the number of pairs. + */ + public function count(): int; + + /** + * Returns the pairs. + * + * @return \Iterator<int, array{0: string, 1: Sequence}> + */ + public function getIterator(): \Iterator; + + /** + * @return array<int, array{label:string, item:Sequence}>. + */ + public function jsonSerialize(): array; + + /** + * Tells whether the instance is empty. + */ + public function isEmpty(): bool; + + /** + * @return string[] + */ + public function labels(): iterable; + + /** + * @return Sequence[] + */ + public function items(): iterable; + + /** + * Returns the dataset boundaries. + */ + public function boundaries(): ?Period; + + /** + * Returns the label maximum length. + */ + public function labelMaxLength(): int; + + /** + * Add a new pair to the collection. + * + * @param object|string $label a scalar or a stringable object (implementing __toString method). + * @param Period|Sequence $item + * + * @throws \TypeError If the label or the item type are not supported. + */ + public function append($label, $item): void; + + /** + * Add a collection of pairs to the collection. + */ + public function appendAll(iterable $pairs): void; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Dataset.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Dataset.php new file mode 100644 index 0000000..371ee93 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Dataset.php @@ -0,0 +1,215 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use League\Period\Period; +use League\Period\Sequence; +use function array_column; +use function count; +use function gettype; +use function is_scalar; +use function method_exists; +use function strlen; + +final class Dataset implements Data +{ + /** + * @var array<int, array{0:string, 1:Sequence}>. + */ + private $pairs = []; + + /** + * @var int + */ + private $labelMaxLength = 0; + + /** + * @var Period|null + */ + private $boundaries; + + /** + * constructor. + */ + public function __construct(iterable $pairs = []) + { + $this->appendAll($pairs); + } + + /** + * Creates a new collection from a countable iterable structure. + * + * @param array|(\Countable&iterable) $items + * @param ?LabelGenerator $labelGenerator + */ + public static function fromItems($items, ?LabelGenerator $labelGenerator = null): self + { + $nbItems = count($items); + $items = (function () use ($items): \Iterator { + foreach ($items as $key => $value) { + yield $key => $value; + } + })(); + + $labelGenerator = $labelGenerator ?? new LatinLetter(); + + $pairs = new \MultipleIterator(\MultipleIterator::MIT_NEED_ALL|\MultipleIterator::MIT_KEYS_ASSOC); + $pairs->attachIterator($labelGenerator->generate($nbItems), '0'); + $pairs->attachIterator($items, '1'); + + return new self($pairs); + } + + /** + * Creates a new collection from a generic iterable structure. + */ + public static function fromIterable(iterable $iterable): self + { + $dataset = new self(); + foreach ($iterable as $label => $item) { + $dataset->append($label, $item); + } + + return $dataset; + } + + /** + * {@inheritDoc} + */ + public function appendAll(iterable $pairs): void + { + foreach ($pairs as [$label, $item]) { + $this->append($label, $item); + } + } + + /** + * {@inheritDoc} + */ + public function append($label, $item): void + { + if (!is_scalar($label) && !method_exists($label, '__toString')) { + throw new \TypeError('The label passed to '.__METHOD__.' must be a scalar or an stringable object, '.gettype($label).' given.'); + } + + if ($item instanceof Period) { + $item = new Sequence($item); + } + + if (!$item instanceof Sequence) { + throw new \TypeError('The item passed to '.__METHOD__.' must be a '.Period::class.' or a '.Sequence::class.' instance, '.gettype($item).' given.'); + } + + $label = (string) $label; + $this->setLabelMaxLength($label); + $this->setBoundaries($item); + + $this->pairs[] = [$label, $item]; + } + + /** + * Computes the label maximum length for the dataset. + */ + private function setLabelMaxLength(string $label): void + { + $labelLength = strlen($label); + if ($this->labelMaxLength < $labelLength) { + $this->labelMaxLength = $labelLength; + } + } + + /** + * Computes the Period boundary for the dataset. + */ + private function setBoundaries(Sequence $sequence): void + { + if (null === $this->boundaries) { + $this->boundaries = $sequence->length(); + + return; + } + + $this->boundaries = $this->boundaries->merge(...$sequence); + } + + /** + * {@inheritDoc} + */ + public function count(): int + { + return count($this->pairs); + } + + /** + * {@inheritDoc} + */ + public function getIterator(): \Iterator + { + foreach ($this->pairs as $pair) { + yield $pair; + } + } + + /** + * {@inheritDoc} + */ + public function jsonSerialize(): array + { + $mapper = static function (array $pair): array { + return ['label' => $pair[0], 'item' => $pair[1]]; + }; + + return array_map($mapper, $this->pairs); + } + + /** + * {@inheritDoc} + */ + public function isEmpty(): bool + { + return [] === $this->pairs; + } + + /** + * {@inheritDoc} + */ + public function labels(): array + { + return array_column($this->pairs, 0); + } + + /** + * {@inheritDoc} + */ + public function items(): array + { + return array_column($this->pairs, 1); + } + + /** + * {@inheritDoc} + */ + public function boundaries(): ?Period + { + return $this->boundaries; + } + + /** + * {@inheritDoc} + */ + public function labelMaxLength(): int + { + return $this->labelMaxLength; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/DecimalNumber.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/DecimalNumber.php new file mode 100644 index 0000000..84bbfcf --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/DecimalNumber.php @@ -0,0 +1,92 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +final class DecimalNumber implements LabelGenerator +{ + /** + * @var int + */ + private $int; + + /** + * New instance. + */ + public function __construct(int $int = 1) + { + if (0 >= $int) { + $int = 1; + } + + $this->int = $int; + } + + /** + * {@inheritdoc} + */ + public function generate(int $nbLabels): \Iterator + { + if (0 >= $nbLabels) { + return; + } + + $count = 0; + $end = $this->int + $nbLabels; + $value = $this->int; + while ($value < $end) { + yield $count => $this->format((string) $value); + + ++$count; + ++$value; + } + } + + /** + * {@inheritdoc} + */ + public function format(string $label): string + { + return $label; + } + + /** + * Returns the starting Letter. + */ + public function startingAt(): int + { + return $this->int; + } + + /** + * Return an instance with the starting Letter. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the starting Letter. + */ + public function startsWith(int $int): self + { + if (0 >= $int) { + $int = 1; + } + + if ($int === $this->int) { + return $this; + } + + $clone = clone $this; + $clone->int = $int; + + return $clone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChart.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChart.php new file mode 100644 index 0000000..2da3787 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChart.php @@ -0,0 +1,122 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use League\Period\Period; +use League\Period\Sequence; +use function array_fill; +use function array_splice; +use function ceil; +use function count; +use function floor; +use function implode; +use function str_pad; +use function str_repeat; + +/** + * A class to output a Dataset via a Gantt Bar graph. + */ +final class GanttChart implements Chart +{ + /** + * @var GanttChartConfig + */ + private $config; + + /** + * @var float + */ + private $start; + + /** + * @var float + */ + private $unit; + + /** + * New instance. + * + * @param ?GanttChartConfig $config + */ + public function __construct(?GanttChartConfig $config = null) + { + $this->config = $config ?? new GanttChartConfig(); + } + + /** + * @inheritDoc + * + * The generated Gantt Bar can be represented like the following but depends on the configuration used + * + * A [--------) + * B [--) + * C [-----) + * D [---------------) + * RESULT [-) [--) [-) + */ + public function stroke(Data $dataset): void + { + $this->setChartScale($dataset); + $padding = $this->config->labelAlign(); + $gap = str_repeat(' ', $this->config->gapSize()); + $leftMargin = str_repeat(' ', $this->config->leftMarginSize()); + $lineCharacters = array_fill(0, $this->config->width(), $this->config->space()); + $labelMaxLength = $dataset->labelMaxLength(); + $colorCodeIndexes = $this->config->colors(); + $colorCodeCount = count($colorCodeIndexes); + $output = $this->config->output(); + foreach ($dataset as $offset => [$label, $item]) { + $colorIndex = $colorCodeIndexes[$offset % $colorCodeCount]; + $labelPortion = str_pad($label, $labelMaxLength, ' ', $padding); + $dataPortion = $this->drawDataPortion($item, $lineCharacters); + $output->writeln($leftMargin.$labelPortion.$gap.$dataPortion, $colorIndex); + } + } + + /** + * Sets the scale to render the line. + */ + private function setChartScale(Data $dataset): void + { + $this->start = 0; + $this->unit = 1; + $boundaries = $dataset->boundaries(); + if (null !== $boundaries) { + $this->start = $boundaries->getStartDate()->getTimestamp(); + $this->unit = $this->config->width() / $boundaries->timeDuration(); + } + } + + /** + * Convert a Dataset item into a graph data portion. + * + * @param string[] $lineCharacters + */ + private function drawDataPortion(Sequence $item, array $lineCharacters): string + { + $reducer = function (array $lineCharacters, Period $period): array { + $startIndex = (int) floor(($period->getStartDate()->getTimestamp() - $this->start) * $this->unit); + $endIndex = (int) ceil(($period->getEndDate()->getTimestamp() - $this->start) * $this->unit); + $periodLength = $endIndex - $startIndex; + + array_splice($lineCharacters, $startIndex, $periodLength, array_fill(0, $periodLength, $this->config->body())); + $lineCharacters[$startIndex] = $period->isStartIncluded() ? $this->config->startIncluded() : $this->config->startExcluded(); + $lineCharacters[$endIndex - 1] = $period->isEndIncluded() ? $this->config->endIncluded() : $this->config->endExcluded(); + + return $lineCharacters; + }; + + return implode('', $item->reduce($reducer, $lineCharacters)); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChartConfig.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChartConfig.php new file mode 100644 index 0000000..37c7534 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/GanttChartConfig.php @@ -0,0 +1,516 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function array_filter; +use function array_map; +use function mb_convert_encoding; +use function mb_strlen; +use function preg_match; +use function preg_replace; +use function sprintf; +use const STDOUT; +use const STR_PAD_BOTH; +use const STR_PAD_LEFT; +use const STR_PAD_RIGHT; + +/** + * A class to configure the console output settings. + */ +final class GanttChartConfig +{ + private const REGEXP_UNICODE = '/\\\\u(?<unicode>[0-9A-F]{1,4})/i'; + + public const ALIGN_LEFT = STR_PAD_RIGHT; + + public const ALIGN_RIGHT = STR_PAD_LEFT; + + public const ALIGN_CENTER = STR_PAD_BOTH; + + /** + * @var Output + */ + private $output; + + /** + * @var string[] + */ + private $colors = [Output::COLOR_DEFAULT]; + + /** + * @var int + */ + private $width = 60; + + /** + * @var string + */ + private $endExcludedChar = ')'; + + /** + * @var string + */ + private $endIncludedChar = ']'; + + /** + * @var string + */ + private $startExcludedChar = '('; + + /** + * @var string + */ + private $startIncludedChar = '['; + + /** + * @var string + */ + private $body = '-'; + + /** + * @var string + */ + private $space = ' '; + + /** + * @var int + */ + private $leftMarginSize = 1; + + /** + * @var int + */ + private $gapSize = 1; + + /** + * @var int + */ + private $alignLabel = self::ALIGN_LEFT; + + /** + * New instance. + * + * @param ?Output $output + */ + public function __construct(?Output $output = null) + { + $this->output = $output ?? new ConsoleOutput(STDOUT); + } + + /** + * Create a Cli Renderer to Display the millipede in Rainbow. + * + * @param ?Output $output + */ + public static function createFromRandom(?Output $output = null): self + { + $index = array_rand(Output::COLORS); + + $config = new self($output); + $config->colors = [Output::COLORS[$index]]; + + return $config; + } + + /** + * Create a Cli Renderer to Display the millipede in Rainbow. + * + * @param ?Output $output + */ + public static function createFromRainbow(?Output $output = null): self + { + $config = new self($output); + $config->colors = Output::COLORS; + + return $config; + } + + /** + * Returns the Output class. + */ + public function output(): Output + { + return $this->output; + } + + /** + * Retrieves the start excluded block character. + */ + public function startExcluded(): string + { + return $this->startExcludedChar; + } + /** + * Retrieves the start included block character. + */ + public function startIncluded(): string + { + return $this->startIncludedChar; + } + + /** + * Retrieves the excluded end block character. + */ + public function endExcluded(): string + { + return $this->endExcludedChar; + } + + /** + * Retrieves the excluded end block character. + */ + public function endIncluded(): string + { + return $this->endIncludedChar; + } + + /** + * Retrieves the row width. + */ + public function width(): int + { + return $this->width; + } + + /** + * Retrieves the body block character. + */ + public function body(): string + { + return $this->body; + } + + /** + * Retrieves the row space character. + */ + public function space(): string + { + return $this->space; + } + + /** + * The selected colors for each rows. + * + * @return string[] + */ + public function colors(): array + { + return $this->colors; + } + + /** + * Retrieves the left margin size before the label name. + */ + public function leftMarginSize(): int + { + return $this->leftMarginSize; + } + + /** + * Retrieves the gap size between the label and the line. + */ + public function gapSize(): int + { + return $this->gapSize; + } + + /** + * Returns how label should be aligned. + */ + public function labelAlign(): int + { + return $this->alignLabel; + } + + /** + * Return an instance with the start excluded pattern. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified start excluded character. + */ + public function withStartExcluded(string $startExcludedChar): self + { + $startExcludedChar = $this->filterPattern($startExcludedChar, 'startExcluded'); + if ($startExcludedChar === $this->startExcludedChar) { + return $this; + } + + $clone = clone $this; + $clone->startExcludedChar = $startExcludedChar; + + return $clone; + } + + /** + * Filter the submitted string. + * + * @throws \InvalidArgumentException if the pattern is invalid + */ + private function filterPattern(string $str, string $part): string + { + if (1 === mb_strlen($str)) { + return $str; + } + + if (1 === preg_match(self::REGEXP_UNICODE, $str)) { + return $this->filterUnicodeCharacter($str); + } + + throw new \InvalidArgumentException(sprintf('The %s pattern must be a single character', $part)); + } + + /** + * Decode unicode characters. + * + * @see http://stackoverflow.com/a/37415135/2316257 + * + * @throws \InvalidArgumentException if the character is not valid. + */ + private function filterUnicodeCharacter(string $str): string + { + $replaced = (string) preg_replace(self::REGEXP_UNICODE, '&#x$1;', $str); + $result = mb_convert_encoding($replaced, 'UTF-16', 'HTML-ENTITIES'); + $result = mb_convert_encoding($result, 'UTF-8', 'UTF-16'); + if (1 === mb_strlen($result)) { + return $result; + } + + throw new \InvalidArgumentException(sprintf('The given string `%s` is not a valid unicode string', $str)); + } + + /** + * Return an instance with a new output object. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified output class. + */ + public function withOutput(Output $output): self + { + $clone = clone $this; + $clone->output = $output; + + return $clone; + } + + /** + * Return an instance with the start included pattern. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified start included character. + */ + public function withStartIncluded(string $startIncludedChar): self + { + $startIncludedChar = $this->filterPattern($startIncludedChar, 'startIncluded'); + if ($startIncludedChar === $this->startIncludedChar) { + return $this; + } + + $clone = clone $this; + $clone->startIncludedChar = $startIncludedChar; + + return $clone; + } + + /** + * Return an instance with the end excluded pattern. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified end excluded character. + */ + public function withEndExcluded(string $endExcludedChar): self + { + $endExcludedChar = $this->filterPattern($endExcludedChar, 'endExcluded'); + if ($endExcludedChar === $this->endExcludedChar) { + return $this; + } + + $clone = clone $this; + $clone->endExcludedChar = $endExcludedChar; + + return $clone; + } + + /** + * Return an instance with the end included pattern. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified end included character. + */ + public function withEndIncluded(string $endIncludedChar): self + { + $endIncludedChar = $this->filterPattern($endIncludedChar, 'endIncluded'); + if ($endIncludedChar === $this->endIncludedChar) { + return $this; + } + + $clone = clone $this; + $clone->endIncludedChar = $endIncludedChar; + + return $clone; + } + + /** + * Return an instance with the specified row width. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified width. + */ + public function withWidth(int $width): self + { + if ($width < 10) { + $width = 10; + } + + if ($width === $this->width) { + return $this; + } + + $clone = clone $this; + $clone->width = $width; + + return $clone; + } + + /** + * Return an instance with the specified body block. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified body pattern. + */ + public function withBody(string $bodyChar): self + { + $bodyChar = $this->filterPattern($bodyChar, 'body'); + if ($bodyChar === $this->body) { + return $this; + } + + $clone = clone $this; + $clone->body = $bodyChar; + + return $clone; + } + + /** + * Return an instance with the space pattern. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified space character. + */ + public function withSpace(string $spaceChar): self + { + $spaceChar = $this->filterPattern($spaceChar, 'space'); + if ($spaceChar === $this->space) { + return $this; + } + + $clone = clone $this; + $clone->space = $spaceChar; + + return $clone; + } + + /** + * Return an instance with a new color palette. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified color palette. + * + * @param string... $colors + */ + public function withColors(string ...$colors): self + { + $filter = static function ($value): bool { + return in_array($value, Output::COLORS, true); + }; + + $colors = array_filter(array_map('strtolower', $colors), $filter); + if ([] === $colors) { + $colors = [Output::COLOR_DEFAULT]; + } + + if ($colors === $this->colors) { + return $this; + } + + $clone = clone $this; + $clone->colors = $colors; + + return $clone; + } + + /** + * Return an instance with a new left margin size. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified left margin size. + */ + public function withLeftMarginSize(int $leftMarginSize): self + { + if ($leftMarginSize === $this->leftMarginSize) { + return $this; + } + + if ($leftMarginSize < 0) { + $leftMarginSize = 1; + } + + $clone = clone $this; + $clone->leftMarginSize = $leftMarginSize; + + return $clone; + } + /** + * Return an instance with a new gap size. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified gap size. + */ + public function withGapSize(int $gapSize): self + { + if ($gapSize === $this->gapSize) { + return $this; + } + + if ($gapSize < 0) { + $gapSize = 1; + } + + $clone = clone $this; + $clone->gapSize = $gapSize; + + return $clone; + } + + /** + * Return an instance with a left padding. + * + * This method MUST retain the state of the current instance, and return + * an instance that set a left padding to the line label. + */ + public function withLabelAlign(int $align): self + { + if (!in_array($align, [STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH], true)) { + $align = STR_PAD_RIGHT; + } + + if ($this->alignLabel === $align) { + return $this; + } + + $clone = clone $this; + $clone->alignLabel = $align; + + return $clone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LabelGenerator.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LabelGenerator.php new file mode 100644 index 0000000..a58360e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LabelGenerator.php @@ -0,0 +1,29 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +interface LabelGenerator +{ + /** + * Returns the labels to associate with all items. + * + * @return \Iterator<string> + */ + public function generate(int $nbLabels): \Iterator; + + /** + * Returns a formatted label according to the generator rules. + */ + public function format(string $label): string; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LatinLetter.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LatinLetter.php new file mode 100644 index 0000000..f6ee074 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/LatinLetter.php @@ -0,0 +1,100 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function preg_match; +use function trim; + +final class LatinLetter implements LabelGenerator +{ + /** + * @var string + */ + private $str; + + /** + * New instance. + */ + public function __construct(string $str = 'A') + { + $this->str = $this->filterLetter($str); + } + + public function filterLetter(string $str): string + { + $str = trim($str); + if ('' === $str) { + return '0'; + } + + if (1 !== preg_match('/^[A-Za-z]+$/', $str)) { + return 'A'; + } + + return $str; + } + + /** + * {@inheritdoc} + */ + public function format(string $label): string + { + return $label; + } + + /** + * {@inheritdoc} + */ + public function generate(int $nbLabels): \Iterator + { + if (0 >= $nbLabels) { + $nbLabels = 0; + } + + $count = 0; + $letter = $this->str; + while ($count < $nbLabels) { + yield $count => $letter++; + + ++$count; + } + } + + /** + * Returns the starting Letter. + */ + public function startingAt(): string + { + return $this->str; + } + + /** + * Return an instance with the starting Letter. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the starting Letter. + */ + public function startsWith(string $str): self + { + $str = $this->filterLetter($str); + if ($str === $this->str) { + return $this; + } + + $clone = clone $this; + $clone->str = $str; + + return $clone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Output.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Output.php new file mode 100644 index 0000000..d35a784 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/Output.php @@ -0,0 +1,40 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +interface Output +{ + public const COLOR_DEFAULT = 'reset'; + public const COLOR_BLACK = 'black'; + public const COLOR_RED = 'red'; + public const COLOR_GREEN = 'green'; + public const COLOR_YELLOW = 'yellow'; + public const COLOR_BLUE = 'blue'; + public const COLOR_MAGENTA = 'magenta'; + public const COLOR_CYAN = 'cyan'; + public const COLOR_WHITE = 'white'; + public const COLORS = [ + self::COLOR_DEFAULT, + self::COLOR_BLACK, + self::COLOR_RED, + self::COLOR_GREEN, + self::COLOR_YELLOW, + self::COLOR_BLUE, + self::COLOR_MAGENTA, + self::COLOR_CYAN, + self::COLOR_WHITE, + ]; + + public function writeln(string $message, string $color = self::COLOR_DEFAULT): void; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ReverseLabel.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ReverseLabel.php new file mode 100644 index 0000000..030a8f3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/ReverseLabel.php @@ -0,0 +1,53 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function iterator_to_array; + +final class ReverseLabel implements LabelGenerator +{ + /** + * @var LabelGenerator + */ + private $labelGenerator; + + /** + * New instance. + */ + public function __construct(LabelGenerator $labelGenerator) + { + $this->labelGenerator = $labelGenerator; + } + + /** + * {@inheritdoc} + */ + public function generate(int $nbLabels): \Iterator + { + $iterable = $this->labelGenerator->generate($nbLabels); + $data = iterator_to_array($iterable, false); + + for (end($data); null !== ($key = key($data)); prev($data)) { + yield $key => current($data); + } + } + + /** + * {@inheritdoc} + */ + public function format(string $label): string + { + return $this->labelGenerator->format($label); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/RomanNumber.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/RomanNumber.php new file mode 100644 index 0000000..9ee8d68 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Chart/RomanNumber.php @@ -0,0 +1,171 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period\Chart; + +use function in_array; +use function strtolower; +use function strtoupper; + +final class RomanNumber implements LabelGenerator +{ + public const UPPER = 1; + public const LOWER = 2; + private const CHARACTER_MAP = [ + 'M' => 1000, 'CM' => 900, 'D' => 500, + 'CD' => 400, 'C' => 100, 'XC' => 90, + 'L' => 50, 'XL' => 40, 'X' => 10, + 'IX' => 9, 'V' => 5, 'IV' => 4, + 'I' => 1, + ]; + + /** + * @var DecimalNumber + */ + private $decimalNumber; + + /** + * @var int + */ + private $case; + + /** + * New instance. + */ + public function __construct(DecimalNumber $decimalNumber, int $case = self::UPPER) + { + $this->decimalNumber = $decimalNumber; + $this->case = $this->filterLetterCase($case); + } + + /** + * filter letter case state. + */ + private function filterLetterCase(int $case): int + { + if (!in_array($case, [self::UPPER, self::LOWER], true)) { + return self::UPPER; + } + + return $case; + } + + /** + * {@inheritdoc} + */ + public function generate(int $nbLabels): \Iterator + { + foreach ($this->decimalNumber->generate($nbLabels) as $key => $label) { + yield $key => $this->convert($label); + } + } + + /** + * {@inheritdoc} + */ + public function format(string $label): string + { + if (self::UPPER === $this->case) { + return strtoupper($label); + } + + return strtolower($label); + } + + /** + * Convert a integer number into its roman representation. + * + * @see https://stackoverflow.com/a/15023547 + */ + private function convert(string $number): string + { + $retVal = ''; + while ($number > 0) { + foreach (self::CHARACTER_MAP as $roman => $int) { + if ($number >= $int) { + $number -= $int; + $retVal .= $roman; + break; + } + } + } + + if (self::LOWER === $this->case) { + return strtolower($retVal); + } + + return $retVal; + } + + /** + * Returns the starting Letter. + */ + public function startingAt(): int + { + return $this->decimalNumber->startingAt(); + } + + /** + * Tells whether the roman letter is upper cased. + */ + public function isUpper(): bool + { + return self::UPPER === $this->case; + } + + /** + * Tells whether the roman letter is lower cased. + */ + public function isLower(): bool + { + return self::LOWER === $this->case; + } + + /** + * Return an instance with the starting Letter. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the starting Letter. + */ + public function startsWith(int $int): self + { + $labelGenerator = $this->decimalNumber->startsWith($int); + if ($labelGenerator === $this->decimalNumber) { + return $this; + } + + $clone = clone $this; + $clone->decimalNumber = $labelGenerator; + + return $clone; + } + + /** + * Return an instance with the new letter case setting. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the letter case setting. + */ + public function withLetterCase(int $case): self + { + $case = $this->filterLetterCase($case); + if ($case === $this->case) { + return $this; + } + + $clone = clone $this; + $clone->case = $case; + + return $clone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Datepoint.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Datepoint.php new file mode 100644 index 0000000..9648dbb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Datepoint.php @@ -0,0 +1,474 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +use DateInterval; +use DateTime; +use DateTimeImmutable; +use DateTimeInterface; +use DateTimeZone; +use ReturnTypeWillChange; +use function filter_var; +use function intdiv; +use const FILTER_VALIDATE_INT; + +/** + * League Period Datepoint. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 4.2.0 + */ +final class Datepoint extends DateTimeImmutable +{ + /** + * Returns a position in time expressed as a DateTimeImmutable object. + * + * A datepoint can be + * <ul> + * <li>a DateTimeInterface object + * <li>a integer interpreted as a timestamp + * <li>a string parsable by DateTime::__construct + * </ul> + * + * @param DateTimeInterface|Datepoint|int|string $datepoint a position in time + */ + public static function create($datepoint): self + { + if ($datepoint instanceof DateTimeInterface) { + return new self($datepoint->format('Y-m-d H:i:s.u'), $datepoint->getTimezone()); + } + + $timestamp = $datepoint; + if (is_int($timestamp) && false !== ($timestamp = filter_var($datepoint, FILTER_VALIDATE_INT))) { + return new self('@'.$timestamp); + } + + return new self($datepoint); + } + + /** + * @inheritDoc + * + * @param string $format + * @param string $datetime + * @param DateTimeZone $timezone + * + * @return static|false + */ + #[ReturnTypeWillChange] + public static function createFromFormat($format, $datetime, ?DateTimeZone $timezone = null) + { + $datepoint = parent::createFromFormat($format, $datetime, $timezone); + if (false !== $datepoint) { + return self::create($datepoint); + } + + return $datepoint; + } + + /** + * @inheritDoc + * + * @param DateTime $datetime + * + * @return static + */ + public static function createFromMutable($datetime): self + { + return self::create(parent::createFromMutable($datetime)); + } + + /************************************************** + * interval constructors + **************************************************/ + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint second + * - the duration is equal to 1 second + */ + public function second(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $datepoint = $this->setTime( + (int) $this->format('H'), + (int) $this->format('i'), + (int) $this->format('s') + ); + + return new Period($datepoint, $datepoint->add(new DateInterval('PT1S')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::second() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint second + * - the duration is equal to 1 second + */ + public function getSecond(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->second($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint minute + * - the duration is equal to 1 minute + */ + public function minute(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $datepoint = $this->setTime((int) $this->format('H'), (int) $this->format('i'), 0); + + return new Period($datepoint, $datepoint->add(new DateInterval('PT1M')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::minute() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint minute + * - the duration is equal to 1 minute + */ + public function getMinute(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->minute(); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint hour + * - the duration is equal to 1 hour + */ + public function hour(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $datepoint = $this->setTime((int) $this->format('H'), 0); + + return new Period($datepoint, $datepoint->add(new DateInterval('PT1H')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::hour() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint hour + * - the duration is equal to 1 hour + */ + public function getHour(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->hour($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint day + * - the duration is equal to 1 day + */ + public function day(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $datepoint = $this->setTime(0, 0); + + return new Period($datepoint, $datepoint->add(new DateInterval('P1D')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::day() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint day + * - the duration is equal to 1 day + */ + public function getDay(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->day($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint iso week + * - the duration is equal to 7 days + */ + public function isoWeek(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $startDate = $this + ->setTime(0, 0) + ->setISODate((int) $this->format('o'), (int) $this->format('W'), 1); + + return new Period($startDate, $startDate->add(new DateInterval('P7D')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::isoWeek() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint iso week + * - the duration is equal to 7 days + */ + public function getIsoWeek(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->isoWeek($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint month + * - the duration is equal to 1 month + */ + public function month(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $startDate = $this + ->setTime(0, 0) + ->setDate((int) $this->format('Y'), (int) $this->format('n'), 1); + + return new Period($startDate, $startDate->add(new DateInterval('P1M')), $boundaryType); + } + + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::month() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint month + * - the duration is equal to 1 month + */ + public function getMonth(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->month($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint quarter + * - the duration is equal to 3 months + */ + public function quarter(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $startDate = $this + ->setTime(0, 0) + ->setDate((int) $this->format('Y'), (intdiv((int) $this->format('n'), 3) * 3) + 1, 1); + + return new Period($startDate, $startDate->add(new DateInterval('P3M')), $boundaryType); + } + + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::quarter() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint quarter + * - the duration is equal to 3 months + */ + public function getQuarter(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->quarter($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint semester + * - the duration is equal to 6 months + */ + public function semester(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $startDate = $this + ->setTime(0, 0) + ->setDate((int) $this->format('Y'), (intdiv((int) $this->format('n'), 6) * 6) + 1, 1); + + return new Period($startDate, $startDate->add(new DateInterval('P6M')), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::semester() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint semester + * - the duration is equal to 6 months + */ + public function getSemester(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->semester($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint year + * - the duration is equal to 1 year + */ + public function year(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $year = (int) $this->format('Y'); + $datepoint = $this->setTime(0, 0); + + return new Period($datepoint->setDate($year, 1, 1), $datepoint->setDate(++$year, 1, 1), $boundaryType); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::year() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint year + * - the duration is equal to 1 year + */ + public function getYear(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->year($boundaryType); + } + + /** + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint iso year + * - the duration is equal to 1 iso year + */ + public function isoYear(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + $year = (int) $this->format('o'); + $datepoint = $this->setTime(0, 0); + + return new Period( + $datepoint->setISODate($year, 1, 1), + $datepoint->setISODate(++$year, 1, 1), + $boundaryType + ); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Datepoint::isoYear() + * + * Returns a Period instance. + * + * - the starting datepoint represents the beginning of the current datepoint iso year + * - the duration is equal to 1 iso year + */ + public function getIsoYear(string $boundaryType = Period::INCLUDE_START_EXCLUDE_END): Period + { + return $this->isoYear($boundaryType); + } + + /************************************************** + * relation methods + **************************************************/ + + /** + * Tells whether the datepoint is before the interval. + */ + public function isBefore(Period $interval): bool + { + return $interval->isAfter($this); + } + + /** + * Tell whether the datepoint borders on start the interval. + */ + public function bordersOnStart(Period $interval): bool + { + return $this == $interval->getStartDate() && !$interval->isStartIncluded(); + } + + /** + * Tells whether the datepoint starts the interval. + */ + public function isStarting(Period $interval): bool + { + return $interval->isStartedBy($this); + } + + /** + * Tells whether the datepoint is contained within the interval. + */ + public function isDuring(Period $interval): bool + { + return $interval->contains($this); + } + + /** + * Tells whether the datepoint ends the interval. + */ + public function isEnding(Period $interval): bool + { + return $interval->isEndedBy($this); + } + + /** + * Tells whether the datepoint borders on end the interval. + */ + public function bordersOnEnd(Period $interval): bool + { + return $this == $interval->getEndDate() && !$interval->isEndIncluded(); + } + + /** + * Tells whether the datepoint abuts the interval. + */ + public function abuts(Period $interval): bool + { + return $this->bordersOnEnd($interval) || $this->bordersOnStart($interval); + } + + /** + * Tells whether the datepoint is after the interval. + */ + public function isAfter(Period $interval): bool + { + return $interval->isBefore($this); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Duration.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Duration.php new file mode 100644 index 0000000..2143321 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Duration.php @@ -0,0 +1,435 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +use DateInterval; +use DateTimeImmutable; +use DateTimeInterface; +use TypeError; +use function filter_var; +use function gettype; +use function is_string; +use function method_exists; +use function preg_match; +use function property_exists; +use function rtrim; +use function sprintf; +use function str_pad; +use const FILTER_VALIDATE_FLOAT; + +/** + * League Period Duration. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 4.2.0 + */ +final class Duration extends DateInterval +{ + private const REGEXP_DATEINTERVAL_WORD_SPEC = '/^P\S*$/'; + + private const REGEXP_DATEINTERVAL_SPEC = '@^P + (?!$) # making sure there something after the interval delimiter + (?:(\d+Y)?(\d+M)?(\d+W)?(\d+D)?)? # day, week, month, year part + (?:T # interval time delimiter + (?!$) # making sure there something after the interval time delimiter + (?:\d+H)?(?:\d+M)?(?:\d+S)? # hour, minute, second part + )? + $@x'; + + private const REGEXP_MICROSECONDS_INTERVAL_SPEC = '@^(?<interval>.*)(\.|,)(?<fraction>\d{1,6})S$@'; + + private const REGEXP_MICROSECONDS_DATE_SPEC = '@^(?<interval>.*)(\.)(?<fraction>\d{1,6})$@'; + + private const REGEXP_CHRONO_FORMAT = '@^ + (?<sign>\+|-)? # optional sign + ((?<hour>\d+):)? # optional hour + ((?<minute>\d+):)(?<second>\d+) # required minute and second + (\.(?<fraction>\d{1,6}))? # optional fraction + $@x'; + + private const REGEXP_TIME_FORMAT = '@^ + (?<sign>\+|-)? # optional sign + (?<hour>\d+)(:(?<minute>\d+)) # required hour and minute + (:(?<second>\d+)(\.(?<fraction>\d{1,6}))?)? # optional second and fraction + $@x'; + + /** + * New instance. + * + * Returns a new instance from an Interval specification + */ + public function __construct(string $interval_spec) + { + if (1 === preg_match(self::REGEXP_MICROSECONDS_INTERVAL_SPEC, $interval_spec, $matches)) { + parent::__construct($matches['interval'].'S'); + $this->f = (float) str_pad($matches['fraction'], 6, '0') / 1e6; + return; + } + + if (1 === preg_match(self::REGEXP_MICROSECONDS_DATE_SPEC, $interval_spec, $matches)) { + parent::__construct($matches['interval']); + $this->f = (float) str_pad($matches['fraction'], 6, '0') / 1e6; + return; + } + + parent::__construct($interval_spec); + } + + /** + * Returns a continuous portion of time between two datepoints expressed as a DateInterval object. + * + * The duration can be + * <ul> + * <li>an Period object</li> + * <li>a DateInterval object</li> + * <li>an integer interpreted as the duration expressed in seconds.</li> + * <li>a string parsable by DateInterval::createFromDateString</li> + * </ul> + * + * @param mixed $duration a continuous portion of time + * + * @throws TypeError if the duration type is not a supported + */ + public static function create($duration): self + { + if ($duration instanceof Period) { + return self::createFromDateInterval($duration->getDateInterval()); + } + + if ($duration instanceof DateInterval) { + return self::createFromDateInterval($duration); + } + + $seconds = filter_var($duration, FILTER_VALIDATE_FLOAT); + if (false !== $seconds) { + return self::createFromSeconds($seconds); + } + + if (is_object($duration) && method_exists($duration, '__toString')) { + $duration = (string) $duration; + } + + if (!is_string($duration)) { + throw new TypeError(sprintf('%s expects parameter 1 to be string, %s given', __METHOD__, gettype($duration))); + } + + if (1 === preg_match(self::REGEXP_CHRONO_FORMAT, $duration)) { + return self::createFromChronoString($duration); + } + + if (1 === preg_match(self::REGEXP_DATEINTERVAL_WORD_SPEC, $duration)) { + if (1 === preg_match(self::REGEXP_DATEINTERVAL_SPEC, $duration)) { + return new self($duration); + } + + throw new Exception(sprintf('Unknown or bad format (%s)', $duration)); + } + + try { + $instance = self::createFromDateString($duration); + } catch (\Exception $exception) { + throw new Exception(sprintf('Unknown or bad format (%s)', $duration), 0, $exception); + } + + if (false !== $instance) { + return $instance; + } + + throw new Exception(sprintf('Unknown or bad format (%s)', $duration)); + } + + /** + * Creates a new instance from a DateInterval object. + * + * the second value will be overflow up to the hour time unit. + */ + public static function fromDateInterval(DateInterval $duration): self + { + $new = new self('PT0S'); + foreach ($duration as $name => $value) { + if (property_exists($new, $name)) { + $new->$name = $value; + } + } + + return $new; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Duration::createFromDateInterval() + * + * Creates a new instance from a DateInterval object. + * + * the second value will be overflow up to the hour time unit. + */ + public static function createFromDateInterval(DateInterval $duration): self + { + return self::fromDateInterval($duration); + } + + public static function fromSeconds(float $seconds): self + { + $invert = 0 > $seconds; + if ($invert) { + $seconds = $seconds * -1; + } + + $secondsInt = (int) $seconds; + $fraction = (int) (($seconds - $secondsInt) * 1e6); + $minute = intdiv($secondsInt, 60); + $secondsInt = $secondsInt - ($minute * 60); + $hour = intdiv($minute, 60); + $minute = $minute - ($hour * 60); + + return self::createFromTimeUnits([ + 'hour' => (string) $hour, + 'minute' => (string) $minute, + 'second' => (string) $secondsInt, + 'fraction' => (string) $fraction, + 'sign' => $invert ? '-' : '+', + ]); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Duration::createFromSeconds() + * + * Creates a new instance from a seconds. + * + * the second value will be overflow up to the hour time unit. + */ + public static function createFromSeconds(float $seconds): self + { + return self::fromSeconds($seconds); + } + + /** + * Creates a new instance from a timer string representation. + * + * @throws Exception + */ + public static function fromChronoString(string $duration): self + { + if (1 !== preg_match(self::REGEXP_CHRONO_FORMAT, $duration, $units)) { + throw new Exception(sprintf('Unknown or bad format (%s)', $duration)); + } + + if ('' === $units['hour']) { + $units['hour'] = '0'; + } + + return self::createFromTimeUnits($units); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Duration::fromChronoString() + * + * Creates a new instance from a timer string representation. + * + * @throws Exception + */ + public static function createFromChronoString(string $duration): self + { + return self::fromChronoString($duration); + } + + /** + * Creates a new instance from a time string representation following RDBMS specification. + * + * @throws Exception + */ + public static function fromTimeString(string $duration): self + { + if (1 !== preg_match(self::REGEXP_TIME_FORMAT, $duration, $units)) { + throw new Exception(sprintf('Unknown or bad format (%s)', $duration)); + } + + return self::createFromTimeUnits($units); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Duration::fromTimeString() + * + * Creates a new instance from a time string representation following RDBMS specification. + * + * @throws Exception + */ + public static function createFromTimeString(string $duration): self + { + return self::fromTimeString($duration); + } + + /** + * Creates an instance from DateInterval units. + * + * @param array<string,string> $units + */ + private static function createFromTimeUnits(array $units): self + { + $units = $units + ['hour' => '0', 'minute' => '0', 'second' => '0', 'fraction' => '0', 'sign' => '+']; + + $units['fraction'] = str_pad($units['fraction'] ?? '000000', 6, '0'); + + $expression = $units['hour'].' hours ' + .$units['minute'].' minutes ' + .$units['second'].' seconds ' + .$units['fraction'].' microseconds'; + + /** @var Duration $instance */ + $instance = self::createFromDateString($expression); + if ('-' === $units['sign']) { + $instance->invert = 1; + } + + return $instance; + } + + /** + * @inheritDoc + * + * @param string $duration a date with relative parts + * + * @return self|false + */ + public static function fromDateString($duration) + { + $duration = parent::createFromDateString($duration); + if (false === $duration) { + return false; + } + + $new = new self('PT0S'); + foreach ($duration as $name => $value) { + $new->$name = $value; + } + + return $new; + } + + /** + * @inheritDoc + * + * @param string $duration a date with relative parts + * + * @return self|false + */ + #[\ReturnTypeWillChange] + public static function createFromDateString($duration) + { + return self::fromDateString($duration); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.5.0 This method will be removed in the next major point release + * @see Duration::format + * + * Returns the ISO8601 interval string representation. + * + * Microseconds fractions are included + */ + public function __toString(): string + { + $date = 'P'; + foreach (['Y' => 'y', 'M' => 'm', 'D' => 'd'] as $key => $value) { + if (0 !== $this->$value) { + $date .= '%'.$value.$key; + } + } + + $time = 'T'; + foreach (['H' => 'h', 'M' => 'i'] as $key => $value) { + if (0 !== $this->$value) { + $time .= '%'.$value.$key; + } + } + + if (0.0 !== $this->f) { + $second = $this->s + $this->f; + if (0 > $this->s) { + $second = $this->s - $this->f; + } + + $second = rtrim(sprintf('%f', $second), '0'); + + return $this->format($date.$time).$second.'S'; + } + + if (0 !== $this->s) { + $time .= '%sS'; + + return $this->format($date.$time); + } + + if ('T' !== $time) { + return $this->format($date.$time); + } + + if ('P' !== $date) { + return $this->format($date); + } + + return 'PT0S'; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.6.0 This method will be removed in the next major point release + * @see Duration::adjustedTo + * + * Returns a new instance with recalculate time and date segments to remove carry over points. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the time and date segments recalculate to remove + * carry over points. + * + * @param DateTimeInterface|string|int $reference_date a reference datepoint {@see \League\Period\Datepoint::create} + */ + public function withoutCarryOver($reference_date): self + { + return $this->adjustedTo($reference_date); + } + + /** + * Returns a new instance with recalculate properties according to a given datepoint. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the time and date segments recalculate to remove + * carry over points. + * + * @param DateTimeInterface|string|int $reference_date a reference datepoint {@see \League\Period\Datepoint::create} + */ + public function adjustedTo($reference_date): self + { + if (!$reference_date instanceof DateTimeImmutable) { + $reference_date = Datepoint::create($reference_date); + } + + return self::create($reference_date->diff($reference_date->add($this))); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Exception.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Exception.php new file mode 100644 index 0000000..8bc4f03 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Exception.php @@ -0,0 +1,25 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +/** + * League Period Base Exception. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 4.0.0 + */ +class Exception extends \Exception +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/InvalidIndex.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/InvalidIndex.php new file mode 100644 index 0000000..740fb02 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/InvalidIndex.php @@ -0,0 +1,25 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +/** + * Exception thrown by the Sequence class. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 4.1.0 + */ +class InvalidIndex extends Exception +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Period.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Period.php new file mode 100644 index 0000000..b2c4682 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Period.php @@ -0,0 +1,1299 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +use DateInterval; +use DatePeriod; +use DateTimeImmutable; +use DateTimeInterface; +use DateTimeZone; +use JsonSerializable; +use function array_filter; +use function array_keys; +use function implode; +use function sprintf; + +/** + * A immutable value object class to manipulate Time interval. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 1.0.0 + */ +final class Period implements JsonSerializable +{ + private const ISO8601_FORMAT = 'Y-m-d\TH:i:s.u\Z'; + private const BOUNDARY_TYPE = [ + self::INCLUDE_START_EXCLUDE_END => 1, + self::INCLUDE_ALL => 1, + self::EXCLUDE_START_INCLUDE_END => 1, + self::EXCLUDE_ALL => 1, + ]; + + public const INCLUDE_START_EXCLUDE_END = '[)'; + public const EXCLUDE_START_INCLUDE_END = '(]'; + public const EXCLUDE_ALL = '()'; + public const INCLUDE_ALL = '[]'; + + /** @var DateTimeImmutable */ + private $startDate; + + /** @var DateTimeImmutable */ + private $endDate; + + /** @var string */ + private $boundaryType; + + /** + * Creates a new instance. + * + * @param Datepoint|DateTimeInterface|int|string $startDate the starting datepoint + * @param Datepoint|DateTimeInterface|int|string $endDate the ending datepoint + * + * @throws Exception If $startDate is greater than $endDate + */ + public function __construct($startDate, $endDate, string $boundaryType = self::INCLUDE_START_EXCLUDE_END) + { + $startDate = self::filterDatepoint($startDate); + $endDate = self::filterDatepoint($endDate); + if ($startDate > $endDate) { + throw new Exception('The ending datepoint must be greater or equal to the starting datepoint'); + } + + if (!isset(self::BOUNDARY_TYPE[$boundaryType])) { + throw new Exception(sprintf( + 'The boundary type `%s` is invalid. The only valid values are %s', + $boundaryType, + '`'.implode('`, `', array_keys(self::BOUNDARY_TYPE)).'`' + )); + } + + $this->startDate = $startDate; + $this->endDate = $endDate; + $this->boundaryType = $boundaryType; + } + + /** + * Returns a DateTimeImmutable instance. + * + * @param Datepoint|DateTimeInterface|int|string $datepoint a Datepoint + */ + private static function filterDatepoint($datepoint): DateTimeImmutable + { + if ($datepoint instanceof DateTimeImmutable) { + return $datepoint; + } + + if ($datepoint instanceof DateTimeInterface) { + return new DateTimeImmutable($datepoint->format('Y-m-d H:i:s.u'), $datepoint->getTimezone()); + } + + $timestamp = $datepoint; + if (is_int($timestamp) || false !== ($timestamp = filter_var($datepoint, FILTER_VALIDATE_INT))) { + return new DateTimeImmutable('@'.$timestamp); + } + + return new DateTimeImmutable($datepoint); + } + + /** + * Returns a DateInterval instance. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + private static function filterDuration($duration): DateInterval + { + if ($duration instanceof DateInterval) { + return $duration; + } + + if ($duration instanceof self) { + return $duration->dateInterval(); + } + + return Duration::create($duration); + } + + /************************************************** + * Named constructors + **************************************************/ + + /** + * @inheritDoc + */ + public static function __set_state(array $interval) + { + return new self( + $interval['startDate'], + $interval['endDate'], + $interval['boundaryType'] ?? self::INCLUDE_START_EXCLUDE_END + ); + } + + /** + * Creates new instance from a starting date endpoint and a duration. + * + * @param Datepoint|DateTimeInterface|int|string $startDate the starting date endpoint + * @param DateInterval|Duration|string|int $duration a Duration + */ + public static function after($startDate, $duration, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $startDate = self::filterDatepoint($startDate); + + return new self($startDate, $startDate->add(self::filterDuration($duration)), $boundaryType); + } + + /** + * Creates new instance from a ending date endpoint and a duration. + * + * @param Datepoint|DateTimeInterface|int|string $endDate the ending date endpoint + * @param DateInterval|Duration|string|int $duration a Duration + */ + public static function before($endDate, $duration, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $endDate = self::filterDatepoint($endDate); + + return new self($endDate->sub(self::filterDuration($duration)), $endDate, $boundaryType); + } + + /** + * Creates new instance where the given duration is simultaneously + * subtracted from and added to the date endpoint. + * + * @param Datepoint|DateTimeInterface|int|string $datepoint a Date endpoint + * @param DateInterval|Duration|string|int $duration a Duration + */ + public static function around($datepoint, $duration, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $datepoint = self::filterDatepoint($datepoint); + $duration = self::filterDuration($duration); + + return new self($datepoint->sub($duration), $datepoint->add($duration), $boundaryType); + } + + /** + * Creates new instance from a DatePeriod. + */ + public static function fromDatePeriod(DatePeriod $datePeriod, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + return new self($datePeriod->getStartDate(), $datePeriod->getEndDate(), $boundaryType); + } + + /** + * Creates new instance for a specific year. + */ + public static function fromYear(int $year, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $startDate = (new DateTimeImmutable())->setDate($year, 1, 1)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P1Y')), $boundaryType); + } + + /** + * Creates new instance for a specific ISO year. + */ + public static function fromIsoYear(int $year, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + return new self( + (new DateTimeImmutable())->setISODate($year, 1)->setTime(0, 0), + (new DateTimeImmutable())->setISODate(++$year, 1)->setTime(0, 0), + $boundaryType + ); + } + + /** + * Creates new instance for a specific year and semester. + */ + public static function fromSemester(int $year, int $semester = 1, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $month = (($semester - 1) * 6) + 1; + $startDate = (new DateTimeImmutable())->setDate($year, $month, 1)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P6M')), $boundaryType); + } + + /** + * Creates new instance for a specific year and quarter. + */ + public static function fromQuarter(int $year, int $quarter = 1, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $month = (($quarter - 1) * 3) + 1; + $startDate = (new DateTimeImmutable())->setDate($year, $month, 1)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P3M')), $boundaryType); + } + + /** + * Creates new instance for a specific year and month. + */ + public static function fromMonth(int $year, int $month = 1, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $startDate = (new DateTimeImmutable())->setDate($year, $month, 1)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P1M')), $boundaryType); + } + + /** + * Creates new instance for a specific ISO8601 week. + */ + public static function fromIsoWeek(int $year, int $week = 1, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $startDate = (new DateTimeImmutable())->setISODate($year, $week, 1)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P7D')), $boundaryType); + } + + /** + * Creates new instance for a specific year, month and day. + */ + public static function fromDay(int $year, int $month = 1, int $day = 1, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + $startDate = (new DateTimeImmutable())->setDate($year, $month, $day)->setTime(0, 0); + + return new self($startDate, $startDate->add(new DateInterval('P1D')), $boundaryType); + } + + /** + * Creates new instance for Datepoint. + */ + public static function fromDatepoint(DateTimeInterface $startDate, DateTimeInterface $endDate, string $boundaryType = self::INCLUDE_START_EXCLUDE_END): self + { + return new self($startDate, $endDate, $boundaryType); + } + + /************************************************** + * Basic getters + **************************************************/ + + /** + * Returns the starting date endpoint. + */ + public function getStartDate(): DateTimeImmutable + { + return $this->startDate; + } + + /** + * Returns the ending date endpoint. + */ + public function getEndDate(): DateTimeImmutable + { + return $this->endDate; + } + + /** + * Returns the instance boundary type. + */ + public function getBoundaryType(): string + { + return $this->boundaryType; + } + + /** + * Returns the instance duration as expressed in seconds. + */ + public function timeDuration(): float + { + return $this->endDate->getTimestamp() - $this->startDate->getTimestamp(); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::timeDuration() + * + * Returns the instance duration as expressed in seconds. + */ + public function getTimestampInterval(): float + { + return $this->timeDuration(); + } + + /** + * Returns the instance duration as a DateInterval object. + */ + public function dateInterval(): DateInterval + { + return $this->startDate->diff($this->endDate); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::dateInterval() + * + * Returns the instance duration as a DateInterval object. + */ + public function getDateInterval(): DateInterval + { + return $this->dateInterval(); + } + + /************************************************** + * String representation + **************************************************/ + + /** + * Returns the string representation as a ISO8601 interval format. + * + * @deprecated 4.10.0 This method will be removed in the next major point release + * @see ::toIso8601() + */ + public function __toString() + { + return $this->toIso8601(); + } + + /** + * Returns the string representation as a ISO8601 interval format. + * + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param ?string $format + */ + public function toIso8601(?string $format = null): string + { + $utc = new DateTimeZone('UTC'); + $format = $format ?? self::ISO8601_FORMAT; + + $startDate = $this->startDate->setTimezone($utc)->format($format); + $endDate = $this->endDate->setTimezone($utc)->format($format); + + return $startDate.'/'.$endDate; + } + + /** + * Returns the JSON representation of an instance. + * + * Based on the JSON representation of dates as + * returned by Javascript Date.toJSON() method. + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + * + * @return array<string> + */ + public function jsonSerialize(): array + { + [$startDate, $endDate] = explode('/', $this->toIso8601(), 2); + + return ['startDate' => $startDate, 'endDate' => $endDate]; + } + + /** + * Returns the mathematical representation of an instance as a left close, right open interval. + * + * @see https://en.wikipedia.org/wiki/Interval_(mathematics)#Notations_for_intervals + * @see https://php.net/manual/en/function.date.php + * @see https://www.postgresql.org/docs/9.3/static/rangetypes.html + * + * @param string $format the format of the outputted date string + */ + public function toIso80000(string $format): string + { + return $this->boundaryType[0] + .$this->startDate->format($format) + .', ' + .$this->endDate->format($format) + .$this->boundaryType[1]; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::toIso80000() + * + * @param string $format the format of the outputted date string + * + * Returns the mathematical representation of an instance as a left close, right open interval. + * + * @see https://en.wikipedia.org/wiki/Interval_(mathematics)#Notations_for_intervals + * @see https://php.net/manual/en/function.date.php + * @see https://www.postgresql.org/docs/9.3/static/rangetypes.html + */ + public function format(string $format): string + { + return $this->toIso80000($format); + } + + /************************************************** + * Boundary related methods + **************************************************/ + + /** + * Tells whether the start datepoint is included in the boundary. + */ + public function isStartIncluded(): bool + { + return '[' === $this->boundaryType[0]; + } + + /** + * Tells whether the start datepoint is excluded from the boundary. + */ + public function isStartExcluded(): bool + { + return '(' === $this->boundaryType[0]; + } + + /** + * Tells whether the end datepoint is included in the boundary. + */ + public function isEndIncluded(): bool + { + return ']' === $this->boundaryType[1]; + } + + /** + * Tells whether the end datepoint is excluded from the boundary. + */ + public function isEndExcluded(): bool + { + return ')' === $this->boundaryType[1]; + } + + /************************************************** + * Duration comparison methods + **************************************************/ + + /** + * Compares two instances according to their duration. + * + * Returns: + * <ul> + * <li> -1 if the current Interval is lesser than the submitted Interval object</li> + * <li> 1 if the current Interval is greater than the submitted Interval object</li> + * <li> 0 if both Interval objects have the same duration</li> + * </ul> + */ + public function durationCompare(self $interval): int + { + return $this->startDate->add($this->dateInterval()) + <=> $this->startDate->add($interval->dateInterval()); + } + + /** + * Tells whether the current instance duration is equal to the submitted one. + */ + public function durationEquals(self $interval): bool + { + return 0 === $this->durationCompare($interval); + } + + /** + * Tells whether the current instance duration is greater than the submitted one. + */ + public function durationGreaterThan(self $interval): bool + { + return 1 === $this->durationCompare($interval); + } + + /** + * Tells whether the current instance duration is less than the submitted one. + */ + public function durationLessThan(self $interval): bool + { + return -1 === $this->durationCompare($interval); + } + + /************************************************** + * Relation methods + **************************************************/ + + /** + * Tells whether an instance is entirely before the specified index. + * + * The index can be a DateTimeInterface object or another Period object. + * + * [--------------------) + * [--------------------) + * + * @param Period|Datepoint|\DateTimeInterface|int|string $index a datepoint or a Period object + */ + public function isBefore($index): bool + { + if ($index instanceof self) { + return $this->endDate < $index->startDate + || ($this->endDate == $index->startDate && $this->boundaryType[1] !== $index->boundaryType[0]); + } + + $datepoint = self::filterDatepoint($index); + + return $this->endDate < $datepoint + || ($this->endDate == $datepoint && ')' === $this->boundaryType[1]); + } + + /** + * Tells whether the current instance end date meets the interval start date. + * + * [--------------------) + * [--------------------) + */ + public function bordersOnStart(self $interval): bool + { + return $this->endDate == $interval->startDate + && '][' !== $this->boundaryType[1].$interval->boundaryType[0]; + } + + /** + * Tells whether two intervals share the same start datepoint + * and the same starting boundary type. + * + * [----------) + * [--------------------) + * + * or + * + * [--------------------) + * [---------) + * + * @param Period|Datepoint|\DateTimeInterface|int|string $index a datepoint or a Period object + */ + public function isStartedBy($index): bool + { + if ($index instanceof self) { + return $this->startDate == $index->startDate + && $this->boundaryType[0] === $index->boundaryType[0]; + } + + $index = self::filterDatepoint($index); + + return $index == $this->startDate && '[' === $this->boundaryType[0]; + } + + /** + * Tells whether an instance is fully contained in the specified interval. + * + * [----------) + * [--------------------) + */ + public function isDuring(self $interval): bool + { + return $interval->containsInterval($this); + } + + /** + * Tells whether an instance fully contains the specified index. + * + * The index can be a DateTimeInterface object or another Period object. + * + * @param Period|Datepoint|\DateTimeInterface|int|string $index a datepoint or a Period object + */ + public function contains($index): bool + { + if ($index instanceof self) { + return $this->containsInterval($index); + } + + return $this->containsDatepoint(self::filterDatepoint($index), $this->boundaryType); + } + + /** + * Tells whether an instance fully contains another instance. + * + * [--------------------) + * [----------) + */ + private function containsInterval(self $interval): bool + { + if ($this->startDate < $interval->startDate && $this->endDate > $interval->endDate) { + return true; + } + + if ($this->startDate == $interval->startDate && $this->endDate == $interval->endDate) { + return $this->boundaryType === $interval->boundaryType || '[]' === $this->boundaryType; + } + + if ($this->startDate == $interval->startDate) { + return ($this->boundaryType[0] === $interval->boundaryType[0] || '[' === $this->boundaryType[0]) + && $this->containsDatepoint($this->startDate->add($interval->getDateInterval()), $this->boundaryType); + } + + if ($this->endDate == $interval->endDate) { + return ($this->boundaryType[1] === $interval->boundaryType[1] || ']' === $this->boundaryType[1]) + && $this->containsDatepoint($this->endDate->sub($interval->getDateInterval()), $this->boundaryType); + } + + return false; + } + + /** + * Tells whether an instance contains a date endpoint. + * + * [------|------------) + */ + private function containsDatepoint(DateTimeInterface $datepoint, string $boundaryType): bool + { + switch ($boundaryType) { + case self::EXCLUDE_ALL: + return $datepoint > $this->startDate && $datepoint < $this->endDate; + case self::INCLUDE_ALL: + return $datepoint >= $this->startDate && $datepoint <= $this->endDate; + case self::EXCLUDE_START_INCLUDE_END: + return $datepoint > $this->startDate && $datepoint <= $this->endDate; + case self::INCLUDE_START_EXCLUDE_END: + default: + return $datepoint >= $this->startDate && $datepoint < $this->endDate; + } + } + + /** + * Tells whether two intervals share the same datepoints. + * + * [--------------------) + * [--------------------) + */ + public function equals(self $interval): bool + { + return $this->startDate == $interval->startDate + && $this->endDate == $interval->endDate + && $this->boundaryType === $interval->boundaryType; + } + + /** + * Tells whether two intervals share the same end datepoint + * and the same ending boundary type. + * + * [----------) + * [--------------------) + * + * or + * + * [--------------------) + * [---------) + * + * @param Period|Datepoint|\DateTimeInterface|int|string $index a datepoint or a Period object + */ + public function isEndedBy($index): bool + { + if ($index instanceof self) { + return $this->endDate == $index->endDate + && $this->boundaryType[1] === $index->boundaryType[1]; + } + + $index = self::filterDatepoint($index); + + return $index == $this->endDate && ']' === $this->boundaryType[1]; + } + + /** + * Tells whether the current instance start date meets the interval end date. + * + * [--------------------) + * [--------------------) + */ + public function bordersOnEnd(self $interval): bool + { + return $interval->bordersOnStart($this); + } + + /** + * Tells whether an interval is entirely after the specified index. + * The index can be a DateTimeInterface object or another Period object. + * + * [--------------------) + * [--------------------) + * + * @param Period|Datepoint|\DateTimeInterface|int|string $index a datepoint or a Period object + */ + public function isAfter($index): bool + { + if ($index instanceof self) { + return $index->isBefore($this); + } + + $datepoint = self::filterDatepoint($index); + return $this->startDate > $datepoint + || ($this->startDate == $datepoint && '(' === $this->boundaryType[0]); + } + + /** + * Tells whether two intervals abuts. + * + * [--------------------) + * [--------------------) + * or + * [--------------------) + * [--------------------) + */ + public function abuts(self $interval): bool + { + return $this->bordersOnStart($interval) || $this->bordersOnEnd($interval); + } + + /** + * Tells whether two intervals overlaps. + * + * [--------------------) + * [--------------------) + */ + public function overlaps(self $interval): bool + { + return !$this->abuts($interval) + && $this->startDate < $interval->endDate + && $this->endDate > $interval->startDate; + } + + /************************************************** + * Manipulating instance duration + **************************************************/ + + /** + * Returns the difference between two instances expressed in seconds. + */ + public function timeDurationDiff(self $interval): float + { + return $this->timeDuration() - $interval->timeDuration(); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::timeDurationDiff() + * + * Returns the difference between two instances expressed in seconds. + */ + public function timestampIntervalDiff(self $interval): float + { + return $this->timeDurationDiff($interval); + } + + /** + * Returns the difference between two instances expressed with a DateInterval object. + */ + public function dateIntervalDiff(self $interval): DateInterval + { + return $this->endDate->diff($this->startDate->add($interval->dateInterval())); + } + + /** + * Allows iteration over a set of dates and times, + * recurring at regular intervals, over the instance. + * + * @see http://php.net/manual/en/dateperiod.construct.php + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function dateRangeForward($duration, int $option = 0): DatePeriod + { + return new DatePeriod($this->startDate, self::filterDuration($duration), $this->endDate, $option); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::dateRangeForward() + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + * + * Allows iteration over a set of dates and times, + * recurring at regular intervals, over the instance. + * + * @see http://php.net/manual/en/dateperiod.construct.php + */ + public function getDatePeriod($duration, int $option = 0): DatePeriod + { + return $this->dateRangeForward($duration, $option); + } + + /** + * Allows iteration over a set of dates and times, + * recurring at regular intervals, over the instance backwards starting from + * the instance ending date endpoint. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function dateRangeBackwards($duration, int $option = 0): iterable + { + $duration = self::filterDuration($duration); + $date = $this->endDate; + if ((bool) ($option & DatePeriod::EXCLUDE_START_DATE)) { + $date = $this->endDate->sub($duration); + } + + while ($date > $this->startDate) { + yield $date; + $date = $date->sub($duration); + } + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::dateRangeBackwards() + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + * + * Allows iteration over a set of dates and times, + * recurring at regular intervals, over the instance backwards starting from + * the instance ending date endpoint. + */ + public function getDatePeriodBackwards($duration, int $option = 0): iterable + { + return $this->dateRangeBackwards($duration, $option); + } + + /** + * Allows splitting an instance in smaller Period objects according to a given interval. + * + * The returned iterable Interval set is ordered so that: + * <ul> + * <li>The first returned object MUST share the starting datepoint of the parent object.</li> + * <li>The last returned object MUST share the ending datepoint of the parent object.</li> + * <li>The last returned object MUST have a duration equal or lesser than the submitted interval.</li> + * <li>All returned objects except for the first one MUST start immediately after the previously returned object</li> + * </ul> + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + * + * @return iterable<Period> + */ + public function splitForward($duration): iterable + { + $duration = self::filterDuration($duration); + /** @var DateTimeImmutable $startDate */ + foreach ($this->dateRangeForward($duration) as $startDate) { + $endDate = $startDate->add($duration); + if ($endDate > $this->endDate) { + $endDate = $this->endDate; + } + + yield new self($startDate, $endDate, $this->boundaryType); + } + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @see Period::splitForward() + * + * Allows splitting an instance in smaller Period objects according to a given interval. + * + * The returned iterable Interval set is ordered so that: + * <ul> + * <li>The first returned object MUST share the starting datepoint of the parent object.</li> + * <li>The last returned object MUST share the ending datepoint of the parent object.</li> + * <li>The last returned object MUST have a duration equal or lesser than the submitted interval.</li> + * <li>All returned objects except for the first one MUST start immediately after the previously returned object</li> + * </ul> + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + * + * @return iterable<Period> + */ + public function split($duration): iterable + { + return $this->splitForward($duration); + } + + /** + * Allows splitting an instance in smaller Period objects according to a given interval. + * + * The returned iterable Period set is ordered so that: + * <ul> + * <li>The first returned object MUST share the ending datepoint of the parent object.</li> + * <li>The last returned object MUST share the starting datepoint of the parent object.</li> + * <li>The last returned object MUST have a duration equal or lesser than the submitted interval.</li> + * <li>All returned objects except for the first one MUST end immediately before the previously returned object</li> + * </ul> + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + * + * @return iterable<Period> + */ + public function splitBackwards($duration): iterable + { + $endDate = $this->endDate; + $duration = self::filterDuration($duration); + do { + $startDate = $endDate->sub($duration); + if ($startDate < $this->startDate) { + $startDate = $this->startDate; + } + yield new self($startDate, $endDate, $this->boundaryType); + + $endDate = $startDate; + } while ($endDate > $this->startDate); + } + + /************************************************** + * Manipulation instance endpoints and bounds + **************************************************/ + + /** + * Returns the computed intersection between two instances as a new instance. + * + * [--------------------) + * ∩ + * [----------) + * = + * [----) + * + * @throws Exception If both objects do not overlaps + */ + public function intersect(self $interval): self + { + if (!$this->overlaps($interval)) { + throw new Exception('Both '.self::class.' objects should overlaps'); + } + + $startDate = $this->startDate; + $endDate = $this->endDate; + $boundaryType = $this->boundaryType; + if ($interval->startDate > $this->startDate) { + $boundaryType[0] = $interval->boundaryType[0]; + $startDate = $interval->startDate; + } + + if ($interval->endDate < $this->endDate) { + $boundaryType[1] = $interval->boundaryType[1]; + $endDate = $interval->endDate; + } + + $intersect = new self($startDate, $endDate, $boundaryType); + if ($intersect->equals($this)) { + return $this; + } + + return $intersect; + } + + /** + * Returns the computed difference between two overlapping instances as + * an array containing Period objects or the null value. + * + * The array will always contains 2 elements: + * + * <ul> + * <li>an NULL filled array if both objects have the same datepoints</li> + * <li>one Period object and NULL if both objects share one datepoint</li> + * <li>two Period objects if both objects share no datepoint</li> + * </ul> + * + * [--------------------) + * \ + * [-----------) + * = + * [--------------) + [-----) + * + * @return array<null|Period> + */ + public function diff(self $interval): array + { + if ($interval->equals($this)) { + return [null, null]; + } + + $intersect = $this->intersect($interval); + $merge = $this->merge($interval); + if ($merge->startDate == $intersect->startDate) { + $first = ')' === $intersect->boundaryType[1] ? '[' : '('; + $boundary = $first.$merge->boundaryType[1]; + + return [$merge->startingOn($intersect->endDate)->boundedBy($boundary), null]; + } + + if ($merge->endDate == $intersect->endDate) { + $last = '(' === $intersect->boundaryType[0] ? ']' : ')'; + $boundary = $merge->boundaryType[0].$last; + + return [$merge->endingOn($intersect->startDate)->boundedBy($boundary), null]; + } + + $last = '(' === $intersect->boundaryType[0] ? ']' : ')'; + $lastBoundary = $merge->boundaryType[0].$last; + + $first = ')' === $intersect->boundaryType[1] ? '[' : '('; + $firstBoundary = $first.$merge->boundaryType[1]; + + return [ + $merge->endingOn($intersect->startDate)->boundedBy($lastBoundary), + $merge->startingOn($intersect->endDate)->boundedBy($firstBoundary), + ]; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.9.0 This method will be removed in the next major point release + * @see Period::subtract + */ + public function substract(self $interval): Sequence + { + return $this->subtract($interval); + } + + /** + * Returns the difference set operation between two intervals as a Sequence. + * The Sequence can contain from 0 to 2 Periods depending on the result of + * the operation. + * + * [--------------------) + * - + * [-----------) + * = + * [--------------) + */ + public function subtract(self $interval): Sequence + { + if (!$this->overlaps($interval)) { + return new Sequence($this); + } + + $filter = function ($item): bool { + return null !== $item && $this->overlaps($item); + }; + + return new Sequence(...array_filter($this->diff($interval), $filter)); + } + + /** + * Returns the computed gap between two instances as a new instance. + * + * [--------------------) + * + + * [----------) + * = + * [---) + * + * @throws Exception If both instance overlaps + */ + public function gap(self $interval): self + { + if ($this->overlaps($interval)) { + throw new Exception('Both '.self::class.' objects must not overlaps'); + } + + $bounds = $this->isEndIncluded() ? '(' : '['; + $bounds .= $interval->isStartIncluded() ? ')' : ']'; + if ($interval->startDate > $this->startDate) { + return new self($this->endDate, $interval->startDate, $bounds); + } + + return new self($interval->endDate, $this->startDate, $this->boundaryType); + } + + /** + * Merges one or more instances to return a new instance. + * The resulting instance represents the largest duration possible. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified new datepoints. + * + * [--------------------) + * + + * [----------) + * = + * [--------------------------) + * + * + * @param Period ...$intervals + */ + public function merge(self ...$intervals): self + { + $carry = $this; + foreach ($intervals as $period) { + if ($carry->startDate > $period->startDate) { + $carry = new self( + $period->startDate, + $carry->endDate, + $period->boundaryType[0].$carry->boundaryType[1] + ); + } + + if ($carry->endDate < $period->endDate) { + $carry = new self( + $carry->startDate, + $period->endDate, + $carry->boundaryType[0].$period->boundaryType[1] + ); + } + } + + return $carry; + } + + + /************************************************** + * Mutation methods + **************************************************/ + + /** + * Returns an instance with the specified starting date endpoint. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified starting date endpoint. + * + * @param Datepoint|DateTimeInterface|int|string $startDate the new starting date endpoint + */ + public function startingOn($startDate): self + { + $startDate = self::filterDatepoint($startDate); + if ($startDate == $this->startDate) { + return $this; + } + + return new self($startDate, $this->endDate, $this->boundaryType); + } + + /** + * Returns an instance with the specified ending date endpoint. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified ending date endpoint. + * + * @param Datepoint|DateTimeInterface|int|string $endDate the new ending date endpoint + */ + public function endingOn($endDate): self + { + $endDate = self::filterDatepoint($endDate); + if ($endDate == $this->endDate) { + return $this; + } + + return new self($this->startDate, $endDate, $this->boundaryType); + } + + /** + * Returns an instance with the specified boundary type. + * + * This method MUST retain the state of the current instance, and return + * an instance with the specified range type. + */ + public function boundedBy(string $bounds): self + { + if ($bounds === $this->boundaryType) { + return $this; + } + + return new self($this->startDate, $this->endDate, $bounds); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Period::boundedBy() + * + * Returns an instance with the specified boundary type. + * + * This method MUST retain the state of the current instance, and return + * an instance with the specified range type. + */ + public function withBoundaryType(string $boundaryType): self + { + return $this->boundedBy($boundaryType); + } + + /** + * Returns a new instance with a new ending date endpoint. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified ending date endpoint. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function withDurationAfterStart($duration): self + { + return $this->endingOn($this->startDate->add(self::filterDuration($duration))); + } + + /** + * Returns a new instance with a new starting date endpoint. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified starting date endpoint. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function withDurationBeforeEnd($duration): self + { + return $this->startingOn($this->endDate->sub(self::filterDuration($duration))); + } + + /** + * Returns a new instance with a new starting datepoint + * moved forward or backward by the given interval. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified starting date endpoint. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function moveStartDate($duration): self + { + return $this->startingOn($this->startDate->add(self::filterDuration($duration))); + } + + /** + * Returns a new instance with a new ending datepoint + * moved forward or backward by the given interval. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified ending date endpoint. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function moveEndDate($duration): self + { + return $this->endingOn($this->endDate->add(self::filterDuration($duration))); + } + + /** + * Returns a new instance where the date endpoints + * are moved forwards or backward simultaneously by the given DateInterval. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified new date endpoints. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function move($duration): self + { + $duration = self::filterDuration($duration); + $interval = new self($this->startDate->add($duration), $this->endDate->add($duration), $this->boundaryType); + if ($this->equals($interval)) { + return $this; + } + + return $interval; + } + + /** + * Returns an instance where the given DateInterval is simultaneously + * subtracted from the starting date endpoint and added to the ending date endpoint. + * + * Depending on the duration value, the resulting instance duration will be expanded or shrinked. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified new date endpoints. + * + * @param Period|DateInterval|Duration|string|int $duration a Duration + */ + public function expand($duration): self + { + $duration = self::filterDuration($duration); + $interval = new self($this->startDate->sub($duration), $this->endDate->add($duration), $this->boundaryType); + if ($this->equals($interval)) { + return $this; + } + + return $interval; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Sequence.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Sequence.php new file mode 100644 index 0000000..19d41ae --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/Sequence.php @@ -0,0 +1,727 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +use ArrayAccess; +use Countable; +use Iterator; +use IteratorAggregate; +use JsonSerializable; +use TypeError; +use function array_filter; +use function array_merge; +use function array_splice; +use function array_unshift; +use function array_values; +use function count; +use function reset; +use function sprintf; +use function uasort; +use function usort; +use const ARRAY_FILTER_USE_BOTH; + +/** + * A class to manipulate interval collection. + * + * @package League.period + * @author Ignace Nyamagana Butera <nyamsprod@gmail.com> + * @since 4.1.0 + */ +final class Sequence implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable +{ + /** @var array<Period> */ + private $intervals; + + public function __construct(Period ...$intervals) + { + $this->intervals = $intervals; + } + + /** + * Returns the sequence length as a Period instance. + * + * If the sequence contains no interval null is returned. + * + * @return ?Period + */ + public function length(): ?Period + { + $period = reset($this->intervals); + if (false === $period) { + return null; + } + + return $period->merge(...$this->intervals); + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Sequence::length() + * + * Returns the sequence length as a Period instance. + * + * If the sequence contains no interval null is returned. + * + * @return ?Period + */ + public function boundaries(): ?Period + { + return $this->length(); + } + + /** + * Returns the gaps inside the instance. + */ + public function gaps(): self + { + $sequence = new self(); + $interval = null; + foreach ($this->sorted([$this, 'sortByStartDate']) as $period) { + if (null === $interval) { + $interval = $period; + continue; + } + + if (!$interval->overlaps($period) && !$interval->abuts($period)) { + $sequence->push($interval->gap($period)); + } + + if (!$interval->contains($period)) { + $interval = $period; + } + } + + return $sequence; + } + + /** + * Sorts two Interval instance using their start datepoint. + */ + private function sortByStartDate(Period $interval1, Period $interval2): int + { + return $interval1->getStartDate() <=> $interval2->getStartDate(); + } + + /** + * Returns the intersections inside the instance. + */ + public function intersections(): self + { + $sequence = new self(); + $current = null; + $isPreviouslyContained = false; + foreach ($this->sorted([$this, 'sortByStartDate']) as $period) { + if (null === $current) { + $current = $period; + continue; + } + + $isContained = $current->contains($period); + if ($isContained && $isPreviouslyContained) { + $sequence->push($current->intersect($period)); + + continue; + } + + if ($current->overlaps($period)) { + $sequence->push($current->intersect($period)); + } + + $isPreviouslyContained = $isContained; + if (!$isContained) { + $current = $period; + } + } + + return $sequence; + } + + /** + * Returns the unions inside the instance. + */ + public function unions(): self + { + $sequence = $this + ->sorted([$this, 'sortByStartDate']) + ->reduce([$this, 'calculateUnion'], new self()) + ; + + if ($sequence->intervals === $this->intervals) { + return $this; + } + + return $sequence; + } + + /** + * Iteratively calculate the union sequence. + */ + private function calculateUnion(Sequence $sequence, Period $period): Sequence + { + if ($sequence->isEmpty()) { + $sequence->push($period); + + return $sequence; + } + + $index = $sequence->count() - 1; + $interval = $sequence->get($index); + if ($interval->overlaps($period) || $interval->abuts($period)) { + $sequence->set($index, $interval->merge($period)); + + return $sequence; + } + + $sequence->push($period); + + return $sequence; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.9.0 This method will be removed in the next major point release + * @see Period::subtract + */ + public function substract(Sequence $sequence): self + { + return $this->subtract($sequence); + } + + /** + * Subtract a Sequence from the current instance. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains subtracted intervals. + */ + public function subtract(Sequence $sequence): self + { + if ($this->isEmpty()) { + return $this; + } + + $new = $sequence->reduce([$this, 'subtractOne'], $this); + if ($new->intervals === $this->intervals) { + return $this; + } + + return $new; + } + + /** + * Substract an Interval from a Sequence. + */ + private function subtractOne(Sequence $sequence, Period $interval): self + { + if ($sequence->isEmpty()) { + return $sequence; + } + + $reducer = function (Sequence $sequence, Period $period) use ($interval): Sequence { + $subtract = $period->subtract($interval); + if (!$subtract->isEmpty()) { + $sequence->push(...$subtract); + } + + return $sequence; + }; + + return $sequence->reduce($reducer, new self()); + } + + /** + * Returns the sequence length as a Period instance. + * + * DEPRECATION WARNING! This method will be removed in the next major point release + * + * @deprecated 4.4.0 This method will be removed in the next major point release + * @see Sequence::boundaries + * + * If the sequence contains no interval null is returned. + * + * @return ?Period + */ + public function getBoundaries(): ?Period + { + return $this->length(); + } + + /** + * Returns the intersections inside the instance. + * + * DEPRECATION WARNING! This method will be removed in the next major point release + * + * @deprecated 4.4.0 This method will be removed in the next major point release + * @see Sequence::intersections + */ + public function getIntersections(): self + { + return $this->intersections(); + } + + /** + * Returns the gaps inside the instance. + * + * DEPRECATION WARNING! This method will be removed in the next major point release + * + * @deprecated 4.4.0 This method will be removed in the next major point release + * @see Sequence::gaps + */ + public function getGaps(): self + { + return $this->gaps(); + } + + /** + * Returns the sum of all instances durations as expressed in seconds. + */ + public function totalTimeDuration(): float + { + $retval = 0.0; + foreach ($this->intervals as $interval) { + $retval += $interval->timeDuration(); + } + + return $retval; + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated 4.12.0 This method will be removed in the next major point release + * @see Sequence::totalTimeDuration() + * + * Returns the sum of all instances durations as expressed in seconds. + */ + public function getTotalTimestampInterval(): float + { + return $this->totalTimeDuration(); + } + + /** + * Tells whether some intervals in the current instance satisfies the predicate. + */ + public function some(callable $predicate): bool + { + foreach ($this->intervals as $offset => $interval) { + if (true === $predicate($interval, $offset)) { + return true; + } + } + + return false; + } + + /** + * Tells whether all intervals in the current instance satisfies the predicate. + */ + public function every(callable $predicate): bool + { + foreach ($this->intervals as $offset => $interval) { + if (true !== $predicate($interval, $offset)) { + return false; + } + } + + return [] !== $this->intervals; + } + + /** + * Returns the array representation of the sequence. + * + * @return array<int, Period> + */ + public function toArray(): array + { + return $this->intervals; + } + + /** + * {@inheritDoc} + */ + public function jsonSerialize(): array + { + return $this->intervals; + } + + /** + * {@inheritDoc} + */ + public function getIterator(): Iterator + { + foreach ($this->intervals as $offset => $interval) { + yield $offset => $interval; + } + } + + /** + * {@inheritDoc} + */ + public function count(): int + { + return count($this->intervals); + } + + /** + * @inheritDoc + * + * @param mixed $offset the integer index of the Period instance to validate. + */ + public function offsetExists($offset): bool + { + if (!is_int($offset)) { + throw new TypeError('Argument #1 ($offset) must be of type integer, '.gettype($offset).' given.'); + } + + return null !== $this->filterOffset($offset); + } + + /** + * Filter and format the Sequence offset. + * + * This methods allows the support of negative offset + * + * if no offset is found null is returned otherwise the return type is int + */ + private function filterOffset(int $offset): ?int + { + if ([] === $this->intervals) { + return null; + } + + $max = count($this->intervals); + if (0 > $max + $offset) { + return null; + } + + if (0 > $max - $offset - 1) { + return null; + } + + if (0 > $offset) { + return $max + $offset; + } + + return $offset; + } + + /** + * @inheritDoc + * @see Sequence::get + * + * @param mixed $offset the integer index of the Period instance to retrieve. + * + * @throws InvalidIndex If the offset is illegal for the current sequence + */ + public function offsetGet($offset): Period + { + if (!is_int($offset)) { + throw new TypeError('Argument #1 ($offset) must be of type integer, '.gettype($offset).' given.'); + } + + return $this->get($offset); + } + + /** + * @inheritDoc + * @see Sequence::remove + * + * @param mixed $offset the integer index of the Period instance to remove + * + * @throws InvalidIndex If the offset is illegal for the current sequence + */ + public function offsetUnset($offset): void + { + if (!is_int($offset)) { + throw new TypeError('Argument #1 ($offset) must be of type integer, '.gettype($offset).' given.'); + } + + $this->remove($offset); + } + + /** + * @inheritDoc + * @param mixed $offset the integer index of the Period to add or update + * @param mixed $value the Period instance to add + * + * @throws InvalidIndex If the offset is illegal for the current sequence + * + * @see Sequence::push + * @see Sequence::set + */ + public function offsetSet($offset, $value): void + { + if (!is_int($offset) && !is_null($offset)) { + throw new TypeError('Argument #1 ($offset) must be of type integer, '.gettype($value).' given.'); + } + + if (!$value instanceof Period) { + throw new TypeError('Argument #2 ($interval) must be of type League\Period\Period, '.gettype($value).' given.'); + } + + if (null !== $offset) { + $this->set($offset, $value); + return; + } + + $this->push($value); + } + + /** + * Tells whether the sequence is empty. + */ + public function isEmpty(): bool + { + return [] === $this->intervals; + } + + /** + * Tells whether the given interval is present in the sequence. + * + * @param Period ...$intervals + */ + public function contains(Period ...$intervals): bool + { + foreach ($intervals as $period) { + if (false === $this->indexOf($period)) { + return false; + } + } + + return [] !== $intervals; + } + + /** + * Attempts to find the first offset attached to the submitted interval. + * + * If no offset is found the method returns boolean false. + * + * @return int|bool + */ + public function indexOf(Period $interval) + { + foreach ($this->intervals as $offset => $period) { + if ($period->equals($interval)) { + return $offset; + } + } + + return false; + } + + /** + * Returns the interval specified at a given offset. + * + * @throws InvalidIndex If the offset is illegal for the current sequence + */ + public function get(int $offset): Period + { + $index = $this->filterOffset($offset); + if (null === $index) { + throw new InvalidIndex(sprintf('%s is an invalid offset in the current sequence', $offset)); + } + + return $this->intervals[$index]; + } + + /** + * Sort the current instance according to the given comparison callable + * and maintain index association. + * + * Returns true on success or false on failure + */ + public function sort(callable $compare): bool + { + return uasort($this->intervals, $compare); + } + + /** + * Adds new intervals at the front of the sequence. + * + * The sequence is re-indexed after addition + * + * @param Period ...$intervals + */ + public function unshift(Period ...$intervals): void + { + $this->intervals = array_merge($intervals, $this->intervals); + } + + /** + * Adds new intervals at the end of the sequence. + * + * @param Period ...$intervals + */ + public function push(Period ...$intervals): void + { + $this->intervals = array_merge($this->intervals, $intervals); + } + + /** + * Inserts new intervals at the specified offset of the sequence. + * + * The sequence is re-indexed after addition + * + * @param Period ...$intervals + * + * @throws InvalidIndex If the offset is illegal for the current sequence. + */ + public function insert(int $offset, Period $interval, Period ...$intervals): void + { + if (0 === $offset) { + $this->unshift($interval, ...$intervals); + + return; + } + + if (count($this->intervals) === $offset) { + $this->push($interval, ...$intervals); + + return; + } + + $index = $this->filterOffset($offset); + if (null === $index) { + throw new InvalidIndex(sprintf('%s is an invalid offset in the current sequence', $offset)); + } + + array_unshift($intervals, $interval); + array_splice($this->intervals, $index, 0, $intervals); + } + + /** + * Updates the interval at the specify offset. + * + * @throws InvalidIndex If the offset is illegal for the current sequence. + */ + public function set(int $offset, Period $interval): void + { + $index = $this->filterOffset($offset); + if (null === $index) { + throw new InvalidIndex(sprintf('%s is an invalid offset in the current sequence', $offset)); + } + + $this->intervals[$index] = $interval; + } + + /** + * Removes an interval from the sequence at the given offset and returns it. + * + * The sequence is re-indexed after removal + * + * @throws InvalidIndex If the offset is illegal for the current sequence. + */ + public function remove(int $offset): Period + { + $index = $this->filterOffset($offset); + if (null === $index) { + throw new InvalidIndex(sprintf('%s is an invalid offset in the current sequence', $offset)); + } + + $interval = $this->intervals[$index]; + unset($this->intervals[$index]); + $this->intervals = array_values($this->intervals); + + return $interval; + } + + /** + * Filters the sequence according to the given predicate. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the interval which validate the predicate. + */ + public function filter(callable $predicate): self + { + $intervals = array_filter($this->intervals, $predicate, ARRAY_FILTER_USE_BOTH); + if ($intervals === $this->intervals) { + return $this; + } + + return new self(...$intervals); + } + + /** + * Removes all intervals from the sequence. + */ + public function clear(): void + { + $this->intervals = []; + } + + /** + * Returns an instance sorted according to the given comparison callable + * but does not maintain index association. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the sorted intervals. The key are re-indexed + */ + public function sorted(callable $compare): self + { + $intervals = $this->intervals; + usort($intervals, $compare); + if ($intervals === $this->intervals) { + return $this; + } + + return new self(...$intervals); + } + + /** + * Returns an instance where the given function is applied to each element in + * the collection. The callable MUST return a Period object and takes a Period + * and its associated key as argument. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the returned intervals. + */ + public function map(callable $func): self + { + $intervals = []; + foreach ($this->intervals as $offset => $interval) { + $intervals[$offset] = $func($interval, $offset); + } + + if ($intervals === $this->intervals) { + return $this; + } + + $mapped = new self(); + $mapped->intervals = $intervals; + + return $mapped; + } + + /** + * Iteratively reduces the sequence to a single value using a callback. + * + * @template TReduceInitial + * @template TReduceReturnType + * + * @param callable(TReduceInitial|TReduceReturnType, Period, array-key=): TReduceReturnType $func + * @param TReduceInitial $carry + * + * @return TReduceInitial|TReduceReturnType + */ + public function reduce(callable $func, $carry = null) + { + foreach ($this->intervals as $offset => $interval) { + $carry = $func($carry, $interval, $offset); + } + + return $carry; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions.php new file mode 100644 index 0000000..2144b51 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions.php @@ -0,0 +1,374 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Period; + +use DateInterval; +use DatePeriod; +use DateTimeImmutable; +use function is_int; + +/** + * Returns a DateTimeImmutable object. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Datepoint::create + * + * @param Datepoint|\DateTimeInterface|int|string $datepoint a datepoint + */ +function datepoint($datepoint): DateTimeImmutable +{ + if ($datepoint instanceof DateTimeImmutable) { + return $datepoint; + } + + return Datepoint::create($datepoint); +} + +/** + * Returns a DateInval object. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Duration::create + * + * @param Duration|DateInterval|string|int $duration a Duration + */ +function duration($duration): DateInterval +{ + if ($duration instanceof DateInterval) { + return $duration; + } + + return Duration::create($duration); +} + +/** + * Creates new instance from a starting point and an interval. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::after + * + * @param Datepoint|\DateTimeInterface|int|string $startDate the starting included datepoint + * @param Duration|DateInterval|string|int $duration a Duration + */ +function interval_after($startDate, $duration): Period +{ + return Period::after($startDate, $duration); +} + +/** + * Creates new instance from a ending excluded datepoint and an interval. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::before + * + * @param Datepoint|\DateTimeInterface|int|string $endDate the ending excluded datepoint + * @param Duration|DateInterval|string|int $duration a Duration + */ +function interval_before($endDate, $duration): Period +{ + return Period::before($endDate, $duration); +} + +/** + * Creates new instance where the given duration is simultaneously + * subtracted from and added to the datepoint. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::around + * + * @param Datepoint|\DateTimeInterface|int|string $datepoint a datepoint at the center of the returned instance + * @param Duration|DateInterval|string|int $duration a Duration + */ +function interval_around($datepoint, $duration): Period +{ + return Period::around($datepoint, $duration); +} + +/** + * Creates new instance from a DatePeriod. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromDatePeriod + */ +function interval_from_dateperiod(DatePeriod $datePeriod): Period +{ + return Period::fromDatePeriod($datePeriod); +} + +/** + * Creates new instance for a specific year. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromYear + * @see Datepoint::getYear + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function year($year_or_datepoint): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromYear($year_or_datepoint); + } + + return Datepoint::create($year_or_datepoint)->getYear(); +} + +/** + * Creates new instance for a specific ISO year. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromIsoYear + * @see Datepoint::getIsoYear + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint an iso year as an int or a datepoint + */ +function iso_year($year_or_datepoint): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromIsoYear($year_or_datepoint); + } + + return Datepoint::create($year_or_datepoint)->getIsoYear(); +} + +/** + * Creates new instance for a specific semester in a given year. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromSemester + * @see Datepoint::getSemester + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function semester($year_or_datepoint, int $semester = 1): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromSemester($year_or_datepoint, $semester); + } + + return Datepoint::create($year_or_datepoint)->getSemester(); +} + +/** + * Creates new instance for a specific quarter in a given year. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromQuarter + * @see Datepoint::getQuarter + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint an iso year as an int or a datepoint + */ +function quarter($year_or_datepoint, int $quarter = 1): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromQuarter($year_or_datepoint, $quarter); + } + + return Datepoint::create($year_or_datepoint)->getQuarter(); +} + +/** + * Creates new instance for a specific year and month. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromMonth + * @see Datepoint::getMonth + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function month($year_or_datepoint, int $month = 1): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromMonth($year_or_datepoint, $month); + } + + return Datepoint::create($year_or_datepoint)->getMonth(); +} + +/** + * Creates new instance for a specific ISO8601 week. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromIsoWeek + * @see Datepoint::getIsoWeek + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint an iso year as an int or a datepoint + */ +function iso_week($year_or_datepoint, int $week = 1): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromIsoWeek($year_or_datepoint, $week); + } + + return Datepoint::create($year_or_datepoint)->getIsoWeek(); +} + +/** + * Creates new instance for a specific date. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::fromIsoWeek + * @see Datepoint::getDay + * + * The date is truncated so that the time range starts at midnight + * according to the date timezone and last a full day. + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function day($year_or_datepoint, int $month = 1, int $day = 1): Period +{ + if (is_int($year_or_datepoint)) { + return Period::fromDay($year_or_datepoint, $month, $day); + } + + return Datepoint::create($year_or_datepoint)->getDay(); +} + +/** + * Creates new instance for a specific date and hour. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Datepoint::getHour + * + * The starting datepoint represents the beginning of the hour + * The interval is equal to 1 hour + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function hour($year_or_datepoint, int $month = 1, int $day = 1, int $hour = 0): Period +{ + if (is_int($year_or_datepoint)) { + $startDate = (new DateTimeImmutable()) + ->setDate($year_or_datepoint, $month, $day) + ->setTime($hour, 0); + + return Period::after($startDate, new DateInterval('PT1H')); + } + + return Datepoint::create($year_or_datepoint)->getHour(); +} + +/** + * Creates new instance for a specific date, hour and minute. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Datepoint::getMinute + * + * The starting datepoint represents the beginning of the minute + * The interval is equal to 1 minute + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function minute($year_or_datepoint, int $month = 1, int $day = 1, int $hour = 0, int $minute = 0): Period +{ + if (is_int($year_or_datepoint)) { + $startDate = (new DateTimeImmutable()) + ->setDate($year_or_datepoint, $month, $day) + ->setTime($hour, $minute); + + return Period::after($startDate, new DateInterval('PT1M')); + } + + return Datepoint::create($year_or_datepoint)->getMinute(); +} + +/** + * Creates new instance for a specific date, hour, minute and second. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Datepoint::getSecond + * + * The starting datepoint represents the beginning of the second + * The interval is equal to 1 second + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function second( + $year_or_datepoint, + int $month = 1, + int $day = 1, + int $hour = 0, + int $minute = 0, + int $second = 0 +): Period { + if (is_int($year_or_datepoint)) { + $startDate = (new DateTimeImmutable()) + ->setDate($year_or_datepoint, $month, $day) + ->setTime($hour, $minute, $second); + + return Period::after($startDate, new DateInterval('PT1S')); + } + + return Datepoint::create($year_or_datepoint)->getSecond(); +} + +/** + * Creates new instance for a specific datepoint. + * + * DEPRECATION WARNING! This function will be removed in the next major point release + * + * @deprecated 4.2.0 This method will be removed in the next major point release + * @see Period::__construct + * + * @param Datepoint|\DateTimeInterface|int|string $year_or_datepoint a year as an int or a datepoint + */ +function instant( + $year_or_datepoint, + int $month = 1, + int $day = 1, + int $hour = 0, + int $minute = 0, + int $second = 0, + int $microsecond = 0 +): Period { + if (is_int($year_or_datepoint)) { + $year_or_datepoint = (new DateTimeImmutable()) + ->setDate($year_or_datepoint, $month, $day) + ->setTime($hour, $minute, $second, $microsecond); + } + + return new Period($year_or_datepoint, $year_or_datepoint); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions_include.php b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions_include.php new file mode 100644 index 0000000..d4c2300 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/league/period/src/functions_include.php @@ -0,0 +1,16 @@ +<?php + +/** + * League.Period (https://period.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +if (!function_exists('\Period\duration')) { + require __DIR__.'/functions.php'; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/CHANGELOG.md b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/CHANGELOG.md new file mode 100644 index 0000000..7932e26 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/LICENSE new file mode 100644 index 0000000..0ed3a24 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/function.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/function.php new file mode 100644 index 0000000..d437150 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/deprecation-contracts/function.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('trigger_deprecation')) { + /** + * Triggers a silenced deprecation notice. + * + * @param string $package The name of the Composer package that is triggering the deprecation + * @param string $version The version of the package that introduced the deprecation + * @param string $message The message of the deprecation + * @param mixed ...$args Values to insert in the message using printf() formatting + * + * @author Nicolas Grekas <p@tchwork.com> + */ + function trigger_deprecation(string $package, string $version, string $message, ...$args): void + { + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/Ctype.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 0000000..ba75a2c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,232 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter <BackEndTea@gmail.com> + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param mixed $int + * @param string $function + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int, $function) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 0000000..7536cae --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 0000000..d54524b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,50 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print($text) { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space($text) { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap80.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 0000000..ab2f861 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/LICENSE new file mode 100644 index 0000000..6e3afce --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Mbstring.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 0000000..31e36a3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,1045 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_str_split - Convert a string to an array + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * - mb_ucfirst - Make a string's first character uppercase + * - mb_lcfirst - Make a string's first character lowercase + * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string + * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string + * - mb_rtrim - Strip whitespace (or other characters) from the end of a string + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Mbstring +{ + public const MB_CASE_FOLD = \PHP_INT_MAX; + + private const SIMPLE_CASE_FOLD = [ + ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], + ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], + ]; + + private static $encodingList = ['ASCII', 'UTF-8']; + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($s)) { + $r = []; + foreach ($s as $str) { + $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); + } + + return $r; + } + + if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) + { + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return self::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !\is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (\MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); + } else { + if (\MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + static $caseFolding = null; + if (null === $caseFolding) { + $caseFolding = self::getData('caseFolding'); + } + $s = strtr($s, $caseFolding); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $normalizedEncoding = self::getEncoding($encoding); + + if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) { + self::$internalEncoding = $normalizedEncoding; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($normalizedLang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $normalizedLang; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); + } + + public static function mb_list_encodings() + { + return ['UTF-8']; + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return ['utf8']; + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + if (!\is_array($var)) { + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + } + + foreach ($var as $key => $value) { + if (!self::mb_check_encoding($key, $encoding)) { + return false; + } + if (!self::mb_check_encoding($value, $encoding)) { + return false; + } + } + + return true; + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + if (80000 > \PHP_VERSION_ID) { + trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); + + return false; + } + + return 0; + } + + return iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + if (0 > $offset += self::mb_strlen($needle)) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + } + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = '' !== $needle || 80000 > \PHP_VERSION_ID + ? iconv_strrpos($haystack, $needle, $encoding) + : self::mb_strlen($haystack, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_str_split($string, $split_length = 1, $encoding = null) + { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { + trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); + + return null; + } + + if (1 > $split_length = (int) $split_length) { + if (80000 > \PHP_VERSION_ID) { + trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); + + return false; + } + + throw new \ValueError('Argument #2 ($length) must be greater than 0'); + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + if ('UTF-8' === $encoding = self::getEncoding($encoding)) { + $rx = '/('; + while (65535 < $split_length) { + $rx .= '.{65535}'; + $split_length -= 65535; + } + $rx .= '.{'.$split_length.'})/us'; + + return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); + } + + $result = []; + $length = mb_strlen($string, $encoding); + + for ($i = 0; $i < $length; $i += $split_length) { + $result[] = mb_substr($string, $i, $split_length, $encoding); + } + + return $result; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (null === $c) { + return 'none'; + } + if (0 === strcasecmp($c, 'none')) { + return true; + } + if (80000 > \PHP_VERSION_ID) { + return false; + } + if (\is_int($c) || 'long' === $c || 'entity' === $c) { + return false; + } + + throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return (string) substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [ + self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding), + self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding), + ]); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + $pos = strrpos($haystack, $needle); + } else { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); + } + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding); + $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding); + + $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack); + $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = [ + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ]; + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null): string + { + if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { + throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); + } + + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given'); + } + + if (self::mb_strlen($pad_string, $encoding) <= 0) { + throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); + } + + $paddingRequired = $length - self::mb_strlen($string, $encoding); + + if ($paddingRequired < 1) { + return $string; + } + + switch ($pad_type) { + case \STR_PAD_LEFT: + return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; + case \STR_PAD_RIGHT: + return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); + default: + $leftPaddingLength = floor($paddingRequired / 2); + $rightPaddingLength = $paddingRequired - $leftPaddingLength; + + return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); + } + } + + public static function mb_ucfirst(string $string, ?string $encoding = null): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + + $firstChar = mb_substr($string, 0, 1, $encoding); + $firstChar = mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding); + + return $firstChar.mb_substr($string, 1, null, $encoding); + } + + public static function mb_lcfirst(string $string, ?string $encoding = null): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + + $firstChar = mb_substr($string, 0, 1, $encoding); + $firstChar = mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding); + + return $firstChar.mb_substr($string, 1, null, $encoding); + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + if ('UTF-8' === $encoding) { + return 'UTF-8'; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } + + public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{[%s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + + private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given'); + } + + if ('' === $characters) { + return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); + } + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $string)) { + $string = @iconv('UTF-8', 'UTF-8//IGNORE', $string); + } + if (null !== $characters && !preg_match('//u', $characters)) { + $characters = @iconv('UTF-8', 'UTF-8//IGNORE', $characters); + } + } else { + $string = iconv($encoding, 'UTF-8//IGNORE', $string); + + if (null !== $characters) { + $characters = iconv($encoding, 'UTF-8//IGNORE', $characters); + } + } + + if (null === $characters) { + $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"; + } else { + $characters = preg_quote($characters); + } + + $string = preg_replace(sprintf($regex, $characters), '', $string); + + if (null === $encoding) { + return $string; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $string); + } + + private static function assertEncoding(string $encoding, string $errorFormat): void + { + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf($errorFormat, $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf($errorFormat, $encoding)); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php new file mode 100644 index 0000000..512bba0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php @@ -0,0 +1,119 @@ +<?php + +return [ + 'İ' => 'i̇', + 'µ' => 'μ', + 'ſ' => 's', + 'ͅ' => 'ι', + 'ς' => 'σ', + 'ϐ' => 'β', + 'ϑ' => 'θ', + 'ϕ' => 'φ', + 'ϖ' => 'π', + 'ϰ' => 'κ', + 'ϱ' => 'ρ', + 'ϵ' => 'ε', + 'ẛ' => 'ṡ', + 'ι' => 'ι', + 'ß' => 'ss', + 'ʼn' => 'ʼn', + 'ǰ' => 'ǰ', + 'ΐ' => 'ΐ', + 'ΰ' => 'ΰ', + 'և' => 'եւ', + 'ẖ' => 'ẖ', + 'ẗ' => 'ẗ', + 'ẘ' => 'ẘ', + 'ẙ' => 'ẙ', + 'ẚ' => 'aʾ', + 'ẞ' => 'ss', + 'ὐ' => 'ὐ', + 'ὒ' => 'ὒ', + 'ὔ' => 'ὔ', + 'ὖ' => 'ὖ', + 'ᾀ' => 'ἀι', + 'ᾁ' => 'ἁι', + 'ᾂ' => 'ἂι', + 'ᾃ' => 'ἃι', + 'ᾄ' => 'ἄι', + 'ᾅ' => 'ἅι', + 'ᾆ' => 'ἆι', + 'ᾇ' => 'ἇι', + 'ᾈ' => 'ἀι', + 'ᾉ' => 'ἁι', + 'ᾊ' => 'ἂι', + 'ᾋ' => 'ἃι', + 'ᾌ' => 'ἄι', + 'ᾍ' => 'ἅι', + 'ᾎ' => 'ἆι', + 'ᾏ' => 'ἇι', + 'ᾐ' => 'ἠι', + 'ᾑ' => 'ἡι', + 'ᾒ' => 'ἢι', + 'ᾓ' => 'ἣι', + 'ᾔ' => 'ἤι', + 'ᾕ' => 'ἥι', + 'ᾖ' => 'ἦι', + 'ᾗ' => 'ἧι', + 'ᾘ' => 'ἠι', + 'ᾙ' => 'ἡι', + 'ᾚ' => 'ἢι', + 'ᾛ' => 'ἣι', + 'ᾜ' => 'ἤι', + 'ᾝ' => 'ἥι', + 'ᾞ' => 'ἦι', + 'ᾟ' => 'ἧι', + 'ᾠ' => 'ὠι', + 'ᾡ' => 'ὡι', + 'ᾢ' => 'ὢι', + 'ᾣ' => 'ὣι', + 'ᾤ' => 'ὤι', + 'ᾥ' => 'ὥι', + 'ᾦ' => 'ὦι', + 'ᾧ' => 'ὧι', + 'ᾨ' => 'ὠι', + 'ᾩ' => 'ὡι', + 'ᾪ' => 'ὢι', + 'ᾫ' => 'ὣι', + 'ᾬ' => 'ὤι', + 'ᾭ' => 'ὥι', + 'ᾮ' => 'ὦι', + 'ᾯ' => 'ὧι', + 'ᾲ' => 'ὰι', + 'ᾳ' => 'αι', + 'ᾴ' => 'άι', + 'ᾶ' => 'ᾶ', + 'ᾷ' => 'ᾶι', + 'ᾼ' => 'αι', + 'ῂ' => 'ὴι', + 'ῃ' => 'ηι', + 'ῄ' => 'ήι', + 'ῆ' => 'ῆ', + 'ῇ' => 'ῆι', + 'ῌ' => 'ηι', + 'ῒ' => 'ῒ', + 'ῖ' => 'ῖ', + 'ῗ' => 'ῗ', + 'ῢ' => 'ῢ', + 'ῤ' => 'ῤ', + 'ῦ' => 'ῦ', + 'ῧ' => 'ῧ', + 'ῲ' => 'ὼι', + 'ῳ' => 'ωι', + 'ῴ' => 'ώι', + 'ῶ' => 'ῶ', + 'ῷ' => 'ῶι', + 'ῼ' => 'ωι', + 'ff' => 'ff', + 'fi' => 'fi', + 'fl' => 'fl', + 'ffi' => 'ffi', + 'ffl' => 'ffl', + 'ſt' => 'st', + 'st' => 'st', + 'ﬓ' => 'մն', + 'ﬔ' => 'մե', + 'ﬕ' => 'մի', + 'ﬖ' => 'վն', + 'ﬗ' => 'մխ', +]; diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 0000000..fac60b0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1397 @@ +<?php + +return array ( + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Á' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Å' => 'å', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'Ì' => 'ì', + 'Í' => 'í', + 'Î' => 'î', + 'Ï' => 'ï', + 'Ð' => 'ð', + 'Ñ' => 'ñ', + 'Ò' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ü' => 'ü', + 'Ý' => 'ý', + 'Þ' => 'þ', + 'Ā' => 'ā', + 'Ă' => 'ă', + 'Ą' => 'ą', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'Ċ' => 'ċ', + 'Č' => 'č', + 'Ď' => 'ď', + 'Đ' => 'đ', + 'Ē' => 'ē', + 'Ĕ' => 'ĕ', + 'Ė' => 'ė', + 'Ę' => 'ę', + 'Ě' => 'ě', + 'Ĝ' => 'ĝ', + 'Ğ' => 'ğ', + 'Ġ' => 'ġ', + 'Ģ' => 'ģ', + 'Ĥ' => 'ĥ', + 'Ħ' => 'ħ', + 'Ĩ' => 'ĩ', + 'Ī' => 'ī', + 'Ĭ' => 'ĭ', + 'Į' => 'į', + 'İ' => 'i̇', + 'IJ' => 'ij', + 'Ĵ' => 'ĵ', + 'Ķ' => 'ķ', + 'Ĺ' => 'ĺ', + 'Ļ' => 'ļ', + 'Ľ' => 'ľ', + 'Ŀ' => 'ŀ', + 'Ł' => 'ł', + 'Ń' => 'ń', + 'Ņ' => 'ņ', + 'Ň' => 'ň', + 'Ŋ' => 'ŋ', + 'Ō' => 'ō', + 'Ŏ' => 'ŏ', + 'Ő' => 'ő', + 'Œ' => 'œ', + 'Ŕ' => 'ŕ', + 'Ŗ' => 'ŗ', + 'Ř' => 'ř', + 'Ś' => 'ś', + 'Ŝ' => 'ŝ', + 'Ş' => 'ş', + 'Š' => 'š', + 'Ţ' => 'ţ', + 'Ť' => 'ť', + 'Ŧ' => 'ŧ', + 'Ũ' => 'ũ', + 'Ū' => 'ū', + 'Ŭ' => 'ŭ', + 'Ů' => 'ů', + 'Ű' => 'ű', + 'Ų' => 'ų', + 'Ŵ' => 'ŵ', + 'Ŷ' => 'ŷ', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Ż' => 'ż', + 'Ž' => 'ž', + 'Ɓ' => 'ɓ', + 'Ƃ' => 'ƃ', + 'Ƅ' => 'ƅ', + 'Ɔ' => 'ɔ', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'ɖ', + 'Ɗ' => 'ɗ', + 'Ƌ' => 'ƌ', + 'Ǝ' => 'ǝ', + 'Ə' => 'ə', + 'Ɛ' => 'ɛ', + 'Ƒ' => 'ƒ', + 'Ɠ' => 'ɠ', + 'Ɣ' => 'ɣ', + 'Ɩ' => 'ɩ', + 'Ɨ' => 'ɨ', + 'Ƙ' => 'ƙ', + 'Ɯ' => 'ɯ', + 'Ɲ' => 'ɲ', + 'Ɵ' => 'ɵ', + 'Ơ' => 'ơ', + 'Ƣ' => 'ƣ', + 'Ƥ' => 'ƥ', + 'Ʀ' => 'ʀ', + 'Ƨ' => 'ƨ', + 'Ʃ' => 'ʃ', + 'Ƭ' => 'ƭ', + 'Ʈ' => 'ʈ', + 'Ư' => 'ư', + 'Ʊ' => 'ʊ', + 'Ʋ' => 'ʋ', + 'Ƴ' => 'ƴ', + 'Ƶ' => 'ƶ', + 'Ʒ' => 'ʒ', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'DŽ' => 'dž', + 'Dž' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'NJ' => 'nj', + 'Nj' => 'nj', + 'Ǎ' => 'ǎ', + 'Ǐ' => 'ǐ', + 'Ǒ' => 'ǒ', + 'Ǔ' => 'ǔ', + 'Ǖ' => 'ǖ', + 'Ǘ' => 'ǘ', + 'Ǚ' => 'ǚ', + 'Ǜ' => 'ǜ', + 'Ǟ' => 'ǟ', + 'Ǡ' => 'ǡ', + 'Ǣ' => 'ǣ', + 'Ǥ' => 'ǥ', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'ǩ', + 'Ǫ' => 'ǫ', + 'Ǭ' => 'ǭ', + 'Ǯ' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ǵ' => 'ǵ', + 'Ƕ' => 'ƕ', + 'Ƿ' => 'ƿ', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'ǻ', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'ǿ', + 'Ȁ' => 'ȁ', + 'Ȃ' => 'ȃ', + 'Ȅ' => 'ȅ', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'Ȋ' => 'ȋ', + 'Ȍ' => 'ȍ', + 'Ȏ' => 'ȏ', + 'Ȑ' => 'ȑ', + 'Ȓ' => 'ȓ', + 'Ȕ' => 'ȕ', + 'Ȗ' => 'ȗ', + 'Ș' => 'ș', + 'Ț' => 'ț', + 'Ȝ' => 'ȝ', + 'Ȟ' => 'ȟ', + 'Ƞ' => 'ƞ', + 'Ȣ' => 'ȣ', + 'Ȥ' => 'ȥ', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'ȩ', + 'Ȫ' => 'ȫ', + 'Ȭ' => 'ȭ', + 'Ȯ' => 'ȯ', + 'Ȱ' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'ⱥ', + 'Ȼ' => 'ȼ', + 'Ƚ' => 'ƚ', + 'Ⱦ' => 'ⱦ', + 'Ɂ' => 'ɂ', + 'Ƀ' => 'ƀ', + 'Ʉ' => 'ʉ', + 'Ʌ' => 'ʌ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'Ɋ' => 'ɋ', + 'Ɍ' => 'ɍ', + 'Ɏ' => 'ɏ', + 'Ͱ' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'ͷ', + 'Ϳ' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'Ό' => 'ό', + 'Ύ' => 'ύ', + 'Ώ' => 'ώ', + 'Α' => 'α', + 'Β' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Μ' => 'μ', + 'Ν' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'π', + 'Ρ' => 'ρ', + 'Σ' => 'σ', + 'Τ' => 'τ', + 'Υ' => 'υ', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ϊ', + 'Ϋ' => 'ϋ', + 'Ϗ' => 'ϗ', + 'Ϙ' => 'ϙ', + 'Ϛ' => 'ϛ', + 'Ϝ' => 'ϝ', + 'Ϟ' => 'ϟ', + 'Ϡ' => 'ϡ', + 'Ϣ' => 'ϣ', + 'Ϥ' => 'ϥ', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'ϩ', + 'Ϫ' => 'ϫ', + 'Ϭ' => 'ϭ', + 'Ϯ' => 'ϯ', + 'ϴ' => 'θ', + 'Ϸ' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'ϻ', + 'Ͻ' => 'ͻ', + 'Ͼ' => 'ͼ', + 'Ͽ' => 'ͽ', + 'Ѐ' => 'ѐ', + 'Ё' => 'ё', + 'Ђ' => 'ђ', + 'Ѓ' => 'ѓ', + 'Є' => 'є', + 'Ѕ' => 'ѕ', + 'І' => 'і', + 'Ї' => 'ї', + 'Ј' => 'ј', + 'Љ' => 'љ', + 'Њ' => 'њ', + 'Ћ' => 'ћ', + 'Ќ' => 'ќ', + 'Ѝ' => 'ѝ', + 'Ў' => 'ў', + 'Џ' => 'џ', + 'А' => 'а', + 'Б' => 'б', + 'В' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'М' => 'м', + 'Н' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'р', + 'С' => 'с', + 'Т' => 'т', + 'У' => 'у', + 'Ф' => 'ф', + 'Х' => 'х', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ъ', + 'Ы' => 'ы', + 'Ь' => 'ь', + 'Э' => 'э', + 'Ю' => 'ю', + 'Я' => 'я', + 'Ѡ' => 'ѡ', + 'Ѣ' => 'ѣ', + 'Ѥ' => 'ѥ', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'ѩ', + 'Ѫ' => 'ѫ', + 'Ѭ' => 'ѭ', + 'Ѯ' => 'ѯ', + 'Ѱ' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ѵ' => 'ѵ', + 'Ѷ' => 'ѷ', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'ѻ', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'ѿ', + 'Ҁ' => 'ҁ', + 'Ҋ' => 'ҋ', + 'Ҍ' => 'ҍ', + 'Ҏ' => 'ҏ', + 'Ґ' => 'ґ', + 'Ғ' => 'ғ', + 'Ҕ' => 'ҕ', + 'Җ' => 'җ', + 'Ҙ' => 'ҙ', + 'Қ' => 'қ', + 'Ҝ' => 'ҝ', + 'Ҟ' => 'ҟ', + 'Ҡ' => 'ҡ', + 'Ң' => 'ң', + 'Ҥ' => 'ҥ', + 'Ҧ' => 'ҧ', + 'Ҩ' => 'ҩ', + 'Ҫ' => 'ҫ', + 'Ҭ' => 'ҭ', + 'Ү' => 'ү', + 'Ұ' => 'ұ', + 'Ҳ' => 'ҳ', + 'Ҵ' => 'ҵ', + 'Ҷ' => 'ҷ', + 'Ҹ' => 'ҹ', + 'Һ' => 'һ', + 'Ҽ' => 'ҽ', + 'Ҿ' => 'ҿ', + 'Ӏ' => 'ӏ', + 'Ӂ' => 'ӂ', + 'Ӄ' => 'ӄ', + 'Ӆ' => 'ӆ', + 'Ӈ' => 'ӈ', + 'Ӊ' => 'ӊ', + 'Ӌ' => 'ӌ', + 'Ӎ' => 'ӎ', + 'Ӑ' => 'ӑ', + 'Ӓ' => 'ӓ', + 'Ӕ' => 'ӕ', + 'Ӗ' => 'ӗ', + 'Ә' => 'ә', + 'Ӛ' => 'ӛ', + 'Ӝ' => 'ӝ', + 'Ӟ' => 'ӟ', + 'Ӡ' => 'ӡ', + 'Ӣ' => 'ӣ', + 'Ӥ' => 'ӥ', + 'Ӧ' => 'ӧ', + 'Ө' => 'ө', + 'Ӫ' => 'ӫ', + 'Ӭ' => 'ӭ', + 'Ӯ' => 'ӯ', + 'Ӱ' => 'ӱ', + 'Ӳ' => 'ӳ', + 'Ӵ' => 'ӵ', + 'Ӷ' => 'ӷ', + 'Ӹ' => 'ӹ', + 'Ӻ' => 'ӻ', + 'Ӽ' => 'ӽ', + 'Ӿ' => 'ӿ', + 'Ԁ' => 'ԁ', + 'Ԃ' => 'ԃ', + 'Ԅ' => 'ԅ', + 'Ԇ' => 'ԇ', + 'Ԉ' => 'ԉ', + 'Ԋ' => 'ԋ', + 'Ԍ' => 'ԍ', + 'Ԏ' => 'ԏ', + 'Ԑ' => 'ԑ', + 'Ԓ' => 'ԓ', + 'Ԕ' => 'ԕ', + 'Ԗ' => 'ԗ', + 'Ԙ' => 'ԙ', + 'Ԛ' => 'ԛ', + 'Ԝ' => 'ԝ', + 'Ԟ' => 'ԟ', + 'Ԡ' => 'ԡ', + 'Ԣ' => 'ԣ', + 'Ԥ' => 'ԥ', + 'Ԧ' => 'ԧ', + 'Ԩ' => 'ԩ', + 'Ԫ' => 'ԫ', + 'Ԭ' => 'ԭ', + 'Ԯ' => 'ԯ', + 'Ա' => 'ա', + 'Բ' => 'բ', + 'Գ' => 'գ', + 'Դ' => 'դ', + 'Ե' => 'ե', + 'Զ' => 'զ', + 'Է' => 'է', + 'Ը' => 'ը', + 'Թ' => 'թ', + 'Ժ' => 'ժ', + 'Ի' => 'ի', + 'Լ' => 'լ', + 'Խ' => 'խ', + 'Ծ' => 'ծ', + 'Կ' => 'կ', + 'Հ' => 'հ', + 'Ձ' => 'ձ', + 'Ղ' => 'ղ', + 'Ճ' => 'ճ', + 'Մ' => 'մ', + 'Յ' => 'յ', + 'Ն' => 'ն', + 'Շ' => 'շ', + 'Ո' => 'ո', + 'Չ' => 'չ', + 'Պ' => 'պ', + 'Ջ' => 'ջ', + 'Ռ' => 'ռ', + 'Ս' => 'ս', + 'Վ' => 'վ', + 'Տ' => 'տ', + 'Ր' => 'ր', + 'Ց' => 'ց', + 'Ւ' => 'ւ', + 'Փ' => 'փ', + 'Ք' => 'ք', + 'Օ' => 'օ', + 'Ֆ' => 'ֆ', + 'Ⴀ' => 'ⴀ', + 'Ⴁ' => 'ⴁ', + 'Ⴂ' => 'ⴂ', + 'Ⴃ' => 'ⴃ', + 'Ⴄ' => 'ⴄ', + 'Ⴅ' => 'ⴅ', + 'Ⴆ' => 'ⴆ', + 'Ⴇ' => 'ⴇ', + 'Ⴈ' => 'ⴈ', + 'Ⴉ' => 'ⴉ', + 'Ⴊ' => 'ⴊ', + 'Ⴋ' => 'ⴋ', + 'Ⴌ' => 'ⴌ', + 'Ⴍ' => 'ⴍ', + 'Ⴎ' => 'ⴎ', + 'Ⴏ' => 'ⴏ', + 'Ⴐ' => 'ⴐ', + 'Ⴑ' => 'ⴑ', + 'Ⴒ' => 'ⴒ', + 'Ⴓ' => 'ⴓ', + 'Ⴔ' => 'ⴔ', + 'Ⴕ' => 'ⴕ', + 'Ⴖ' => 'ⴖ', + 'Ⴗ' => 'ⴗ', + 'Ⴘ' => 'ⴘ', + 'Ⴙ' => 'ⴙ', + 'Ⴚ' => 'ⴚ', + 'Ⴛ' => 'ⴛ', + 'Ⴜ' => 'ⴜ', + 'Ⴝ' => 'ⴝ', + 'Ⴞ' => 'ⴞ', + 'Ⴟ' => 'ⴟ', + 'Ⴠ' => 'ⴠ', + 'Ⴡ' => 'ⴡ', + 'Ⴢ' => 'ⴢ', + 'Ⴣ' => 'ⴣ', + 'Ⴤ' => 'ⴤ', + 'Ⴥ' => 'ⴥ', + 'Ⴧ' => 'ⴧ', + 'Ⴭ' => 'ⴭ', + 'Ꭰ' => 'ꭰ', + 'Ꭱ' => 'ꭱ', + 'Ꭲ' => 'ꭲ', + 'Ꭳ' => 'ꭳ', + 'Ꭴ' => 'ꭴ', + 'Ꭵ' => 'ꭵ', + 'Ꭶ' => 'ꭶ', + 'Ꭷ' => 'ꭷ', + 'Ꭸ' => 'ꭸ', + 'Ꭹ' => 'ꭹ', + 'Ꭺ' => 'ꭺ', + 'Ꭻ' => 'ꭻ', + 'Ꭼ' => 'ꭼ', + 'Ꭽ' => 'ꭽ', + 'Ꭾ' => 'ꭾ', + 'Ꭿ' => 'ꭿ', + 'Ꮀ' => 'ꮀ', + 'Ꮁ' => 'ꮁ', + 'Ꮂ' => 'ꮂ', + 'Ꮃ' => 'ꮃ', + 'Ꮄ' => 'ꮄ', + 'Ꮅ' => 'ꮅ', + 'Ꮆ' => 'ꮆ', + 'Ꮇ' => 'ꮇ', + 'Ꮈ' => 'ꮈ', + 'Ꮉ' => 'ꮉ', + 'Ꮊ' => 'ꮊ', + 'Ꮋ' => 'ꮋ', + 'Ꮌ' => 'ꮌ', + 'Ꮍ' => 'ꮍ', + 'Ꮎ' => 'ꮎ', + 'Ꮏ' => 'ꮏ', + 'Ꮐ' => 'ꮐ', + 'Ꮑ' => 'ꮑ', + 'Ꮒ' => 'ꮒ', + 'Ꮓ' => 'ꮓ', + 'Ꮔ' => 'ꮔ', + 'Ꮕ' => 'ꮕ', + 'Ꮖ' => 'ꮖ', + 'Ꮗ' => 'ꮗ', + 'Ꮘ' => 'ꮘ', + 'Ꮙ' => 'ꮙ', + 'Ꮚ' => 'ꮚ', + 'Ꮛ' => 'ꮛ', + 'Ꮜ' => 'ꮜ', + 'Ꮝ' => 'ꮝ', + 'Ꮞ' => 'ꮞ', + 'Ꮟ' => 'ꮟ', + 'Ꮠ' => 'ꮠ', + 'Ꮡ' => 'ꮡ', + 'Ꮢ' => 'ꮢ', + 'Ꮣ' => 'ꮣ', + 'Ꮤ' => 'ꮤ', + 'Ꮥ' => 'ꮥ', + 'Ꮦ' => 'ꮦ', + 'Ꮧ' => 'ꮧ', + 'Ꮨ' => 'ꮨ', + 'Ꮩ' => 'ꮩ', + 'Ꮪ' => 'ꮪ', + 'Ꮫ' => 'ꮫ', + 'Ꮬ' => 'ꮬ', + 'Ꮭ' => 'ꮭ', + 'Ꮮ' => 'ꮮ', + 'Ꮯ' => 'ꮯ', + 'Ꮰ' => 'ꮰ', + 'Ꮱ' => 'ꮱ', + 'Ꮲ' => 'ꮲ', + 'Ꮳ' => 'ꮳ', + 'Ꮴ' => 'ꮴ', + 'Ꮵ' => 'ꮵ', + 'Ꮶ' => 'ꮶ', + 'Ꮷ' => 'ꮷ', + 'Ꮸ' => 'ꮸ', + 'Ꮹ' => 'ꮹ', + 'Ꮺ' => 'ꮺ', + 'Ꮻ' => 'ꮻ', + 'Ꮼ' => 'ꮼ', + 'Ꮽ' => 'ꮽ', + 'Ꮾ' => 'ꮾ', + 'Ꮿ' => 'ꮿ', + 'Ᏸ' => 'ᏸ', + 'Ᏹ' => 'ᏹ', + 'Ᏺ' => 'ᏺ', + 'Ᏻ' => 'ᏻ', + 'Ᏼ' => 'ᏼ', + 'Ᏽ' => 'ᏽ', + 'Ა' => 'ა', + 'Ბ' => 'ბ', + 'Გ' => 'გ', + 'Დ' => 'დ', + 'Ე' => 'ე', + 'Ვ' => 'ვ', + 'Ზ' => 'ზ', + 'Თ' => 'თ', + 'Ი' => 'ი', + 'Კ' => 'კ', + 'Ლ' => 'ლ', + 'Მ' => 'მ', + 'Ნ' => 'ნ', + 'Ო' => 'ო', + 'Პ' => 'პ', + 'Ჟ' => 'ჟ', + 'Რ' => 'რ', + 'Ს' => 'ს', + 'Ტ' => 'ტ', + 'Უ' => 'უ', + 'Ფ' => 'ფ', + 'Ქ' => 'ქ', + 'Ღ' => 'ღ', + 'Ყ' => 'ყ', + 'Შ' => 'შ', + 'Ჩ' => 'ჩ', + 'Ც' => 'ც', + 'Ძ' => 'ძ', + 'Წ' => 'წ', + 'Ჭ' => 'ჭ', + 'Ხ' => 'ხ', + 'Ჯ' => 'ჯ', + 'Ჰ' => 'ჰ', + 'Ჱ' => 'ჱ', + 'Ჲ' => 'ჲ', + 'Ჳ' => 'ჳ', + 'Ჴ' => 'ჴ', + 'Ჵ' => 'ჵ', + 'Ჶ' => 'ჶ', + 'Ჷ' => 'ჷ', + 'Ჸ' => 'ჸ', + 'Ჹ' => 'ჹ', + 'Ჺ' => 'ჺ', + 'Ჽ' => 'ჽ', + 'Ჾ' => 'ჾ', + 'Ჿ' => 'ჿ', + 'Ḁ' => 'ḁ', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'ḍ', + 'Ḏ' => 'ḏ', + 'Ḑ' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'ḝ', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'Ṁ' => 'ṁ', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'ṅ', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'ṍ', + 'Ṏ' => 'ṏ', + 'Ṑ' => 'ṑ', + 'Ṓ' => 'ṓ', + 'Ṕ' => 'ṕ', + 'Ṗ' => 'ṗ', + 'Ṙ' => 'ṙ', + 'Ṛ' => 'ṛ', + 'Ṝ' => 'ṝ', + 'Ṟ' => 'ṟ', + 'Ṡ' => 'ṡ', + 'Ṣ' => 'ṣ', + 'Ṥ' => 'ṥ', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'ṭ', + 'Ṯ' => 'ṯ', + 'Ṱ' => 'ṱ', + 'Ṳ' => 'ṳ', + 'Ṵ' => 'ṵ', + 'Ṷ' => 'ṷ', + 'Ṹ' => 'ṹ', + 'Ṻ' => 'ṻ', + 'Ṽ' => 'ṽ', + 'Ṿ' => 'ṿ', + 'Ẁ' => 'ẁ', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'ẍ', + 'Ẏ' => 'ẏ', + 'Ẑ' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'ề', + 'Ể' => 'ể', + 'Ễ' => 'ễ', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'ọ', + 'Ỏ' => 'ỏ', + 'Ố' => 'ố', + 'Ồ' => 'ồ', + 'Ổ' => 'ổ', + 'Ỗ' => 'ỗ', + 'Ộ' => 'ộ', + 'Ớ' => 'ớ', + 'Ờ' => 'ờ', + 'Ở' => 'ở', + 'Ỡ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'ử', + 'Ữ' => 'ữ', + 'Ự' => 'ự', + 'Ỳ' => 'ỳ', + 'Ỵ' => 'ỵ', + 'Ỷ' => 'ỷ', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'ỻ', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'ἀ', + 'Ἁ' => 'ἁ', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'Ἅ' => 'ἅ', + 'Ἆ' => 'ἆ', + 'Ἇ' => 'ἇ', + 'Ἐ' => 'ἐ', + 'Ἑ' => 'ἑ', + 'Ἒ' => 'ἒ', + 'Ἓ' => 'ἓ', + 'Ἔ' => 'ἔ', + 'Ἕ' => 'ἕ', + 'Ἠ' => 'ἠ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'ἢ', + 'Ἣ' => 'ἣ', + 'Ἤ' => 'ἤ', + 'Ἥ' => 'ἥ', + 'Ἦ' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'ἰ', + 'Ἱ' => 'ἱ', + 'Ἲ' => 'ἲ', + 'Ἳ' => 'ἳ', + 'Ἴ' => 'ἴ', + 'Ἵ' => 'ἵ', + 'Ἶ' => 'ἶ', + 'Ἷ' => 'ἷ', + 'Ὀ' => 'ὀ', + 'Ὁ' => 'ὁ', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'Ὅ' => 'ὅ', + 'Ὑ' => 'ὑ', + 'Ὓ' => 'ὓ', + 'Ὕ' => 'ὕ', + 'Ὗ' => 'ὗ', + 'Ὠ' => 'ὠ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'ὢ', + 'Ὣ' => 'ὣ', + 'Ὤ' => 'ὤ', + 'Ὥ' => 'ὥ', + 'Ὦ' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'ᾀ', + 'ᾉ' => 'ᾁ', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'ᾍ' => 'ᾅ', + 'ᾎ' => 'ᾆ', + 'ᾏ' => 'ᾇ', + 'ᾘ' => 'ᾐ', + 'ᾙ' => 'ᾑ', + 'ᾚ' => 'ᾒ', + 'ᾛ' => 'ᾓ', + 'ᾜ' => 'ᾔ', + 'ᾝ' => 'ᾕ', + 'ᾞ' => 'ᾖ', + 'ᾟ' => 'ᾗ', + 'ᾨ' => 'ᾠ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'ᾢ', + 'ᾫ' => 'ᾣ', + 'ᾬ' => 'ᾤ', + 'ᾭ' => 'ᾥ', + 'ᾮ' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'ᾰ', + 'Ᾱ' => 'ᾱ', + 'Ὰ' => 'ὰ', + 'Ά' => 'ά', + 'ᾼ' => 'ᾳ', + 'Ὲ' => 'ὲ', + 'Έ' => 'έ', + 'Ὴ' => 'ὴ', + 'Ή' => 'ή', + 'ῌ' => 'ῃ', + 'Ῐ' => 'ῐ', + 'Ῑ' => 'ῑ', + 'Ὶ' => 'ὶ', + 'Ί' => 'ί', + 'Ῠ' => 'ῠ', + 'Ῡ' => 'ῡ', + 'Ὺ' => 'ὺ', + 'Ύ' => 'ύ', + 'Ῥ' => 'ῥ', + 'Ὸ' => 'ὸ', + 'Ό' => 'ό', + 'Ὼ' => 'ὼ', + 'Ώ' => 'ώ', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'Å' => 'å', + 'Ⅎ' => 'ⅎ', + 'Ⅰ' => 'ⅰ', + 'Ⅱ' => 'ⅱ', + 'Ⅲ' => 'ⅲ', + 'Ⅳ' => 'ⅳ', + 'Ⅴ' => 'ⅴ', + 'Ⅵ' => 'ⅵ', + 'Ⅶ' => 'ⅶ', + 'Ⅷ' => 'ⅷ', + 'Ⅸ' => 'ⅸ', + 'Ⅹ' => 'ⅹ', + 'Ⅺ' => 'ⅺ', + 'Ⅻ' => 'ⅻ', + 'Ⅼ' => 'ⅼ', + 'Ⅽ' => 'ⅽ', + 'Ⅾ' => 'ⅾ', + 'Ⅿ' => 'ⅿ', + 'Ↄ' => 'ↄ', + 'Ⓐ' => 'ⓐ', + 'Ⓑ' => 'ⓑ', + 'Ⓒ' => 'ⓒ', + 'Ⓓ' => 'ⓓ', + 'Ⓔ' => 'ⓔ', + 'Ⓕ' => 'ⓕ', + 'Ⓖ' => 'ⓖ', + 'Ⓗ' => 'ⓗ', + 'Ⓘ' => 'ⓘ', + 'Ⓙ' => 'ⓙ', + 'Ⓚ' => 'ⓚ', + 'Ⓛ' => 'ⓛ', + 'Ⓜ' => 'ⓜ', + 'Ⓝ' => 'ⓝ', + 'Ⓞ' => 'ⓞ', + 'Ⓟ' => 'ⓟ', + 'Ⓠ' => 'ⓠ', + 'Ⓡ' => 'ⓡ', + 'Ⓢ' => 'ⓢ', + 'Ⓣ' => 'ⓣ', + 'Ⓤ' => 'ⓤ', + 'Ⓥ' => 'ⓥ', + 'Ⓦ' => 'ⓦ', + 'Ⓧ' => 'ⓧ', + 'Ⓨ' => 'ⓨ', + 'Ⓩ' => 'ⓩ', + 'Ⰰ' => 'ⰰ', + 'Ⰱ' => 'ⰱ', + 'Ⰲ' => 'ⰲ', + 'Ⰳ' => 'ⰳ', + 'Ⰴ' => 'ⰴ', + 'Ⰵ' => 'ⰵ', + 'Ⰶ' => 'ⰶ', + 'Ⰷ' => 'ⰷ', + 'Ⰸ' => 'ⰸ', + 'Ⰹ' => 'ⰹ', + 'Ⰺ' => 'ⰺ', + 'Ⰻ' => 'ⰻ', + 'Ⰼ' => 'ⰼ', + 'Ⰽ' => 'ⰽ', + 'Ⰾ' => 'ⰾ', + 'Ⰿ' => 'ⰿ', + 'Ⱀ' => 'ⱀ', + 'Ⱁ' => 'ⱁ', + 'Ⱂ' => 'ⱂ', + 'Ⱃ' => 'ⱃ', + 'Ⱄ' => 'ⱄ', + 'Ⱅ' => 'ⱅ', + 'Ⱆ' => 'ⱆ', + 'Ⱇ' => 'ⱇ', + 'Ⱈ' => 'ⱈ', + 'Ⱉ' => 'ⱉ', + 'Ⱊ' => 'ⱊ', + 'Ⱋ' => 'ⱋ', + 'Ⱌ' => 'ⱌ', + 'Ⱍ' => 'ⱍ', + 'Ⱎ' => 'ⱎ', + 'Ⱏ' => 'ⱏ', + 'Ⱐ' => 'ⱐ', + 'Ⱑ' => 'ⱑ', + 'Ⱒ' => 'ⱒ', + 'Ⱓ' => 'ⱓ', + 'Ⱔ' => 'ⱔ', + 'Ⱕ' => 'ⱕ', + 'Ⱖ' => 'ⱖ', + 'Ⱗ' => 'ⱗ', + 'Ⱘ' => 'ⱘ', + 'Ⱙ' => 'ⱙ', + 'Ⱚ' => 'ⱚ', + 'Ⱛ' => 'ⱛ', + 'Ⱜ' => 'ⱜ', + 'Ⱝ' => 'ⱝ', + 'Ⱞ' => 'ⱞ', + 'Ⱡ' => 'ⱡ', + 'Ɫ' => 'ɫ', + 'Ᵽ' => 'ᵽ', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'Ɑ' => 'ɑ', + 'Ɱ' => 'ɱ', + 'Ɐ' => 'ɐ', + 'Ɒ' => 'ɒ', + 'Ⱳ' => 'ⱳ', + 'Ⱶ' => 'ⱶ', + 'Ȿ' => 'ȿ', + 'Ɀ' => 'ɀ', + 'Ⲁ' => 'ⲁ', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'ⲅ', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'ⲍ', + 'Ⲏ' => 'ⲏ', + 'Ⲑ' => 'ⲑ', + 'Ⲓ' => 'ⲓ', + 'Ⲕ' => 'ⲕ', + 'Ⲗ' => 'ⲗ', + 'Ⲙ' => 'ⲙ', + 'Ⲛ' => 'ⲛ', + 'Ⲝ' => 'ⲝ', + 'Ⲟ' => 'ⲟ', + 'Ⲡ' => 'ⲡ', + 'Ⲣ' => 'ⲣ', + 'Ⲥ' => 'ⲥ', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'ⲭ', + 'Ⲯ' => 'ⲯ', + 'Ⲱ' => 'ⲱ', + 'Ⲳ' => 'ⲳ', + 'Ⲵ' => 'ⲵ', + 'Ⲷ' => 'ⲷ', + 'Ⲹ' => 'ⲹ', + 'Ⲻ' => 'ⲻ', + 'Ⲽ' => 'ⲽ', + 'Ⲿ' => 'ⲿ', + 'Ⳁ' => 'ⳁ', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'ⳅ', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'ⳍ', + 'Ⳏ' => 'ⳏ', + 'Ⳑ' => 'ⳑ', + 'Ⳓ' => 'ⳓ', + 'Ⳕ' => 'ⳕ', + 'Ⳗ' => 'ⳗ', + 'Ⳙ' => 'ⳙ', + 'Ⳛ' => 'ⳛ', + 'Ⳝ' => 'ⳝ', + 'Ⳟ' => 'ⳟ', + 'Ⳡ' => 'ⳡ', + 'Ⳣ' => 'ⳣ', + 'Ⳬ' => 'ⳬ', + 'Ⳮ' => 'ⳮ', + 'Ⳳ' => 'ⳳ', + 'Ꙁ' => 'ꙁ', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ꙅ', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ꙍ', + 'Ꙏ' => 'ꙏ', + 'Ꙑ' => 'ꙑ', + 'Ꙓ' => 'ꙓ', + 'Ꙕ' => 'ꙕ', + 'Ꙗ' => 'ꙗ', + 'Ꙙ' => 'ꙙ', + 'Ꙛ' => 'ꙛ', + 'Ꙝ' => 'ꙝ', + 'Ꙟ' => 'ꙟ', + 'Ꙡ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ꙭ', + 'Ꚁ' => 'ꚁ', + 'Ꚃ' => 'ꚃ', + 'Ꚅ' => 'ꚅ', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'ꚋ', + 'Ꚍ' => 'ꚍ', + 'Ꚏ' => 'ꚏ', + 'Ꚑ' => 'ꚑ', + 'Ꚓ' => 'ꚓ', + 'Ꚕ' => 'ꚕ', + 'Ꚗ' => 'ꚗ', + 'Ꚙ' => 'ꚙ', + 'Ꚛ' => 'ꚛ', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'Ꝁ' => 'ꝁ', + 'Ꝃ' => 'ꝃ', + 'Ꝅ' => 'ꝅ', + 'Ꝇ' => 'ꝇ', + 'Ꝉ' => 'ꝉ', + 'Ꝋ' => 'ꝋ', + 'Ꝍ' => 'ꝍ', + 'Ꝏ' => 'ꝏ', + 'Ꝑ' => 'ꝑ', + 'Ꝓ' => 'ꝓ', + 'Ꝕ' => 'ꝕ', + 'Ꝗ' => 'ꝗ', + 'Ꝙ' => 'ꝙ', + 'Ꝛ' => 'ꝛ', + 'Ꝝ' => 'ꝝ', + 'Ꝟ' => 'ꝟ', + 'Ꝡ' => 'ꝡ', + 'Ꝣ' => 'ꝣ', + 'Ꝥ' => 'ꝥ', + 'Ꝧ' => 'ꝧ', + 'Ꝩ' => 'ꝩ', + 'Ꝫ' => 'ꝫ', + 'Ꝭ' => 'ꝭ', + 'Ꝯ' => 'ꝯ', + 'Ꝺ' => 'ꝺ', + 'Ꝼ' => 'ꝼ', + 'Ᵹ' => 'ᵹ', + 'Ꝿ' => 'ꝿ', + 'Ꞁ' => 'ꞁ', + 'Ꞃ' => 'ꞃ', + 'Ꞅ' => 'ꞅ', + 'Ꞇ' => 'ꞇ', + 'Ꞌ' => 'ꞌ', + 'Ɥ' => 'ɥ', + 'Ꞑ' => 'ꞑ', + 'Ꞓ' => 'ꞓ', + 'Ꞗ' => 'ꞗ', + 'Ꞙ' => 'ꞙ', + 'Ꞛ' => 'ꞛ', + 'Ꞝ' => 'ꞝ', + 'Ꞟ' => 'ꞟ', + 'Ꞡ' => 'ꞡ', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'ꞩ', + 'Ɦ' => 'ɦ', + 'Ɜ' => 'ɜ', + 'Ɡ' => 'ɡ', + 'Ɬ' => 'ɬ', + 'Ɪ' => 'ɪ', + 'Ʞ' => 'ʞ', + 'Ʇ' => 'ʇ', + 'Ʝ' => 'ʝ', + 'Ꭓ' => 'ꭓ', + 'Ꞵ' => 'ꞵ', + 'Ꞷ' => 'ꞷ', + 'Ꞹ' => 'ꞹ', + 'Ꞻ' => 'ꞻ', + 'Ꞽ' => 'ꞽ', + 'Ꞿ' => 'ꞿ', + 'Ꟃ' => 'ꟃ', + 'Ꞔ' => 'ꞔ', + 'Ʂ' => 'ʂ', + 'Ᶎ' => 'ᶎ', + 'Ꟈ' => 'ꟈ', + 'Ꟊ' => 'ꟊ', + 'Ꟶ' => 'ꟶ', + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + '𐐀' => '𐐨', + '𐐁' => '𐐩', + '𐐂' => '𐐪', + '𐐃' => '𐐫', + '𐐄' => '𐐬', + '𐐅' => '𐐭', + '𐐆' => '𐐮', + '𐐇' => '𐐯', + '𐐈' => '𐐰', + '𐐉' => '𐐱', + '𐐊' => '𐐲', + '𐐋' => '𐐳', + '𐐌' => '𐐴', + '𐐍' => '𐐵', + '𐐎' => '𐐶', + '𐐏' => '𐐷', + '𐐐' => '𐐸', + '𐐑' => '𐐹', + '𐐒' => '𐐺', + '𐐓' => '𐐻', + '𐐔' => '𐐼', + '𐐕' => '𐐽', + '𐐖' => '𐐾', + '𐐗' => '𐐿', + '𐐘' => '𐑀', + '𐐙' => '𐑁', + '𐐚' => '𐑂', + '𐐛' => '𐑃', + '𐐜' => '𐑄', + '𐐝' => '𐑅', + '𐐞' => '𐑆', + '𐐟' => '𐑇', + '𐐠' => '𐑈', + '𐐡' => '𐑉', + '𐐢' => '𐑊', + '𐐣' => '𐑋', + '𐐤' => '𐑌', + '𐐥' => '𐑍', + '𐐦' => '𐑎', + '𐐧' => '𐑏', + '𐒰' => '𐓘', + '𐒱' => '𐓙', + '𐒲' => '𐓚', + '𐒳' => '𐓛', + '𐒴' => '𐓜', + '𐒵' => '𐓝', + '𐒶' => '𐓞', + '𐒷' => '𐓟', + '𐒸' => '𐓠', + '𐒹' => '𐓡', + '𐒺' => '𐓢', + '𐒻' => '𐓣', + '𐒼' => '𐓤', + '𐒽' => '𐓥', + '𐒾' => '𐓦', + '𐒿' => '𐓧', + '𐓀' => '𐓨', + '𐓁' => '𐓩', + '𐓂' => '𐓪', + '𐓃' => '𐓫', + '𐓄' => '𐓬', + '𐓅' => '𐓭', + '𐓆' => '𐓮', + '𐓇' => '𐓯', + '𐓈' => '𐓰', + '𐓉' => '𐓱', + '𐓊' => '𐓲', + '𐓋' => '𐓳', + '𐓌' => '𐓴', + '𐓍' => '𐓵', + '𐓎' => '𐓶', + '𐓏' => '𐓷', + '𐓐' => '𐓸', + '𐓑' => '𐓹', + '𐓒' => '𐓺', + '𐓓' => '𐓻', + '𐲀' => '𐳀', + '𐲁' => '𐳁', + '𐲂' => '𐳂', + '𐲃' => '𐳃', + '𐲄' => '𐳄', + '𐲅' => '𐳅', + '𐲆' => '𐳆', + '𐲇' => '𐳇', + '𐲈' => '𐳈', + '𐲉' => '𐳉', + '𐲊' => '𐳊', + '𐲋' => '𐳋', + '𐲌' => '𐳌', + '𐲍' => '𐳍', + '𐲎' => '𐳎', + '𐲏' => '𐳏', + '𐲐' => '𐳐', + '𐲑' => '𐳑', + '𐲒' => '𐳒', + '𐲓' => '𐳓', + '𐲔' => '𐳔', + '𐲕' => '𐳕', + '𐲖' => '𐳖', + '𐲗' => '𐳗', + '𐲘' => '𐳘', + '𐲙' => '𐳙', + '𐲚' => '𐳚', + '𐲛' => '𐳛', + '𐲜' => '𐳜', + '𐲝' => '𐳝', + '𐲞' => '𐳞', + '𐲟' => '𐳟', + '𐲠' => '𐳠', + '𐲡' => '𐳡', + '𐲢' => '𐳢', + '𐲣' => '𐳣', + '𐲤' => '𐳤', + '𐲥' => '𐳥', + '𐲦' => '𐳦', + '𐲧' => '𐳧', + '𐲨' => '𐳨', + '𐲩' => '𐳩', + '𐲪' => '𐳪', + '𐲫' => '𐳫', + '𐲬' => '𐳬', + '𐲭' => '𐳭', + '𐲮' => '𐳮', + '𐲯' => '𐳯', + '𐲰' => '𐳰', + '𐲱' => '𐳱', + '𐲲' => '𐳲', + '𑢠' => '𑣀', + '𑢡' => '𑣁', + '𑢢' => '𑣂', + '𑢣' => '𑣃', + '𑢤' => '𑣄', + '𑢥' => '𑣅', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + '𑢭' => '𑣍', + '𑢮' => '𑣎', + '𑢯' => '𑣏', + '𑢰' => '𑣐', + '𑢱' => '𑣑', + '𑢲' => '𑣒', + '𑢳' => '𑣓', + '𑢴' => '𑣔', + '𑢵' => '𑣕', + '𑢶' => '𑣖', + '𑢷' => '𑣗', + '𑢸' => '𑣘', + '𑢹' => '𑣙', + '𑢺' => '𑣚', + '𑢻' => '𑣛', + '𑢼' => '𑣜', + '𑢽' => '𑣝', + '𑢾' => '𑣞', + '𑢿' => '𑣟', + '𖹀' => '𖹠', + '𖹁' => '𖹡', + '𖹂' => '𖹢', + '𖹃' => '𖹣', + '𖹄' => '𖹤', + '𖹅' => '𖹥', + '𖹆' => '𖹦', + '𖹇' => '𖹧', + '𖹈' => '𖹨', + '𖹉' => '𖹩', + '𖹊' => '𖹪', + '𖹋' => '𖹫', + '𖹌' => '𖹬', + '𖹍' => '𖹭', + '𖹎' => '𖹮', + '𖹏' => '𖹯', + '𖹐' => '𖹰', + '𖹑' => '𖹱', + '𖹒' => '𖹲', + '𖹓' => '𖹳', + '𖹔' => '𖹴', + '𖹕' => '𖹵', + '𖹖' => '𖹶', + '𖹗' => '𖹷', + '𖹘' => '𖹸', + '𖹙' => '𖹹', + '𖹚' => '𖹺', + '𖹛' => '𖹻', + '𖹜' => '𖹼', + '𖹝' => '𖹽', + '𖹞' => '𖹾', + '𖹟' => '𖹿', + '𞤀' => '𞤢', + '𞤁' => '𞤣', + '𞤂' => '𞤤', + '𞤃' => '𞤥', + '𞤄' => '𞤦', + '𞤅' => '𞤧', + '𞤆' => '𞤨', + '𞤇' => '𞤩', + '𞤈' => '𞤪', + '𞤉' => '𞤫', + '𞤊' => '𞤬', + '𞤋' => '𞤭', + '𞤌' => '𞤮', + '𞤍' => '𞤯', + '𞤎' => '𞤰', + '𞤏' => '𞤱', + '𞤐' => '𞤲', + '𞤑' => '𞤳', + '𞤒' => '𞤴', + '𞤓' => '𞤵', + '𞤔' => '𞤶', + '𞤕' => '𞤷', + '𞤖' => '𞤸', + '𞤗' => '𞤹', + '𞤘' => '𞤺', + '𞤙' => '𞤻', + '𞤚' => '𞤼', + '𞤛' => '𞤽', + '𞤜' => '𞤾', + '𞤝' => '𞤿', + '𞤞' => '𞥀', + '𞤟' => '𞥁', + '𞤠' => '𞥂', + '𞤡' => '𞥃', +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php new file mode 100644 index 0000000..2a8f6e7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -0,0 +1,5 @@ +<?php + +// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt + +return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u'; diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php new file mode 100644 index 0000000..56b9cb8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php @@ -0,0 +1,1489 @@ +<?php + +return array ( + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Μ', + 'à' => 'À', + 'á' => 'Á', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'å' => 'Å', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'Ì', + 'í' => 'Í', + 'î' => 'Î', + 'ï' => 'Ï', + 'ð' => 'Ð', + 'ñ' => 'Ñ', + 'ò' => 'Ò', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ü', + 'ý' => 'Ý', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'ā' => 'Ā', + 'ă' => 'Ă', + 'ą' => 'Ą', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'ċ' => 'Ċ', + 'č' => 'Č', + 'ď' => 'Ď', + 'đ' => 'Đ', + 'ē' => 'Ē', + 'ĕ' => 'Ĕ', + 'ė' => 'Ė', + 'ę' => 'Ę', + 'ě' => 'Ě', + 'ĝ' => 'Ĝ', + 'ğ' => 'Ğ', + 'ġ' => 'Ġ', + 'ģ' => 'Ģ', + 'ĥ' => 'Ĥ', + 'ħ' => 'Ħ', + 'ĩ' => 'Ĩ', + 'ī' => 'Ī', + 'ĭ' => 'Ĭ', + 'į' => 'Į', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ĵ', + 'ķ' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ļ', + 'ľ' => 'Ľ', + 'ŀ' => 'Ŀ', + 'ł' => 'Ł', + 'ń' => 'Ń', + 'ņ' => 'Ņ', + 'ň' => 'Ň', + 'ŋ' => 'Ŋ', + 'ō' => 'Ō', + 'ŏ' => 'Ŏ', + 'ő' => 'Ő', + 'œ' => 'Œ', + 'ŕ' => 'Ŕ', + 'ŗ' => 'Ŗ', + 'ř' => 'Ř', + 'ś' => 'Ś', + 'ŝ' => 'Ŝ', + 'ş' => 'Ş', + 'š' => 'Š', + 'ţ' => 'Ţ', + 'ť' => 'Ť', + 'ŧ' => 'Ŧ', + 'ũ' => 'Ũ', + 'ū' => 'Ū', + 'ŭ' => 'Ŭ', + 'ů' => 'Ů', + 'ű' => 'Ű', + 'ų' => 'Ų', + 'ŵ' => 'Ŵ', + 'ŷ' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Ż', + 'ž' => 'Ž', + 'ſ' => 'S', + 'ƀ' => 'Ƀ', + 'ƃ' => 'Ƃ', + 'ƅ' => 'Ƅ', + 'ƈ' => 'Ƈ', + 'ƌ' => 'Ƌ', + 'ƒ' => 'Ƒ', + 'ƕ' => 'Ƕ', + 'ƙ' => 'Ƙ', + 'ƚ' => 'Ƚ', + 'ƞ' => 'Ƞ', + 'ơ' => 'Ơ', + 'ƣ' => 'Ƣ', + 'ƥ' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'ƭ' => 'Ƭ', + 'ư' => 'Ư', + 'ƴ' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'ƿ' => 'Ƿ', + 'Dž' => 'DŽ', + 'dž' => 'DŽ', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Nj' => 'NJ', + 'nj' => 'NJ', + 'ǎ' => 'Ǎ', + 'ǐ' => 'Ǐ', + 'ǒ' => 'Ǒ', + 'ǔ' => 'Ǔ', + 'ǖ' => 'Ǖ', + 'ǘ' => 'Ǘ', + 'ǚ' => 'Ǚ', + 'ǜ' => 'Ǜ', + 'ǝ' => 'Ǝ', + 'ǟ' => 'Ǟ', + 'ǡ' => 'Ǡ', + 'ǣ' => 'Ǣ', + 'ǥ' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'ǩ' => 'Ǩ', + 'ǫ' => 'Ǫ', + 'ǭ' => 'Ǭ', + 'ǯ' => 'Ǯ', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ǵ', + 'ǹ' => 'Ǹ', + 'ǻ' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'ǿ' => 'Ǿ', + 'ȁ' => 'Ȁ', + 'ȃ' => 'Ȃ', + 'ȅ' => 'Ȅ', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'ȋ' => 'Ȋ', + 'ȍ' => 'Ȍ', + 'ȏ' => 'Ȏ', + 'ȑ' => 'Ȑ', + 'ȓ' => 'Ȓ', + 'ȕ' => 'Ȕ', + 'ȗ' => 'Ȗ', + 'ș' => 'Ș', + 'ț' => 'Ț', + 'ȝ' => 'Ȝ', + 'ȟ' => 'Ȟ', + 'ȣ' => 'Ȣ', + 'ȥ' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'ȩ' => 'Ȩ', + 'ȫ' => 'Ȫ', + 'ȭ' => 'Ȭ', + 'ȯ' => 'Ȯ', + 'ȱ' => 'Ȱ', + 'ȳ' => 'Ȳ', + 'ȼ' => 'Ȼ', + 'ȿ' => 'Ȿ', + 'ɀ' => 'Ɀ', + 'ɂ' => 'Ɂ', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'ɋ' => 'Ɋ', + 'ɍ' => 'Ɍ', + 'ɏ' => 'Ɏ', + 'ɐ' => 'Ɐ', + 'ɑ' => 'Ɑ', + 'ɒ' => 'Ɒ', + 'ɓ' => 'Ɓ', + 'ɔ' => 'Ɔ', + 'ɖ' => 'Ɖ', + 'ɗ' => 'Ɗ', + 'ə' => 'Ə', + 'ɛ' => 'Ɛ', + 'ɜ' => 'Ɜ', + 'ɠ' => 'Ɠ', + 'ɡ' => 'Ɡ', + 'ɣ' => 'Ɣ', + 'ɥ' => 'Ɥ', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Ɨ', + 'ɩ' => 'Ɩ', + 'ɪ' => 'Ɪ', + 'ɫ' => 'Ɫ', + 'ɬ' => 'Ɬ', + 'ɯ' => 'Ɯ', + 'ɱ' => 'Ɱ', + 'ɲ' => 'Ɲ', + 'ɵ' => 'Ɵ', + 'ɽ' => 'Ɽ', + 'ʀ' => 'Ʀ', + 'ʂ' => 'Ʂ', + 'ʃ' => 'Ʃ', + 'ʇ' => 'Ʇ', + 'ʈ' => 'Ʈ', + 'ʉ' => 'Ʉ', + 'ʊ' => 'Ʊ', + 'ʋ' => 'Ʋ', + 'ʌ' => 'Ʌ', + 'ʒ' => 'Ʒ', + 'ʝ' => 'Ʝ', + 'ʞ' => 'Ʞ', + 'ͅ' => 'Ι', + 'ͱ' => 'Ͱ', + 'ͳ' => 'Ͳ', + 'ͷ' => 'Ͷ', + 'ͻ' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ͽ', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Β', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Μ', + 'ν' => 'Ν', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'π' => 'Π', + 'ρ' => 'Ρ', + 'ς' => 'Σ', + 'σ' => 'Σ', + 'τ' => 'Τ', + 'υ' => 'Υ', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ϊ' => 'Ϊ', + 'ϋ' => 'Ϋ', + 'ό' => 'Ό', + 'ύ' => 'Ύ', + 'ώ' => 'Ώ', + 'ϐ' => 'Β', + 'ϑ' => 'Θ', + 'ϕ' => 'Φ', + 'ϖ' => 'Π', + 'ϗ' => 'Ϗ', + 'ϙ' => 'Ϙ', + 'ϛ' => 'Ϛ', + 'ϝ' => 'Ϝ', + 'ϟ' => 'Ϟ', + 'ϡ' => 'Ϡ', + 'ϣ' => 'Ϣ', + 'ϥ' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'ϩ' => 'Ϩ', + 'ϫ' => 'Ϫ', + 'ϭ' => 'Ϭ', + 'ϯ' => 'Ϯ', + 'ϰ' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Ϳ', + 'ϵ' => 'Ε', + 'ϸ' => 'Ϸ', + 'ϻ' => 'Ϻ', + 'а' => 'А', + 'б' => 'Б', + 'в' => 'В', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'М', + 'н' => 'Н', + 'о' => 'О', + 'п' => 'П', + 'р' => 'Р', + 'с' => 'С', + 'т' => 'Т', + 'у' => 'У', + 'ф' => 'Ф', + 'х' => 'Х', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ъ' => 'Ъ', + 'ы' => 'Ы', + 'ь' => 'Ь', + 'э' => 'Э', + 'ю' => 'Ю', + 'я' => 'Я', + 'ѐ' => 'Ѐ', + 'ё' => 'Ё', + 'ђ' => 'Ђ', + 'ѓ' => 'Ѓ', + 'є' => 'Є', + 'ѕ' => 'Ѕ', + 'і' => 'І', + 'ї' => 'Ї', + 'ј' => 'Ј', + 'љ' => 'Љ', + 'њ' => 'Њ', + 'ћ' => 'Ћ', + 'ќ' => 'Ќ', + 'ѝ' => 'Ѝ', + 'ў' => 'Ў', + 'џ' => 'Џ', + 'ѡ' => 'Ѡ', + 'ѣ' => 'Ѣ', + 'ѥ' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'ѩ' => 'Ѩ', + 'ѫ' => 'Ѫ', + 'ѭ' => 'Ѭ', + 'ѯ' => 'Ѯ', + 'ѱ' => 'Ѱ', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ѵ', + 'ѷ' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'ѻ' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'ѿ' => 'Ѿ', + 'ҁ' => 'Ҁ', + 'ҋ' => 'Ҋ', + 'ҍ' => 'Ҍ', + 'ҏ' => 'Ҏ', + 'ґ' => 'Ґ', + 'ғ' => 'Ғ', + 'ҕ' => 'Ҕ', + 'җ' => 'Җ', + 'ҙ' => 'Ҙ', + 'қ' => 'Қ', + 'ҝ' => 'Ҝ', + 'ҟ' => 'Ҟ', + 'ҡ' => 'Ҡ', + 'ң' => 'Ң', + 'ҥ' => 'Ҥ', + 'ҧ' => 'Ҧ', + 'ҩ' => 'Ҩ', + 'ҫ' => 'Ҫ', + 'ҭ' => 'Ҭ', + 'ү' => 'Ү', + 'ұ' => 'Ұ', + 'ҳ' => 'Ҳ', + 'ҵ' => 'Ҵ', + 'ҷ' => 'Ҷ', + 'ҹ' => 'Ҹ', + 'һ' => 'Һ', + 'ҽ' => 'Ҽ', + 'ҿ' => 'Ҿ', + 'ӂ' => 'Ӂ', + 'ӄ' => 'Ӄ', + 'ӆ' => 'Ӆ', + 'ӈ' => 'Ӈ', + 'ӊ' => 'Ӊ', + 'ӌ' => 'Ӌ', + 'ӎ' => 'Ӎ', + 'ӏ' => 'Ӏ', + 'ӑ' => 'Ӑ', + 'ӓ' => 'Ӓ', + 'ӕ' => 'Ӕ', + 'ӗ' => 'Ӗ', + 'ә' => 'Ә', + 'ӛ' => 'Ӛ', + 'ӝ' => 'Ӝ', + 'ӟ' => 'Ӟ', + 'ӡ' => 'Ӡ', + 'ӣ' => 'Ӣ', + 'ӥ' => 'Ӥ', + 'ӧ' => 'Ӧ', + 'ө' => 'Ө', + 'ӫ' => 'Ӫ', + 'ӭ' => 'Ӭ', + 'ӯ' => 'Ӯ', + 'ӱ' => 'Ӱ', + 'ӳ' => 'Ӳ', + 'ӵ' => 'Ӵ', + 'ӷ' => 'Ӷ', + 'ӹ' => 'Ӹ', + 'ӻ' => 'Ӻ', + 'ӽ' => 'Ӽ', + 'ӿ' => 'Ӿ', + 'ԁ' => 'Ԁ', + 'ԃ' => 'Ԃ', + 'ԅ' => 'Ԅ', + 'ԇ' => 'Ԇ', + 'ԉ' => 'Ԉ', + 'ԋ' => 'Ԋ', + 'ԍ' => 'Ԍ', + 'ԏ' => 'Ԏ', + 'ԑ' => 'Ԑ', + 'ԓ' => 'Ԓ', + 'ԕ' => 'Ԕ', + 'ԗ' => 'Ԗ', + 'ԙ' => 'Ԙ', + 'ԛ' => 'Ԛ', + 'ԝ' => 'Ԝ', + 'ԟ' => 'Ԟ', + 'ԡ' => 'Ԡ', + 'ԣ' => 'Ԣ', + 'ԥ' => 'Ԥ', + 'ԧ' => 'Ԧ', + 'ԩ' => 'Ԩ', + 'ԫ' => 'Ԫ', + 'ԭ' => 'Ԭ', + 'ԯ' => 'Ԯ', + 'ա' => 'Ա', + 'բ' => 'Բ', + 'գ' => 'Գ', + 'դ' => 'Դ', + 'ե' => 'Ե', + 'զ' => 'Զ', + 'է' => 'Է', + 'ը' => 'Ը', + 'թ' => 'Թ', + 'ժ' => 'Ժ', + 'ի' => 'Ի', + 'լ' => 'Լ', + 'խ' => 'Խ', + 'ծ' => 'Ծ', + 'կ' => 'Կ', + 'հ' => 'Հ', + 'ձ' => 'Ձ', + 'ղ' => 'Ղ', + 'ճ' => 'Ճ', + 'մ' => 'Մ', + 'յ' => 'Յ', + 'ն' => 'Ն', + 'շ' => 'Շ', + 'ո' => 'Ո', + 'չ' => 'Չ', + 'պ' => 'Պ', + 'ջ' => 'Ջ', + 'ռ' => 'Ռ', + 'ս' => 'Ս', + 'վ' => 'Վ', + 'տ' => 'Տ', + 'ր' => 'Ր', + 'ց' => 'Ց', + 'ւ' => 'Ւ', + 'փ' => 'Փ', + 'ք' => 'Ք', + 'օ' => 'Օ', + 'ֆ' => 'Ֆ', + 'ა' => 'Ა', + 'ბ' => 'Ბ', + 'გ' => 'Გ', + 'დ' => 'Დ', + 'ე' => 'Ე', + 'ვ' => 'Ვ', + 'ზ' => 'Ზ', + 'თ' => 'Თ', + 'ი' => 'Ი', + 'კ' => 'Კ', + 'ლ' => 'Ლ', + 'მ' => 'Მ', + 'ნ' => 'Ნ', + 'ო' => 'Ო', + 'პ' => 'Პ', + 'ჟ' => 'Ჟ', + 'რ' => 'Რ', + 'ს' => 'Ს', + 'ტ' => 'Ტ', + 'უ' => 'Უ', + 'ფ' => 'Ფ', + 'ქ' => 'Ქ', + 'ღ' => 'Ღ', + 'ყ' => 'Ყ', + 'შ' => 'Შ', + 'ჩ' => 'Ჩ', + 'ც' => 'Ც', + 'ძ' => 'Ძ', + 'წ' => 'Წ', + 'ჭ' => 'Ჭ', + 'ხ' => 'Ხ', + 'ჯ' => 'Ჯ', + 'ჰ' => 'Ჰ', + 'ჱ' => 'Ჱ', + 'ჲ' => 'Ჲ', + 'ჳ' => 'Ჳ', + 'ჴ' => 'Ჴ', + 'ჵ' => 'Ჵ', + 'ჶ' => 'Ჶ', + 'ჷ' => 'Ჷ', + 'ჸ' => 'Ჸ', + 'ჹ' => 'Ჹ', + 'ჺ' => 'Ჺ', + 'ჽ' => 'Ჽ', + 'ჾ' => 'Ჾ', + 'ჿ' => 'Ჿ', + 'ᏸ' => 'Ᏸ', + 'ᏹ' => 'Ᏹ', + 'ᏺ' => 'Ᏺ', + 'ᏻ' => 'Ᏻ', + 'ᏼ' => 'Ᏼ', + 'ᏽ' => 'Ᏽ', + 'ᲀ' => 'В', + 'ᲁ' => 'Д', + 'ᲂ' => 'О', + 'ᲃ' => 'С', + 'ᲄ' => 'Т', + 'ᲅ' => 'Т', + 'ᲆ' => 'Ъ', + 'ᲇ' => 'Ѣ', + 'ᲈ' => 'Ꙋ', + 'ᵹ' => 'Ᵹ', + 'ᵽ' => 'Ᵽ', + 'ᶎ' => 'Ᶎ', + 'ḁ' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'ḍ' => 'Ḍ', + 'ḏ' => 'Ḏ', + 'ḑ' => 'Ḑ', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'ḝ' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'ṁ' => 'Ṁ', + 'ṃ' => 'Ṃ', + 'ṅ' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'ṍ' => 'Ṍ', + 'ṏ' => 'Ṏ', + 'ṑ' => 'Ṑ', + 'ṓ' => 'Ṓ', + 'ṕ' => 'Ṕ', + 'ṗ' => 'Ṗ', + 'ṙ' => 'Ṙ', + 'ṛ' => 'Ṛ', + 'ṝ' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'Ṡ', + 'ṣ' => 'Ṣ', + 'ṥ' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'ṭ' => 'Ṭ', + 'ṯ' => 'Ṯ', + 'ṱ' => 'Ṱ', + 'ṳ' => 'Ṳ', + 'ṵ' => 'Ṵ', + 'ṷ' => 'Ṷ', + 'ṹ' => 'Ṹ', + 'ṻ' => 'Ṻ', + 'ṽ' => 'Ṽ', + 'ṿ' => 'Ṿ', + 'ẁ' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'ẍ' => 'Ẍ', + 'ẏ' => 'Ẏ', + 'ẑ' => 'Ẑ', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'Ṡ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'ề' => 'Ề', + 'ể' => 'Ể', + 'ễ' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'ọ' => 'Ọ', + 'ỏ' => 'Ỏ', + 'ố' => 'Ố', + 'ồ' => 'Ồ', + 'ổ' => 'Ổ', + 'ỗ' => 'Ỗ', + 'ộ' => 'Ộ', + 'ớ' => 'Ớ', + 'ờ' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'Ỡ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'ử' => 'Ử', + 'ữ' => 'Ữ', + 'ự' => 'Ự', + 'ỳ' => 'Ỳ', + 'ỵ' => 'Ỵ', + 'ỷ' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'ỻ' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'ἀ' => 'Ἀ', + 'ἁ' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'ἅ' => 'Ἅ', + 'ἆ' => 'Ἆ', + 'ἇ' => 'Ἇ', + 'ἐ' => 'Ἐ', + 'ἑ' => 'Ἑ', + 'ἒ' => 'Ἒ', + 'ἓ' => 'Ἓ', + 'ἔ' => 'Ἔ', + 'ἕ' => 'Ἕ', + 'ἠ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'ἢ' => 'Ἢ', + 'ἣ' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'ἥ' => 'Ἥ', + 'ἦ' => 'Ἦ', + 'ἧ' => 'Ἧ', + 'ἰ' => 'Ἰ', + 'ἱ' => 'Ἱ', + 'ἲ' => 'Ἲ', + 'ἳ' => 'Ἳ', + 'ἴ' => 'Ἴ', + 'ἵ' => 'Ἵ', + 'ἶ' => 'Ἶ', + 'ἷ' => 'Ἷ', + 'ὀ' => 'Ὀ', + 'ὁ' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'ὅ' => 'Ὅ', + 'ὑ' => 'Ὑ', + 'ὓ' => 'Ὓ', + 'ὕ' => 'Ὕ', + 'ὗ' => 'Ὗ', + 'ὠ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'ὢ' => 'Ὢ', + 'ὣ' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'ὥ' => 'Ὥ', + 'ὦ' => 'Ὦ', + 'ὧ' => 'Ὧ', + 'ὰ' => 'Ὰ', + 'ά' => 'Ά', + 'ὲ' => 'Ὲ', + 'έ' => 'Έ', + 'ὴ' => 'Ὴ', + 'ή' => 'Ή', + 'ὶ' => 'Ὶ', + 'ί' => 'Ί', + 'ὸ' => 'Ὸ', + 'ό' => 'Ό', + 'ὺ' => 'Ὺ', + 'ύ' => 'Ύ', + 'ὼ' => 'Ὼ', + 'ώ' => 'Ώ', + 'ᾀ' => 'ἈΙ', + 'ᾁ' => 'ἉΙ', + 'ᾂ' => 'ἊΙ', + 'ᾃ' => 'ἋΙ', + 'ᾄ' => 'ἌΙ', + 'ᾅ' => 'ἍΙ', + 'ᾆ' => 'ἎΙ', + 'ᾇ' => 'ἏΙ', + 'ᾐ' => 'ἨΙ', + 'ᾑ' => 'ἩΙ', + 'ᾒ' => 'ἪΙ', + 'ᾓ' => 'ἫΙ', + 'ᾔ' => 'ἬΙ', + 'ᾕ' => 'ἭΙ', + 'ᾖ' => 'ἮΙ', + 'ᾗ' => 'ἯΙ', + 'ᾠ' => 'ὨΙ', + 'ᾡ' => 'ὩΙ', + 'ᾢ' => 'ὪΙ', + 'ᾣ' => 'ὫΙ', + 'ᾤ' => 'ὬΙ', + 'ᾥ' => 'ὭΙ', + 'ᾦ' => 'ὮΙ', + 'ᾧ' => 'ὯΙ', + 'ᾰ' => 'Ᾰ', + 'ᾱ' => 'Ᾱ', + 'ᾳ' => 'ΑΙ', + 'ι' => 'Ι', + 'ῃ' => 'ΗΙ', + 'ῐ' => 'Ῐ', + 'ῑ' => 'Ῑ', + 'ῠ' => 'Ῠ', + 'ῡ' => 'Ῡ', + 'ῥ' => 'Ῥ', + 'ῳ' => 'ΩΙ', + 'ⅎ' => 'Ⅎ', + 'ⅰ' => 'Ⅰ', + 'ⅱ' => 'Ⅱ', + 'ⅲ' => 'Ⅲ', + 'ⅳ' => 'Ⅳ', + 'ⅴ' => 'Ⅴ', + 'ⅵ' => 'Ⅵ', + 'ⅶ' => 'Ⅶ', + 'ⅷ' => 'Ⅷ', + 'ⅸ' => 'Ⅸ', + 'ⅹ' => 'Ⅹ', + 'ⅺ' => 'Ⅺ', + 'ⅻ' => 'Ⅻ', + 'ⅼ' => 'Ⅼ', + 'ⅽ' => 'Ⅽ', + 'ⅾ' => 'Ⅾ', + 'ⅿ' => 'Ⅿ', + 'ↄ' => 'Ↄ', + 'ⓐ' => 'Ⓐ', + 'ⓑ' => 'Ⓑ', + 'ⓒ' => 'Ⓒ', + 'ⓓ' => 'Ⓓ', + 'ⓔ' => 'Ⓔ', + 'ⓕ' => 'Ⓕ', + 'ⓖ' => 'Ⓖ', + 'ⓗ' => 'Ⓗ', + 'ⓘ' => 'Ⓘ', + 'ⓙ' => 'Ⓙ', + 'ⓚ' => 'Ⓚ', + 'ⓛ' => 'Ⓛ', + 'ⓜ' => 'Ⓜ', + 'ⓝ' => 'Ⓝ', + 'ⓞ' => 'Ⓞ', + 'ⓟ' => 'Ⓟ', + 'ⓠ' => 'Ⓠ', + 'ⓡ' => 'Ⓡ', + 'ⓢ' => 'Ⓢ', + 'ⓣ' => 'Ⓣ', + 'ⓤ' => 'Ⓤ', + 'ⓥ' => 'Ⓥ', + 'ⓦ' => 'Ⓦ', + 'ⓧ' => 'Ⓧ', + 'ⓨ' => 'Ⓨ', + 'ⓩ' => 'Ⓩ', + 'ⰰ' => 'Ⰰ', + 'ⰱ' => 'Ⰱ', + 'ⰲ' => 'Ⰲ', + 'ⰳ' => 'Ⰳ', + 'ⰴ' => 'Ⰴ', + 'ⰵ' => 'Ⰵ', + 'ⰶ' => 'Ⰶ', + 'ⰷ' => 'Ⰷ', + 'ⰸ' => 'Ⰸ', + 'ⰹ' => 'Ⰹ', + 'ⰺ' => 'Ⰺ', + 'ⰻ' => 'Ⰻ', + 'ⰼ' => 'Ⰼ', + 'ⰽ' => 'Ⰽ', + 'ⰾ' => 'Ⰾ', + 'ⰿ' => 'Ⰿ', + 'ⱀ' => 'Ⱀ', + 'ⱁ' => 'Ⱁ', + 'ⱂ' => 'Ⱂ', + 'ⱃ' => 'Ⱃ', + 'ⱄ' => 'Ⱄ', + 'ⱅ' => 'Ⱅ', + 'ⱆ' => 'Ⱆ', + 'ⱇ' => 'Ⱇ', + 'ⱈ' => 'Ⱈ', + 'ⱉ' => 'Ⱉ', + 'ⱊ' => 'Ⱊ', + 'ⱋ' => 'Ⱋ', + 'ⱌ' => 'Ⱌ', + 'ⱍ' => 'Ⱍ', + 'ⱎ' => 'Ⱎ', + 'ⱏ' => 'Ⱏ', + 'ⱐ' => 'Ⱐ', + 'ⱑ' => 'Ⱑ', + 'ⱒ' => 'Ⱒ', + 'ⱓ' => 'Ⱓ', + 'ⱔ' => 'Ⱔ', + 'ⱕ' => 'Ⱕ', + 'ⱖ' => 'Ⱖ', + 'ⱗ' => 'Ⱗ', + 'ⱘ' => 'Ⱘ', + 'ⱙ' => 'Ⱙ', + 'ⱚ' => 'Ⱚ', + 'ⱛ' => 'Ⱛ', + 'ⱜ' => 'Ⱜ', + 'ⱝ' => 'Ⱝ', + 'ⱞ' => 'Ⱞ', + 'ⱡ' => 'Ⱡ', + 'ⱥ' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'ⱳ' => 'Ⱳ', + 'ⱶ' => 'Ⱶ', + 'ⲁ' => 'Ⲁ', + 'ⲃ' => 'Ⲃ', + 'ⲅ' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'ⲍ' => 'Ⲍ', + 'ⲏ' => 'Ⲏ', + 'ⲑ' => 'Ⲑ', + 'ⲓ' => 'Ⲓ', + 'ⲕ' => 'Ⲕ', + 'ⲗ' => 'Ⲗ', + 'ⲙ' => 'Ⲙ', + 'ⲛ' => 'Ⲛ', + 'ⲝ' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'Ⲡ', + 'ⲣ' => 'Ⲣ', + 'ⲥ' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'ⲭ' => 'Ⲭ', + 'ⲯ' => 'Ⲯ', + 'ⲱ' => 'Ⲱ', + 'ⲳ' => 'Ⲳ', + 'ⲵ' => 'Ⲵ', + 'ⲷ' => 'Ⲷ', + 'ⲹ' => 'Ⲹ', + 'ⲻ' => 'Ⲻ', + 'ⲽ' => 'Ⲽ', + 'ⲿ' => 'Ⲿ', + 'ⳁ' => 'Ⳁ', + 'ⳃ' => 'Ⳃ', + 'ⳅ' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'ⳍ' => 'Ⳍ', + 'ⳏ' => 'Ⳏ', + 'ⳑ' => 'Ⳑ', + 'ⳓ' => 'Ⳓ', + 'ⳕ' => 'Ⳕ', + 'ⳗ' => 'Ⳗ', + 'ⳙ' => 'Ⳙ', + 'ⳛ' => 'Ⳛ', + 'ⳝ' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'Ⳡ', + 'ⳣ' => 'Ⳣ', + 'ⳬ' => 'Ⳬ', + 'ⳮ' => 'Ⳮ', + 'ⳳ' => 'Ⳳ', + 'ⴀ' => 'Ⴀ', + 'ⴁ' => 'Ⴁ', + 'ⴂ' => 'Ⴂ', + 'ⴃ' => 'Ⴃ', + 'ⴄ' => 'Ⴄ', + 'ⴅ' => 'Ⴅ', + 'ⴆ' => 'Ⴆ', + 'ⴇ' => 'Ⴇ', + 'ⴈ' => 'Ⴈ', + 'ⴉ' => 'Ⴉ', + 'ⴊ' => 'Ⴊ', + 'ⴋ' => 'Ⴋ', + 'ⴌ' => 'Ⴌ', + 'ⴍ' => 'Ⴍ', + 'ⴎ' => 'Ⴎ', + 'ⴏ' => 'Ⴏ', + 'ⴐ' => 'Ⴐ', + 'ⴑ' => 'Ⴑ', + 'ⴒ' => 'Ⴒ', + 'ⴓ' => 'Ⴓ', + 'ⴔ' => 'Ⴔ', + 'ⴕ' => 'Ⴕ', + 'ⴖ' => 'Ⴖ', + 'ⴗ' => 'Ⴗ', + 'ⴘ' => 'Ⴘ', + 'ⴙ' => 'Ⴙ', + 'ⴚ' => 'Ⴚ', + 'ⴛ' => 'Ⴛ', + 'ⴜ' => 'Ⴜ', + 'ⴝ' => 'Ⴝ', + 'ⴞ' => 'Ⴞ', + 'ⴟ' => 'Ⴟ', + 'ⴠ' => 'Ⴠ', + 'ⴡ' => 'Ⴡ', + 'ⴢ' => 'Ⴢ', + 'ⴣ' => 'Ⴣ', + 'ⴤ' => 'Ⴤ', + 'ⴥ' => 'Ⴥ', + 'ⴧ' => 'Ⴧ', + 'ⴭ' => 'Ⴭ', + 'ꙁ' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ꙅ' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ꙍ' => 'Ꙍ', + 'ꙏ' => 'Ꙏ', + 'ꙑ' => 'Ꙑ', + 'ꙓ' => 'Ꙓ', + 'ꙕ' => 'Ꙕ', + 'ꙗ' => 'Ꙗ', + 'ꙙ' => 'Ꙙ', + 'ꙛ' => 'Ꙛ', + 'ꙝ' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'Ꙡ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ꙭ' => 'Ꙭ', + 'ꚁ' => 'Ꚁ', + 'ꚃ' => 'Ꚃ', + 'ꚅ' => 'Ꚅ', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'ꚋ' => 'Ꚋ', + 'ꚍ' => 'Ꚍ', + 'ꚏ' => 'Ꚏ', + 'ꚑ' => 'Ꚑ', + 'ꚓ' => 'Ꚓ', + 'ꚕ' => 'Ꚕ', + 'ꚗ' => 'Ꚗ', + 'ꚙ' => 'Ꚙ', + 'ꚛ' => 'Ꚛ', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ꝁ' => 'Ꝁ', + 'ꝃ' => 'Ꝃ', + 'ꝅ' => 'Ꝅ', + 'ꝇ' => 'Ꝇ', + 'ꝉ' => 'Ꝉ', + 'ꝋ' => 'Ꝋ', + 'ꝍ' => 'Ꝍ', + 'ꝏ' => 'Ꝏ', + 'ꝑ' => 'Ꝑ', + 'ꝓ' => 'Ꝓ', + 'ꝕ' => 'Ꝕ', + 'ꝗ' => 'Ꝗ', + 'ꝙ' => 'Ꝙ', + 'ꝛ' => 'Ꝛ', + 'ꝝ' => 'Ꝝ', + 'ꝟ' => 'Ꝟ', + 'ꝡ' => 'Ꝡ', + 'ꝣ' => 'Ꝣ', + 'ꝥ' => 'Ꝥ', + 'ꝧ' => 'Ꝧ', + 'ꝩ' => 'Ꝩ', + 'ꝫ' => 'Ꝫ', + 'ꝭ' => 'Ꝭ', + 'ꝯ' => 'Ꝯ', + 'ꝺ' => 'Ꝺ', + 'ꝼ' => 'Ꝼ', + 'ꝿ' => 'Ꝿ', + 'ꞁ' => 'Ꞁ', + 'ꞃ' => 'Ꞃ', + 'ꞅ' => 'Ꞅ', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'Ꞌ', + 'ꞑ' => 'Ꞑ', + 'ꞓ' => 'Ꞓ', + 'ꞔ' => 'Ꞔ', + 'ꞗ' => 'Ꞗ', + 'ꞙ' => 'Ꞙ', + 'ꞛ' => 'Ꞛ', + 'ꞝ' => 'Ꞝ', + 'ꞟ' => 'Ꞟ', + 'ꞡ' => 'Ꞡ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'ꞩ' => 'Ꞩ', + 'ꞵ' => 'Ꞵ', + 'ꞷ' => 'Ꞷ', + 'ꞹ' => 'Ꞹ', + 'ꞻ' => 'Ꞻ', + 'ꞽ' => 'Ꞽ', + 'ꞿ' => 'Ꞿ', + 'ꟃ' => 'Ꟃ', + 'ꟈ' => 'Ꟈ', + 'ꟊ' => 'Ꟊ', + 'ꟶ' => 'Ꟶ', + 'ꭓ' => 'Ꭓ', + 'ꭰ' => 'Ꭰ', + 'ꭱ' => 'Ꭱ', + 'ꭲ' => 'Ꭲ', + 'ꭳ' => 'Ꭳ', + 'ꭴ' => 'Ꭴ', + 'ꭵ' => 'Ꭵ', + 'ꭶ' => 'Ꭶ', + 'ꭷ' => 'Ꭷ', + 'ꭸ' => 'Ꭸ', + 'ꭹ' => 'Ꭹ', + 'ꭺ' => 'Ꭺ', + 'ꭻ' => 'Ꭻ', + 'ꭼ' => 'Ꭼ', + 'ꭽ' => 'Ꭽ', + 'ꭾ' => 'Ꭾ', + 'ꭿ' => 'Ꭿ', + 'ꮀ' => 'Ꮀ', + 'ꮁ' => 'Ꮁ', + 'ꮂ' => 'Ꮂ', + 'ꮃ' => 'Ꮃ', + 'ꮄ' => 'Ꮄ', + 'ꮅ' => 'Ꮅ', + 'ꮆ' => 'Ꮆ', + 'ꮇ' => 'Ꮇ', + 'ꮈ' => 'Ꮈ', + 'ꮉ' => 'Ꮉ', + 'ꮊ' => 'Ꮊ', + 'ꮋ' => 'Ꮋ', + 'ꮌ' => 'Ꮌ', + 'ꮍ' => 'Ꮍ', + 'ꮎ' => 'Ꮎ', + 'ꮏ' => 'Ꮏ', + 'ꮐ' => 'Ꮐ', + 'ꮑ' => 'Ꮑ', + 'ꮒ' => 'Ꮒ', + 'ꮓ' => 'Ꮓ', + 'ꮔ' => 'Ꮔ', + 'ꮕ' => 'Ꮕ', + 'ꮖ' => 'Ꮖ', + 'ꮗ' => 'Ꮗ', + 'ꮘ' => 'Ꮘ', + 'ꮙ' => 'Ꮙ', + 'ꮚ' => 'Ꮚ', + 'ꮛ' => 'Ꮛ', + 'ꮜ' => 'Ꮜ', + 'ꮝ' => 'Ꮝ', + 'ꮞ' => 'Ꮞ', + 'ꮟ' => 'Ꮟ', + 'ꮠ' => 'Ꮠ', + 'ꮡ' => 'Ꮡ', + 'ꮢ' => 'Ꮢ', + 'ꮣ' => 'Ꮣ', + 'ꮤ' => 'Ꮤ', + 'ꮥ' => 'Ꮥ', + 'ꮦ' => 'Ꮦ', + 'ꮧ' => 'Ꮧ', + 'ꮨ' => 'Ꮨ', + 'ꮩ' => 'Ꮩ', + 'ꮪ' => 'Ꮪ', + 'ꮫ' => 'Ꮫ', + 'ꮬ' => 'Ꮬ', + 'ꮭ' => 'Ꮭ', + 'ꮮ' => 'Ꮮ', + 'ꮯ' => 'Ꮯ', + 'ꮰ' => 'Ꮰ', + 'ꮱ' => 'Ꮱ', + 'ꮲ' => 'Ꮲ', + 'ꮳ' => 'Ꮳ', + 'ꮴ' => 'Ꮴ', + 'ꮵ' => 'Ꮵ', + 'ꮶ' => 'Ꮶ', + 'ꮷ' => 'Ꮷ', + 'ꮸ' => 'Ꮸ', + 'ꮹ' => 'Ꮹ', + 'ꮺ' => 'Ꮺ', + 'ꮻ' => 'Ꮻ', + 'ꮼ' => 'Ꮼ', + 'ꮽ' => 'Ꮽ', + 'ꮾ' => 'Ꮾ', + 'ꮿ' => 'Ꮿ', + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + '𐐨' => '𐐀', + '𐐩' => '𐐁', + '𐐪' => '𐐂', + '𐐫' => '𐐃', + '𐐬' => '𐐄', + '𐐭' => '𐐅', + '𐐮' => '𐐆', + '𐐯' => '𐐇', + '𐐰' => '𐐈', + '𐐱' => '𐐉', + '𐐲' => '𐐊', + '𐐳' => '𐐋', + '𐐴' => '𐐌', + '𐐵' => '𐐍', + '𐐶' => '𐐎', + '𐐷' => '𐐏', + '𐐸' => '𐐐', + '𐐹' => '𐐑', + '𐐺' => '𐐒', + '𐐻' => '𐐓', + '𐐼' => '𐐔', + '𐐽' => '𐐕', + '𐐾' => '𐐖', + '𐐿' => '𐐗', + '𐑀' => '𐐘', + '𐑁' => '𐐙', + '𐑂' => '𐐚', + '𐑃' => '𐐛', + '𐑄' => '𐐜', + '𐑅' => '𐐝', + '𐑆' => '𐐞', + '𐑇' => '𐐟', + '𐑈' => '𐐠', + '𐑉' => '𐐡', + '𐑊' => '𐐢', + '𐑋' => '𐐣', + '𐑌' => '𐐤', + '𐑍' => '𐐥', + '𐑎' => '𐐦', + '𐑏' => '𐐧', + '𐓘' => '𐒰', + '𐓙' => '𐒱', + '𐓚' => '𐒲', + '𐓛' => '𐒳', + '𐓜' => '𐒴', + '𐓝' => '𐒵', + '𐓞' => '𐒶', + '𐓟' => '𐒷', + '𐓠' => '𐒸', + '𐓡' => '𐒹', + '𐓢' => '𐒺', + '𐓣' => '𐒻', + '𐓤' => '𐒼', + '𐓥' => '𐒽', + '𐓦' => '𐒾', + '𐓧' => '𐒿', + '𐓨' => '𐓀', + '𐓩' => '𐓁', + '𐓪' => '𐓂', + '𐓫' => '𐓃', + '𐓬' => '𐓄', + '𐓭' => '𐓅', + '𐓮' => '𐓆', + '𐓯' => '𐓇', + '𐓰' => '𐓈', + '𐓱' => '𐓉', + '𐓲' => '𐓊', + '𐓳' => '𐓋', + '𐓴' => '𐓌', + '𐓵' => '𐓍', + '𐓶' => '𐓎', + '𐓷' => '𐓏', + '𐓸' => '𐓐', + '𐓹' => '𐓑', + '𐓺' => '𐓒', + '𐓻' => '𐓓', + '𐳀' => '𐲀', + '𐳁' => '𐲁', + '𐳂' => '𐲂', + '𐳃' => '𐲃', + '𐳄' => '𐲄', + '𐳅' => '𐲅', + '𐳆' => '𐲆', + '𐳇' => '𐲇', + '𐳈' => '𐲈', + '𐳉' => '𐲉', + '𐳊' => '𐲊', + '𐳋' => '𐲋', + '𐳌' => '𐲌', + '𐳍' => '𐲍', + '𐳎' => '𐲎', + '𐳏' => '𐲏', + '𐳐' => '𐲐', + '𐳑' => '𐲑', + '𐳒' => '𐲒', + '𐳓' => '𐲓', + '𐳔' => '𐲔', + '𐳕' => '𐲕', + '𐳖' => '𐲖', + '𐳗' => '𐲗', + '𐳘' => '𐲘', + '𐳙' => '𐲙', + '𐳚' => '𐲚', + '𐳛' => '𐲛', + '𐳜' => '𐲜', + '𐳝' => '𐲝', + '𐳞' => '𐲞', + '𐳟' => '𐲟', + '𐳠' => '𐲠', + '𐳡' => '𐲡', + '𐳢' => '𐲢', + '𐳣' => '𐲣', + '𐳤' => '𐲤', + '𐳥' => '𐲥', + '𐳦' => '𐲦', + '𐳧' => '𐲧', + '𐳨' => '𐲨', + '𐳩' => '𐲩', + '𐳪' => '𐲪', + '𐳫' => '𐲫', + '𐳬' => '𐲬', + '𐳭' => '𐲭', + '𐳮' => '𐲮', + '𐳯' => '𐲯', + '𐳰' => '𐲰', + '𐳱' => '𐲱', + '𐳲' => '𐲲', + '𑣀' => '𑢠', + '𑣁' => '𑢡', + '𑣂' => '𑢢', + '𑣃' => '𑢣', + '𑣄' => '𑢤', + '𑣅' => '𑢥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + '𑣍' => '𑢭', + '𑣎' => '𑢮', + '𑣏' => '𑢯', + '𑣐' => '𑢰', + '𑣑' => '𑢱', + '𑣒' => '𑢲', + '𑣓' => '𑢳', + '𑣔' => '𑢴', + '𑣕' => '𑢵', + '𑣖' => '𑢶', + '𑣗' => '𑢷', + '𑣘' => '𑢸', + '𑣙' => '𑢹', + '𑣚' => '𑢺', + '𑣛' => '𑢻', + '𑣜' => '𑢼', + '𑣝' => '𑢽', + '𑣞' => '𑢾', + '𑣟' => '𑢿', + '𖹠' => '𖹀', + '𖹡' => '𖹁', + '𖹢' => '𖹂', + '𖹣' => '𖹃', + '𖹤' => '𖹄', + '𖹥' => '𖹅', + '𖹦' => '𖹆', + '𖹧' => '𖹇', + '𖹨' => '𖹈', + '𖹩' => '𖹉', + '𖹪' => '𖹊', + '𖹫' => '𖹋', + '𖹬' => '𖹌', + '𖹭' => '𖹍', + '𖹮' => '𖹎', + '𖹯' => '𖹏', + '𖹰' => '𖹐', + '𖹱' => '𖹑', + '𖹲' => '𖹒', + '𖹳' => '𖹓', + '𖹴' => '𖹔', + '𖹵' => '𖹕', + '𖹶' => '𖹖', + '𖹷' => '𖹗', + '𖹸' => '𖹘', + '𖹹' => '𖹙', + '𖹺' => '𖹚', + '𖹻' => '𖹛', + '𖹼' => '𖹜', + '𖹽' => '𖹝', + '𖹾' => '𖹞', + '𖹿' => '𖹟', + '𞤢' => '𞤀', + '𞤣' => '𞤁', + '𞤤' => '𞤂', + '𞤥' => '𞤃', + '𞤦' => '𞤄', + '𞤧' => '𞤅', + '𞤨' => '𞤆', + '𞤩' => '𞤇', + '𞤪' => '𞤈', + '𞤫' => '𞤉', + '𞤬' => '𞤊', + '𞤭' => '𞤋', + '𞤮' => '𞤌', + '𞤯' => '𞤍', + '𞤰' => '𞤎', + '𞤱' => '𞤏', + '𞤲' => '𞤐', + '𞤳' => '𞤑', + '𞤴' => '𞤒', + '𞤵' => '𞤓', + '𞤶' => '𞤔', + '𞤷' => '𞤕', + '𞤸' => '𞤖', + '𞤹' => '𞤗', + '𞤺' => '𞤘', + '𞤻' => '𞤙', + '𞤼' => '𞤚', + '𞤽' => '𞤛', + '𞤾' => '𞤜', + '𞤿' => '𞤝', + '𞥀' => '𞤞', + '𞥁' => '𞤟', + '𞥂' => '𞤠', + '𞥃' => '𞤡', + 'ß' => 'SS', + 'ff' => 'FF', + 'fi' => 'FI', + 'fl' => 'FL', + 'ffi' => 'FFI', + 'ffl' => 'FFL', + 'ſt' => 'ST', + 'st' => 'ST', + 'և' => 'ԵՒ', + 'ﬓ' => 'ՄՆ', + 'ﬔ' => 'ՄԵ', + 'ﬕ' => 'ՄԻ', + 'ﬖ' => 'ՎՆ', + 'ﬗ' => 'ՄԽ', + 'ʼn' => 'ʼN', + 'ΐ' => 'Ϊ́', + 'ΰ' => 'Ϋ́', + 'ǰ' => 'J̌', + 'ẖ' => 'H̱', + 'ẗ' => 'T̈', + 'ẘ' => 'W̊', + 'ẙ' => 'Y̊', + 'ẚ' => 'Aʾ', + 'ὐ' => 'Υ̓', + 'ὒ' => 'Υ̓̀', + 'ὔ' => 'Υ̓́', + 'ὖ' => 'Υ̓͂', + 'ᾶ' => 'Α͂', + 'ῆ' => 'Η͂', + 'ῒ' => 'Ϊ̀', + 'ΐ' => 'Ϊ́', + 'ῖ' => 'Ι͂', + 'ῗ' => 'Ϊ͂', + 'ῢ' => 'Ϋ̀', + 'ΰ' => 'Ϋ́', + 'ῤ' => 'Ρ̓', + 'ῦ' => 'Υ͂', + 'ῧ' => 'Ϋ͂', + 'ῶ' => 'Ω͂', + 'ᾈ' => 'ἈΙ', + 'ᾉ' => 'ἉΙ', + 'ᾊ' => 'ἊΙ', + 'ᾋ' => 'ἋΙ', + 'ᾌ' => 'ἌΙ', + 'ᾍ' => 'ἍΙ', + 'ᾎ' => 'ἎΙ', + 'ᾏ' => 'ἏΙ', + 'ᾘ' => 'ἨΙ', + 'ᾙ' => 'ἩΙ', + 'ᾚ' => 'ἪΙ', + 'ᾛ' => 'ἫΙ', + 'ᾜ' => 'ἬΙ', + 'ᾝ' => 'ἭΙ', + 'ᾞ' => 'ἮΙ', + 'ᾟ' => 'ἯΙ', + 'ᾨ' => 'ὨΙ', + 'ᾩ' => 'ὩΙ', + 'ᾪ' => 'ὪΙ', + 'ᾫ' => 'ὫΙ', + 'ᾬ' => 'ὬΙ', + 'ᾭ' => 'ὭΙ', + 'ᾮ' => 'ὮΙ', + 'ᾯ' => 'ὯΙ', + 'ᾼ' => 'ΑΙ', + 'ῌ' => 'ΗΙ', + 'ῼ' => 'ΩΙ', + 'ᾲ' => 'ᾺΙ', + 'ᾴ' => 'ΆΙ', + 'ῂ' => 'ῊΙ', + 'ῄ' => 'ΉΙ', + 'ῲ' => 'ῺΙ', + 'ῴ' => 'ΏΙ', + 'ᾷ' => 'Α͂Ι', + 'ῇ' => 'Η͂Ι', + 'ῷ' => 'Ω͂Ι', +); diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap.php new file mode 100644 index 0000000..ff51ae0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -0,0 +1,172 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('mb_convert_encoding')) { + function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); } +} +if (!function_exists('mb_decode_mimeheader')) { + function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); } +} +if (!function_exists('mb_encode_mimeheader')) { + function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); } +} +if (!function_exists('mb_decode_numericentity')) { + function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); } +} +if (!function_exists('mb_encode_numericentity')) { + function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); } +} +if (!function_exists('mb_convert_case')) { + function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); } +} +if (!function_exists('mb_internal_encoding')) { + function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); } +} +if (!function_exists('mb_language')) { + function mb_language($language = null) { return p\Mbstring::mb_language($language); } +} +if (!function_exists('mb_list_encodings')) { + function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } +} +if (!function_exists('mb_encoding_aliases')) { + function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } +} +if (!function_exists('mb_check_encoding')) { + function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); } +} +if (!function_exists('mb_detect_encoding')) { + function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); } +} +if (!function_exists('mb_detect_order')) { + function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); } +} +if (!function_exists('mb_parse_str')) { + function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; } +} +if (!function_exists('mb_strlen')) { + function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); } +} +if (!function_exists('mb_strpos')) { + function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strtolower')) { + function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); } +} +if (!function_exists('mb_strtoupper')) { + function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); } +} +if (!function_exists('mb_substitute_character')) { + function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); } +} +if (!function_exists('mb_substr')) { + function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); } +} +if (!function_exists('mb_stripos')) { + function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_stristr')) { + function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strrchr')) { + function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strrichr')) { + function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strripos')) { + function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strrpos')) { + function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strstr')) { + function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_get_info')) { + function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } +} +if (!function_exists('mb_http_output')) { + function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); } +} +if (!function_exists('mb_strwidth')) { + function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); } +} +if (!function_exists('mb_substr_count')) { + function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); } +} +if (!function_exists('mb_output_handler')) { + function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); } +} +if (!function_exists('mb_http_input')) { + function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); } +} + +if (!function_exists('mb_convert_variables')) { + function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); } +} + +if (!function_exists('mb_ord')) { + function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); } +} +if (!function_exists('mb_chr')) { + function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); } +} +if (!function_exists('mb_str_split')) { + function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } +} + +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + + +if (extension_loaded('mbstring')) { + return; +} + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); +} +if (!defined('MB_CASE_LOWER')) { + define('MB_CASE_LOWER', 1); +} +if (!defined('MB_CASE_TITLE')) { + define('MB_CASE_TITLE', 2); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap80.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap80.php new file mode 100644 index 0000000..5236e6d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -0,0 +1,167 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (!function_exists('mb_convert_encoding')) { + function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); } +} +if (!function_exists('mb_decode_mimeheader')) { + function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); } +} +if (!function_exists('mb_encode_mimeheader')) { + function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); } +} +if (!function_exists('mb_decode_numericentity')) { + function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); } +} +if (!function_exists('mb_encode_numericentity')) { + function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); } +} +if (!function_exists('mb_convert_case')) { + function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); } +} +if (!function_exists('mb_internal_encoding')) { + function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); } +} +if (!function_exists('mb_language')) { + function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); } +} +if (!function_exists('mb_list_encodings')) { + function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); } +} +if (!function_exists('mb_encoding_aliases')) { + function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); } +} +if (!function_exists('mb_check_encoding')) { + function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); } +} +if (!function_exists('mb_detect_encoding')) { + function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); } +} +if (!function_exists('mb_detect_order')) { + function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); } +} +if (!function_exists('mb_parse_str')) { + function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; } +} +if (!function_exists('mb_strlen')) { + function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); } +} +if (!function_exists('mb_strpos')) { + function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strtolower')) { + function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); } +} +if (!function_exists('mb_strtoupper')) { + function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); } +} +if (!function_exists('mb_substitute_character')) { + function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); } +} +if (!function_exists('mb_substr')) { + function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); } +} +if (!function_exists('mb_stripos')) { + function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_stristr')) { + function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strrchr')) { + function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strrichr')) { + function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strripos')) { + function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strrpos')) { + function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strstr')) { + function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_get_info')) { + function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); } +} +if (!function_exists('mb_http_output')) { + function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } +} +if (!function_exists('mb_strwidth')) { + function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); } +} +if (!function_exists('mb_substr_count')) { + function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); } +} +if (!function_exists('mb_output_handler')) { + function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); } +} +if (!function_exists('mb_http_input')) { + function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); } +} + +if (!function_exists('mb_convert_variables')) { + function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); } +} + +if (!function_exists('mb_ord')) { + function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); } +} +if (!function_exists('mb_chr')) { + function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); } +} +if (!function_exists('mb_str_split')) { + function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } +} + +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + +if (extension_loaded('mbstring')) { + return; +} + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); +} +if (!defined('MB_CASE_LOWER')) { + define('MB_CASE_LOWER', 1); +} +if (!defined('MB_CASE_TITLE')) { + define('MB_CASE_TITLE', 2); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/LICENSE new file mode 100644 index 0000000..0ed3a24 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Php80.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Php80.php new file mode 100644 index 0000000..362dd1a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Php80.php @@ -0,0 +1,115 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Ion Bazan <ion.bazan@gmail.com> + * @author Nico Oelgart <nicoswd@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Php80 +{ + public static function fdiv(float $dividend, float $divisor): float + { + return @($dividend / $divisor); + } + + public static function get_debug_type($value): string + { + switch (true) { + case null === $value: return 'null'; + case \is_bool($value): return 'bool'; + case \is_string($value): return 'string'; + case \is_array($value): return 'array'; + case \is_int($value): return 'int'; + case \is_float($value): return 'float'; + case \is_object($value): break; + case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; + default: + if (null === $type = @get_resource_type($value)) { + return 'unknown'; + } + + if ('Unknown' === $type) { + $type = 'closed'; + } + + return "resource ($type)"; + } + + $class = \get_class($value); + + if (false === strpos($class, '@')) { + return $class; + } + + return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; + } + + public static function get_resource_id($res): int + { + if (!\is_resource($res) && null === @get_resource_type($res)) { + throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); + } + + return (int) $res; + } + + public static function preg_last_error_msg(): string + { + switch (preg_last_error()) { + case \PREG_INTERNAL_ERROR: + return 'Internal error'; + case \PREG_BAD_UTF8_ERROR: + return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + case \PREG_BAD_UTF8_OFFSET_ERROR: + return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; + case \PREG_BACKTRACK_LIMIT_ERROR: + return 'Backtrack limit exhausted'; + case \PREG_RECURSION_LIMIT_ERROR: + return 'Recursion limit exhausted'; + case \PREG_JIT_STACKLIMIT_ERROR: + return 'JIT stack limit exhausted'; + case \PREG_NO_ERROR: + return 'No error'; + default: + return 'Unknown error'; + } + } + + public static function str_contains(string $haystack, string $needle): bool + { + return '' === $needle || false !== strpos($haystack, $needle); + } + + public static function str_starts_with(string $haystack, string $needle): bool + { + return 0 === strncmp($haystack, $needle, \strlen($needle)); + } + + public static function str_ends_with(string $haystack, string $needle): bool + { + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/PhpToken.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..cd78c4c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,106 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton <info@ensostudio.ru> + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var -1|positive-int + */ + public $line; + + /** + * @var int + */ + public $pos; + + /** + * @param -1|positive-int $line + */ + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return list<static> + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php new file mode 100644 index 0000000..2b95542 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#[Attribute(Attribute::TARGET_CLASS)] +final class Attribute +{ + public const TARGET_CLASS = 1; + public const TARGET_FUNCTION = 2; + public const TARGET_METHOD = 4; + public const TARGET_PROPERTY = 8; + public const TARGET_CLASS_CONSTANT = 16; + public const TARGET_PARAMETER = 32; + public const TARGET_ALL = 63; + public const IS_REPEATABLE = 64; + + /** @var int */ + public $flags; + + public function __construct(int $flags = self::TARGET_ALL) + { + $this->flags = $flags; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000..bd1212f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { + class PhpToken extends Symfony\Polyfill\Php80\PhpToken + { + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php new file mode 100644 index 0000000..7c62d75 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + interface Stringable + { + /** + * @return string + */ + public function __toString(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php new file mode 100644 index 0000000..01c6c6c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class UnhandledMatchError extends Error + { + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php new file mode 100644 index 0000000..783dbc2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class ValueError extends Error + { + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/bootstrap.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/bootstrap.php new file mode 100644 index 0000000..e5f7dbc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php80/bootstrap.php @@ -0,0 +1,42 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php80 as p; + +if (\PHP_VERSION_ID >= 80000) { + return; +} + +if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) { + define('FILTER_VALIDATE_BOOL', \FILTER_VALIDATE_BOOLEAN); +} + +if (!function_exists('fdiv')) { + function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); } +} +if (!function_exists('preg_last_error_msg')) { + function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } +} +if (!function_exists('str_contains')) { + function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_starts_with')) { + function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_ends_with')) { + function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('get_debug_type')) { + function get_debug_type($value): string { return p\Php80::get_debug_type($value); } +} +if (!function_exists('get_resource_id')) { + function get_resource_id($resource): int { return p\Php80::get_resource_id($resource); } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/LICENSE new file mode 100644 index 0000000..99c6bdf --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2021-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Php81.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Php81.php new file mode 100644 index 0000000..f0507b7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Php81.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php81; + +/** + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Php81 +{ + public static function array_is_list(array $array): bool + { + if ([] === $array || $array === array_values($array)) { + return true; + } + + $nextKey = -1; + + foreach ($array as $k => $v) { + if ($k !== ++$nextKey) { + return false; + } + } + + return true; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php new file mode 100644 index 0000000..5ff93fc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID >= 70400 && extension_loaded('curl')) { + /** + * @property string $data + */ + class CURLStringFile extends CURLFile + { + private $data; + + public function __construct(string $data, string $postname, string $mime = 'application/octet-stream') + { + $this->data = $data; + parent::__construct('data://application/octet-stream;base64,'.base64_encode($data), $mime, $postname); + } + + public function __set(string $name, $value): void + { + if ('data' !== $name) { + $this->$name = $value; + + return; + } + + if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) { + throw new TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string'); + } + + $this->name = 'data://application/octet-stream;base64,'.base64_encode($value); + } + + public function __isset(string $name): bool + { + return isset($this->$name); + } + + public function &__get(string $name) + { + return $this->$name; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php new file mode 100644 index 0000000..cb7720a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80100) { + #[Attribute(Attribute::TARGET_METHOD)] + final class ReturnTypeWillChange + { + public function __construct() + { + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/bootstrap.php b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/bootstrap.php new file mode 100644 index 0000000..9f872e0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/symfony/polyfill-php81/bootstrap.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php81 as p; + +if (\PHP_VERSION_ID >= 80100) { + return; +} + +if (defined('MYSQLI_REFRESH_SLAVE') && !defined('MYSQLI_REFRESH_REPLICA')) { + define('MYSQLI_REFRESH_REPLICA', 64); +} + +if (!function_exists('array_is_list')) { + function array_is_list(array $array): bool { return p\Php81::array_is_list($array); } +} + +if (!function_exists('enum_exists')) { + function enum_exists(string $enum, bool $autoload = true): bool { return $autoload && class_exists($enum) && false; } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/CHANGELOG b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/CHANGELOG new file mode 100644 index 0000000..525e238 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/CHANGELOG @@ -0,0 +1,293 @@ +# 3.11.3 (2024-11-07) + + * Fix an infinite recursion in the sandbox code + +# 3.11.2 (2024-11-06) + + * [BC BREAK] Fix a security issue in the sandbox mode allowing an attacker to call attributes on Array-like objects + They are now checked via the property policy + * Fix a security issue in the sandbox mode allowing an attacker to be able to call `toString()` + under some circumstances on an object even if the `__toString()` method is not allowed by the security policy + +# 3.11.1 (2024-09-10) + + * Fix a security issue when an included sandboxed template has been loaded before without the sandbox context + +# 3.11.0 (2024-08-08) + + * Add `Twig\Cache\ChainCache` and `Twig\Cache\ReadOnlyFilesystemCache` + * Add the possibility to deprecate attributes and nodes on `Node` + * Add the possibility to add a package and a version to the `deprecated` tag + * Add the possibility to add a package for filter/function/test deprecations + * Mark `ConstantExpression` as being `@final` + * Add the `find` filter + * Fix optimizer mode validation in `OptimizerNodeVisitor` + * Add the possibility to yield from a generator in `PrintNode` + * Add the `shuffle` filter + * Add the `singular` and `plural` filters in `StringExtension` + * Deprecate the second argument of `Twig\Node\Expression\CallExpression::compileArguments()` + * Deprecate `Twig\ExpressionParser\parseHashExpression()` in favor of + `Twig\ExpressionParser::parseMappingExpression()` + * Deprecate `Twig\ExpressionParser\parseArrayExpression()` in favor of + `Twig\ExpressionParser::parseSequenceExpression()` + * Add `sequence` and `mapping` tests + * Deprecate `Twig\Node\Expression\NameExpression::isSimple()` and + `Twig\Node\Expression\NameExpression::isSpecial()` + +# 3.10.3 (2024-05-16) + + * Fix missing ; in generated code + +# 3.10.2 (2024-05-14) + + * Fix support for the deprecated escaper signature + +# 3.10.1 (2024-05-12) + + * Fix BC break on escaper extension + * Fix constant return type + +# 3.10.0 (2024-05-11) + + * Make `CoreExtension::formatDate`, `CoreExtension::convertDate`, and + `CoreExtension::formatNumber` part of the public API + * Add `needs_charset` option for filters and functions + * Extract the escaping logic from the `EscaperExtension` class to a new + `EscaperRuntime` class. + + The following methods from ``Twig\\Extension\\EscaperExtension`` are + deprecated: ``setEscaper()``, ``getEscapers()``, ``setSafeClasses``, + ``addSafeClasses()``. Use the same methods on the + ``Twig\\Runtime\\EscaperRuntime`` class instead. + * Fix capturing output from extensions that still use echo + * Fix a PHP warning in the Lexer on malformed templates + * Fix blocks not available under some circumstances + * Synchronize source context in templates when setting a Node on a Node + +# 3.9.3 (2024-04-18) + + * Add missing `twig_escape_filter_is_safe` deprecated function + * Fix yield usage with CaptureNode + * Add missing unwrap call when using a TemplateWrapper instance internally + * Ensure Lexer is initialized early on + +# 3.9.2 (2024-04-17) + + * Fix usage of display_end hook + +# 3.9.1 (2024-04-17) + + * Fix missing `$blocks` variable in `CaptureNode` + +# 3.9.0 (2024-04-16) + + * Add support for PHP 8.4 + * Deprecate AbstractNodeVisitor + * Deprecate passing Template to Environment::resolveTemplate(), Environment::load(), and Template::loadTemplate() + * Add a new "yield" mode for output generation; + Node implementations that use "echo" or "print" should use "yield" instead; + all Node implementations should be flagged with `#[YieldReady]` once they've been made ready for "yield"; + the "use_yield" Environment option can be turned on when all nodes have been made `#[YieldReady]`; + "yield" will be the only strategy supported in the next major version + * Add return type for Symfony 7 compatibility + * Fix premature loop exit in Security Policy lookup of allowed methods/properties + * Deprecate all internal extension functions in favor of methods on the extension classes + * Mark all extension functions as @internal + * Add SourcePolicyInterface to selectively enable the Sandbox based on a template's Source + * Throw a proper Twig exception when using cycle on an empty array + +# 3.8.0 (2023-11-21) + + * Catch errors thrown during template rendering + * Fix IntlExtension::formatDateTime use of date formatter prototype + * Fix premature loop exit in Security Policy lookup of allowed methods/properties + * Remove NumberFormatter::TYPE_CURRENCY (deprecated in PHP 8.3) + * Restore return type annotations + * Allow Symfony 7 packages to be installed + * Deprecate `twig_test_iterable` function. Use the native `is_iterable` instead. + +# 3.7.1 (2023-08-28) + + * Fix some phpdocs + +# 3.7.0 (2023-07-26) + + * Add support for the ...spread operator on arrays and hashes + +# 3.6.1 (2023-06-08) + + * Suppress some native return type deprecation messages + +# 3.6.0 (2023-05-03) + + * Allow psr/container 2.0 + * Add the new PHP 8.0 IntlDateFormatter::RELATIVE_* constants for date formatting + * Make the Lexer initialize itself lazily + +# 3.5.1 (2023-02-08) + + * Arrow functions passed to the "reduce" filter now accept the current key as a third argument + * Restores the leniency of the matches twig comparison + * Fix error messages in sandboxed mode for "has some" and "has every" + +# 3.5.0 (2022-12-27) + + * Make Twig\ExpressionParser non-internal + * Add "has some" and "has every" operators + * Add Compile::reset() + * Throw a better runtime error when the "matches" regexp is not valid + * Add "twig *_names" intl functions + * Fix optimizing closures callbacks + * Add a better exception when getting an undefined constant via `constant` + * Fix `if` nodes when outside of a block and with an empty body + +# 3.4.3 (2022-09-28) + + * Fix a security issue on filesystem loader (possibility to load a template outside a configured directory) + +# 3.4.2 (2022-08-12) + + * Allow inherited magic method to still run with calling class + * Fix CallExpression::reflectCallable() throwing TypeError + * Fix typo in naming (currency_code) + +# 3.4.1 (2022-05-17) + +* Fix optimizing non-public named closures + +# 3.4.0 (2022-05-22) + + * Add support for named closures + +# 3.3.10 (2022-04-06) + + * Enable bytecode invalidation when auto_reload is enabled + +# 3.3.9 (2022-03-25) + + * Fix custom escapers when using multiple Twig environments + * Add support for "constant('class', object)" + * Do not reuse internally generated variable names during parsing + +# 3.3.8 (2022-02-04) + + * Fix a security issue when in a sandbox: the `sort` filter must require a Closure for the `arrow` parameter + * Fix deprecation notice on `round` + * Fix call to deprecated `convertToHtml` method + +# 3.3.7 (2022-01-03) + +* Allow more null support when Twig expects a string (for better 8.1 support) +* Only use Commonmark extensions if markdown enabled + +# 3.3.6 (2022-01-03) + +* Only use Commonmark extensions if markdown enabled + +# 3.3.5 (2022-01-03) + +* Allow CommonMark extensions to easily be added +* Allow null when Twig expects a string (for better 8.1 support) +* Make some performance optimizations +* Allow Symfony translation contract v3+ + +# 3.3.4 (2021-11-25) + + * Bump minimum supported Symfony component versions + * Fix a deprecated message + +# 3.3.3 (2021-09-17) + + * Allow Symfony 6 + * Improve compatibility with PHP 8.1 + * Explicitly specify the encoding for mb_ord in JS escaper + +# 3.3.2 (2021-05-16) + + * Revert "Throw a proper exception when a template name is an absolute path (as it has never been supported)" + +# 3.3.1 (2021-05-12) + + * Fix PHP 8.1 compatibility + * Throw a proper exception when a template name is an absolute path (as it has never been supported) + +# 3.3.0 (2021-02-08) + + * Fix macro calls in a "cache" tag + * Add the slug filter + * Allow extra bundle to be compatible with Twig 2 + +# 3.2.1 (2021-01-05) + + * Fix extra bundle compat with older versions of Symfony + +# 3.2.0 (2021-01-05) + + * Add the Cache extension in the "extra" repositories: "cache" tag + * Add "registerUndefinedTokenParserCallback" + * Mark built-in node visitors as @internal + * Fix "odd" not working for negative numbers + +# 3.1.1 (2020-10-27) + + * Fix "include(template_from_string())" + +# 3.1.0 (2020-10-21) + + * Fix sandbox support when using "include(template_from_string())" + * Make round brackets optional for one argument tests like "same as" or "divisible by" + * Add support for ES2015 style object initialisation shortcut { a } is the same as { 'a': a } + +# 3.0.5 (2020-08-05) + + * Fix twig_compare w.r.t. whitespace trimming + * Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag + * Fix a regression when not using a space before an operator + * Restrict callables to closures in filters + * Allow trailing commas in argument lists (in calls as well as definitions) + +# 3.0.4 (2020-07-05) + + * Fix comparison operators + * Fix options not taken into account when using "Michelf\MarkdownExtra" + * Fix "Twig\Extra\Intl\IntlExtension::getCountryName()" to accept "null" as a first argument + * Throw exception in case non-Traversable data is passed to "filter" + * Fix context optimization on PHP 7.4 + * Fix PHP 8 compatibility + * Fix ambiguous syntax parsing + +# 3.0.3 (2020-02-11) + + * Add a check to ensure that iconv() is defined + +# 3.0.2 (2020-02-11) + + * Avoid exceptions when an intl resource is not found + * Fix implementation of case-insensitivity for method names + +# 3.0.1 (2019-12-28) + + * fixed Symfony 5.0 support for the HTML extra extension + +# 3.0.0 (2019-11-15) + + * fixed number formatter in Intl extra extension when using a formatter prototype + +# 3.0.0-BETA1 (2019-11-11) + + * removed the "if" condition support on the "for" tag + * made the in, <, >, <=, >=, ==, and != operators more strict when comparing strings and integers/floats + * removed the "filter" tag + * added type hints everywhere + * changed Environment::resolveTemplate() to always return a TemplateWrapper instance + * removed Template::__toString() + * removed Parser::isReservedMacroName() + * removed SanboxedPrintNode + * removed Node::setTemplateName() + * made classes marked as "@final" final + * removed InitRuntimeInterface, ExistsLoaderInterface, and SourceContextLoaderInterface + * removed the "spaceless" tag + * removed Twig\Environment::getBaseTemplateClass() and Twig\Environment::setBaseTemplateClass() + * removed the "base_template_class" option on Twig\Environment + * bumped minimum PHP version to 7.2 + * removed PSR-0 classes diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/LICENSE new file mode 100644 index 0000000..fd8234e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009-present by the Twig Team. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Twig nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/README.rst b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/README.rst new file mode 100644 index 0000000..7bf8c67 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/README.rst @@ -0,0 +1,23 @@ +Twig, the flexible, fast, and secure template language for PHP +============================================================== + +Twig is a template language for PHP. + +Twig uses a syntax similar to the Django and Jinja template languages which +inspired the Twig runtime environment. + +Sponsors +-------- + +.. raw:: html + + <a href="https://docs.blackfire.io/introduction?utm_source=twig&utm_medium=github_readme&utm_campaign=logo"> + <img src="https://static.blackfire.io/assets/intemporals/logo/png/blackfire-io_secondary_horizontal_transparent.png?1" width="255px" alt="Blackfire.io"> + </a> + +More Information +---------------- + +Read the `documentation`_ for more information. + +.. _documentation: https://twig.symfony.com/documentation diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Attribute/YieldReady.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Attribute/YieldReady.php new file mode 100644 index 0000000..335c435 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Attribute/YieldReady.php @@ -0,0 +1,20 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Attribute; + +/** + * Marks nodes that are ready for using "yield" instead of "echo" or "print()" for rendering. + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +final class YieldReady +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/CacheInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/CacheInterface.php new file mode 100644 index 0000000..6e8c409 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/CacheInterface.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Cache; + +/** + * Interface implemented by cache classes. + * + * It is highly recommended to always store templates on the filesystem to + * benefit from the PHP opcode cache. This interface is mostly useful if you + * need to implement a custom strategy for storing templates on the filesystem. + * + * @author Andrew Tch <andrew@noop.lv> + */ +interface CacheInterface +{ + /** + * Generates a cache key for the given template class name. + */ + public function generateKey(string $name, string $className): string; + + /** + * Writes the compiled template to cache. + * + * @param string $content The template representation as a PHP class + */ + public function write(string $key, string $content): void; + + /** + * Loads a template from the cache. + */ + public function load(string $key): void; + + /** + * Returns the modification timestamp of a key. + */ + public function getTimestamp(string $key): int; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ChainCache.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ChainCache.php new file mode 100644 index 0000000..18c66f3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ChainCache.php @@ -0,0 +1,81 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Cache; + +/** + * Chains several caches together. + * + * Cached items are fetched from the first cache having them in its data store. + * They are saved and deleted in all adapters at once. + * + * @author Quentin Devos <quentin@devos.pm> + */ +final class ChainCache implements CacheInterface +{ + private $caches; + + /** + * @param iterable<CacheInterface> $caches The ordered list of caches used to store and fetch cached items + */ + public function __construct(iterable $caches) + { + $this->caches = $caches; + } + + public function generateKey(string $name, string $className): string + { + return $className.'#'.$name; + } + + public function write(string $key, string $content): void + { + $splitKey = $this->splitKey($key); + + foreach ($this->caches as $cache) { + $cache->write($cache->generateKey(...$splitKey), $content); + } + } + + public function load(string $key): void + { + [$name, $className] = $this->splitKey($key); + + foreach ($this->caches as $cache) { + $cache->load($cache->generateKey($name, $className)); + + if (class_exists($className, false)) { + break; + } + } + } + + public function getTimestamp(string $key): int + { + $splitKey = $this->splitKey($key); + + foreach ($this->caches as $cache) { + if (0 < $timestamp = $cache->getTimestamp($cache->generateKey(...$splitKey))) { + return $timestamp; + } + } + + return 0; + } + + /** + * @return string[] + */ + private function splitKey(string $key): array + { + return array_reverse(explode('#', $key, 2)); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/FilesystemCache.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/FilesystemCache.php new file mode 100644 index 0000000..2e79fac --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/FilesystemCache.php @@ -0,0 +1,87 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Cache; + +/** + * Implements a cache on the filesystem. + * + * @author Andrew Tch <andrew@noop.lv> + */ +class FilesystemCache implements CacheInterface +{ + public const FORCE_BYTECODE_INVALIDATION = 1; + + private $directory; + private $options; + + public function __construct(string $directory, int $options = 0) + { + $this->directory = rtrim($directory, '\/').'/'; + $this->options = $options; + } + + public function generateKey(string $name, string $className): string + { + $hash = hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $className); + + return $this->directory.$hash[0].$hash[1].'/'.$hash.'.php'; + } + + public function load(string $key): void + { + if (is_file($key)) { + @include_once $key; + } + } + + public function write(string $key, string $content): void + { + $dir = \dirname($key); + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true)) { + clearstatcache(true, $dir); + if (!is_dir($dir)) { + throw new \RuntimeException(\sprintf('Unable to create the cache directory (%s).', $dir)); + } + } + } elseif (!is_writable($dir)) { + throw new \RuntimeException(\sprintf('Unable to write in the cache directory (%s).', $dir)); + } + + $tmpFile = tempnam($dir, basename($key)); + if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) { + @chmod($key, 0666 & ~umask()); + + if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) { + // Compile cached file into bytecode cache + if (\function_exists('opcache_invalidate') && filter_var(\ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) { + @opcache_invalidate($key, true); + } elseif (\function_exists('apc_compile_file')) { + apc_compile_file($key); + } + } + + return; + } + + throw new \RuntimeException(\sprintf('Failed to write cache file "%s".', $key)); + } + + public function getTimestamp(string $key): int + { + if (!is_file($key)) { + return 0; + } + + return (int) @filemtime($key); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/NullCache.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/NullCache.php new file mode 100644 index 0000000..8d20d59 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/NullCache.php @@ -0,0 +1,38 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Cache; + +/** + * Implements a no-cache strategy. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class NullCache implements CacheInterface +{ + public function generateKey(string $name, string $className): string + { + return ''; + } + + public function write(string $key, string $content): void + { + } + + public function load(string $key): void + { + } + + public function getTimestamp(string $key): int + { + return 0; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php new file mode 100644 index 0000000..3ba6514 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Cache; + +/** + * Implements a cache on the filesystem that can only be read, not written to. + * + * @author Quentin Devos <quentin@devos.pm> + */ +class ReadOnlyFilesystemCache extends FilesystemCache +{ + public function write(string $key, string $content): void + { + // Do nothing with the content, it's a read-only filesystem. + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Compiler.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Compiler.php new file mode 100644 index 0000000..1e7ed04 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Compiler.php @@ -0,0 +1,258 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Node\Node; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +class Compiler +{ + private $lastLine; + private $source; + private $indentation; + private $env; + private $debugInfo = []; + private $sourceOffset; + private $sourceLine; + private $varNameSalt = 0; + private $didUseEcho = false; + private $didUseEchoStack = []; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getEnvironment(): Environment + { + return $this->env; + } + + public function getSource(): string + { + return $this->source; + } + + /** + * @return $this + */ + public function reset(int $indentation = 0) + { + $this->lastLine = null; + $this->source = ''; + $this->debugInfo = []; + $this->sourceOffset = 0; + // source code starts at 1 (as we then increment it when we encounter new lines) + $this->sourceLine = 1; + $this->indentation = $indentation; + $this->varNameSalt = 0; + + return $this; + } + + /** + * @return $this + */ + public function compile(Node $node, int $indentation = 0) + { + $this->reset($indentation); + $this->didUseEchoStack[] = $this->didUseEcho; + + try { + $this->didUseEcho = false; + $node->compile($this); + + if ($this->didUseEcho) { + trigger_deprecation('twig/twig', '3.9', 'Using "%s" is deprecated, use "yield" instead in "%s", then flag the class with #[YieldReady].', $this->didUseEcho, \get_class($node)); + } + + return $this; + } finally { + $this->didUseEcho = array_pop($this->didUseEchoStack); + } + } + + /** + * @return $this + */ + public function subcompile(Node $node, bool $raw = true) + { + if (!$raw) { + $this->source .= str_repeat(' ', $this->indentation * 4); + } + + $this->didUseEchoStack[] = $this->didUseEcho; + + try { + $this->didUseEcho = false; + $node->compile($this); + + if ($this->didUseEcho) { + trigger_deprecation('twig/twig', '3.9', 'Using "%s" is deprecated, use "yield" instead in "%s", then flag the class with #[YieldReady].', $this->didUseEcho, \get_class($node)); + } + + return $this; + } finally { + $this->didUseEcho = array_pop($this->didUseEchoStack); + } + } + + /** + * Adds a raw string to the compiled code. + * + * @return $this + */ + public function raw(string $string) + { + $this->checkForEcho($string); + $this->source .= $string; + + return $this; + } + + /** + * Writes a string to the compiled code by adding indentation. + * + * @return $this + */ + public function write(...$strings) + { + foreach ($strings as $string) { + $this->checkForEcho($string); + $this->source .= str_repeat(' ', $this->indentation * 4).$string; + } + + return $this; + } + + /** + * Adds a quoted string to the compiled code. + * + * @return $this + */ + public function string(string $value) + { + $this->source .= \sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); + + return $this; + } + + /** + * Returns a PHP representation of a given value. + * + * @return $this + */ + public function repr($value) + { + if (\is_int($value) || \is_float($value)) { + if (false !== $locale = setlocale(\LC_NUMERIC, '0')) { + setlocale(\LC_NUMERIC, 'C'); + } + + $this->raw(var_export($value, true)); + + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + } elseif (null === $value) { + $this->raw('null'); + } elseif (\is_bool($value)) { + $this->raw($value ? 'true' : 'false'); + } elseif (\is_array($value)) { + $this->raw('array('); + $first = true; + foreach ($value as $key => $v) { + if (!$first) { + $this->raw(', '); + } + $first = false; + $this->repr($key); + $this->raw(' => '); + $this->repr($v); + } + $this->raw(')'); + } else { + $this->string($value); + } + + return $this; + } + + /** + * @return $this + */ + public function addDebugInfo(Node $node) + { + if ($node->getTemplateLine() != $this->lastLine) { + $this->write(\sprintf("// line %d\n", $node->getTemplateLine())); + + $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); + $this->sourceOffset = \strlen($this->source); + $this->debugInfo[$this->sourceLine] = $node->getTemplateLine(); + + $this->lastLine = $node->getTemplateLine(); + } + + return $this; + } + + public function getDebugInfo(): array + { + ksort($this->debugInfo); + + return $this->debugInfo; + } + + /** + * @return $this + */ + public function indent(int $step = 1) + { + $this->indentation += $step; + + return $this; + } + + /** + * @return $this + * + * @throws \LogicException When trying to outdent too much so the indentation would become negative + */ + public function outdent(int $step = 1) + { + // can't outdent by more steps than the current indentation level + if ($this->indentation < $step) { + throw new \LogicException('Unable to call outdent() as the indentation would become negative.'); + } + + $this->indentation -= $step; + + return $this; + } + + public function getVarName(): string + { + return \sprintf('__internal_compile_%d', $this->varNameSalt++); + } + + private function checkForEcho(string $string): void + { + if ($this->didUseEcho) { + return; + } + + $this->didUseEcho = preg_match('/^\s*+(echo|print)\b/', $string, $m) ? $m[1] : false; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Environment.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Environment.php new file mode 100644 index 0000000..571b461 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Environment.php @@ -0,0 +1,878 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Cache\CacheInterface; +use Twig\Cache\FilesystemCache; +use Twig\Cache\NullCache; +use Twig\Error\Error; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Error\SyntaxError; +use Twig\Extension\CoreExtension; +use Twig\Extension\EscaperExtension; +use Twig\Extension\ExtensionInterface; +use Twig\Extension\OptimizerExtension; +use Twig\Extension\YieldNotReadyExtension; +use Twig\Loader\ArrayLoader; +use Twig\Loader\ChainLoader; +use Twig\Loader\LoaderInterface; +use Twig\Node\Expression\Binary\AbstractBinary; +use Twig\Node\Expression\Unary\AbstractUnary; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\Runtime\EscaperRuntime; +use Twig\RuntimeLoader\FactoryRuntimeLoader; +use Twig\RuntimeLoader\RuntimeLoaderInterface; +use Twig\TokenParser\TokenParserInterface; + +/** + * Stores the Twig configuration and renders templates. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class Environment +{ + public const VERSION = '3.11.3'; + public const VERSION_ID = 301103; + public const MAJOR_VERSION = 4; + public const MINOR_VERSION = 11; + public const RELEASE_VERSION = 3; + public const EXTRA_VERSION = ''; + + private $charset; + private $loader; + private $debug; + private $autoReload; + private $cache; + private $lexer; + private $parser; + private $compiler; + /** @var array<string, mixed> */ + private $globals = []; + private $resolvedGlobals; + private $loadedTemplates; + private $strictVariables; + private $originalCache; + private $extensionSet; + private $runtimeLoaders = []; + private $runtimes = []; + private $optionsHash; + /** @var bool */ + private $useYield; + private $defaultRuntimeLoader; + + /** + * Constructor. + * + * Available options: + * + * * debug: When set to true, it automatically set "auto_reload" to true as + * well (default to false). + * + * * charset: The charset used by the templates (default to UTF-8). + * + * * cache: An absolute path where to store the compiled templates, + * a \Twig\Cache\CacheInterface implementation, + * or false to disable compilation cache (default). + * + * * auto_reload: Whether to reload the template if the original source changed. + * If you don't provide the auto_reload option, it will be + * determined automatically based on the debug value. + * + * * strict_variables: Whether to ignore invalid variables in templates + * (default to false). + * + * * autoescape: Whether to enable auto-escaping (default to html): + * * false: disable auto-escaping + * * html, js: set the autoescaping to one of the supported strategies + * * name: set the autoescaping strategy based on the template name extension + * * PHP callback: a PHP callback that returns an escaping strategy based on the template "name" + * + * * optimizations: A flag that indicates which optimizations to apply + * (default to -1 which means that all optimizations are enabled; + * set it to 0 to disable). + * + * * use_yield: Enable templates to exclusively use "yield" instead of "echo" + * (default to "false", but switch it to "true" when possible + * as this will be the only supported mode in Twig 4.0) + */ + public function __construct(LoaderInterface $loader, $options = []) + { + $this->setLoader($loader); + + $options = array_merge([ + 'debug' => false, + 'charset' => 'UTF-8', + 'strict_variables' => false, + 'autoescape' => 'html', + 'cache' => false, + 'auto_reload' => null, + 'optimizations' => -1, + 'use_yield' => false, + ], $options); + + $this->useYield = (bool) $options['use_yield']; + $this->debug = (bool) $options['debug']; + $this->setCharset($options['charset'] ?? 'UTF-8'); + $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload']; + $this->strictVariables = (bool) $options['strict_variables']; + $this->setCache($options['cache']); + $this->extensionSet = new ExtensionSet(); + $this->defaultRuntimeLoader = new FactoryRuntimeLoader([ + EscaperRuntime::class => function () { return new EscaperRuntime($this->charset); }, + ]); + + $this->addExtension(new CoreExtension()); + $escaperExt = new EscaperExtension($options['autoescape']); + $escaperExt->setEnvironment($this, false); + $this->addExtension($escaperExt); + if (\PHP_VERSION_ID >= 80000) { + $this->addExtension(new YieldNotReadyExtension($this->useYield)); + } + $this->addExtension(new OptimizerExtension($options['optimizations'])); + } + + /** + * @internal + */ + public function useYield(): bool + { + return $this->useYield; + } + + /** + * Enables debugging mode. + */ + public function enableDebug() + { + $this->debug = true; + $this->updateOptionsHash(); + } + + /** + * Disables debugging mode. + */ + public function disableDebug() + { + $this->debug = false; + $this->updateOptionsHash(); + } + + /** + * Checks if debug mode is enabled. + * + * @return bool true if debug mode is enabled, false otherwise + */ + public function isDebug() + { + return $this->debug; + } + + /** + * Enables the auto_reload option. + */ + public function enableAutoReload() + { + $this->autoReload = true; + } + + /** + * Disables the auto_reload option. + */ + public function disableAutoReload() + { + $this->autoReload = false; + } + + /** + * Checks if the auto_reload option is enabled. + * + * @return bool true if auto_reload is enabled, false otherwise + */ + public function isAutoReload() + { + return $this->autoReload; + } + + /** + * Enables the strict_variables option. + */ + public function enableStrictVariables() + { + $this->strictVariables = true; + $this->updateOptionsHash(); + } + + /** + * Disables the strict_variables option. + */ + public function disableStrictVariables() + { + $this->strictVariables = false; + $this->updateOptionsHash(); + } + + /** + * Checks if the strict_variables option is enabled. + * + * @return bool true if strict_variables is enabled, false otherwise + */ + public function isStrictVariables() + { + return $this->strictVariables; + } + + /** + * Gets the current cache implementation. + * + * @param bool $original Whether to return the original cache option or the real cache instance + * + * @return CacheInterface|string|false A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function getCache($original = true) + { + return $original ? $this->originalCache : $this->cache; + } + + /** + * Sets the current cache implementation. + * + * @param CacheInterface|string|false $cache A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function setCache($cache) + { + if (\is_string($cache)) { + $this->originalCache = $cache; + $this->cache = new FilesystemCache($cache, $this->autoReload ? FilesystemCache::FORCE_BYTECODE_INVALIDATION : 0); + } elseif (false === $cache) { + $this->originalCache = $cache; + $this->cache = new NullCache(); + } elseif ($cache instanceof CacheInterface) { + $this->originalCache = $this->cache = $cache; + } else { + throw new \LogicException('Cache can only be a string, false, or a \Twig\Cache\CacheInterface implementation.'); + } + } + + /** + * Gets the template class associated with the given string. + * + * The generated template class is based on the following parameters: + * + * * The cache key for the given template; + * * The currently enabled extensions; + * * PHP version; + * * Twig version; + * * Options with what environment was created. + * + * @param string $name The name for which to calculate the template class name + * @param int|null $index The index if it is an embedded template + * + * @internal + */ + public function getTemplateClass(string $name, ?int $index = null): string + { + $key = $this->getLoader()->getCacheKey($name).$this->optionsHash; + + return '__TwigTemplate_'.hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $key).(null === $index ? '' : '___'.$index); + } + + /** + * Renders a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function render($name, array $context = []): string + { + return $this->load($name)->render($context); + } + + /** + * Displays a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function display($name, array $context = []): void + { + $this->load($name)->display($context); + } + + /** + * Loads a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + */ + public function load($name): TemplateWrapper + { + if ($name instanceof TemplateWrapper) { + return $name; + } + if ($name instanceof Template) { + trigger_deprecation('twig/twig', '3.9', 'Passing a "%s" instance to "%s" is deprecated.', self::class, __METHOD__); + + return $name; + } + + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } + + /** + * Loads a template internal representation. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The template name + * @param int|null $index The index if it is an embedded template + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + * + * @internal + */ + public function loadTemplate(string $cls, string $name, ?int $index = null): Template + { + $mainCls = $cls; + if (null !== $index) { + $cls .= '___'.$index; + } + + if (isset($this->loadedTemplates[$cls])) { + return $this->loadedTemplates[$cls]; + } + + if (!class_exists($cls, false)) { + $key = $this->cache->generateKey($name, $mainCls); + + if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) { + $this->cache->load($key); + } + + if (!class_exists($cls, false)) { + $source = $this->getLoader()->getSourceContext($name); + $content = $this->compileSource($source); + $this->cache->write($key, $content); + $this->cache->load($key); + + if (!class_exists($mainCls, false)) { + /* Last line of defense if either $this->bcWriteCacheFile was used, + * $this->cache is implemented as a no-op or we have a race condition + * where the cache was cleared between the above calls to write to and load from + * the cache. + */ + eval('?>'.$content); + } + + if (!class_exists($cls, false)) { + throw new RuntimeError(\sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source); + } + } + } + + $this->extensionSet->initRuntime(); + + return $this->loadedTemplates[$cls] = new $cls($this); + } + + /** + * Creates a template from source. + * + * This method should not be used as a generic way to load templates. + * + * @param string $template The template source + * @param string|null $name An optional name of the template to be used in error messages + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + */ + public function createTemplate(string $template, ?string $name = null): TemplateWrapper + { + $hash = hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $template, false); + if (null !== $name) { + $name = \sprintf('%s (string template %s)', $name, $hash); + } else { + $name = \sprintf('__string_template__%s', $hash); + } + + $loader = new ChainLoader([ + new ArrayLoader([$name => $template]), + $current = $this->getLoader(), + ]); + + $this->setLoader($loader); + try { + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } finally { + $this->setLoader($current); + } + } + + /** + * Returns true if the template is still fresh. + * + * Besides checking the loader for freshness information, + * this method also checks if the enabled extensions have + * not changed. + * + * @param int $time The last modification time of the cached template + */ + public function isTemplateFresh(string $name, int $time): bool + { + return $this->extensionSet->getLastModified() <= $time && $this->getLoader()->isFresh($name, $time); + } + + /** + * Tries to load a template consecutively from an array. + * + * Similar to load() but it also accepts instances of \Twig\TemplateWrapper + * and an array of templates where each is tried to be loaded. + * + * @param string|TemplateWrapper|array<string|TemplateWrapper> $names A template or an array of templates to try consecutively + * + * @throws LoaderError When none of the templates can be found + * @throws SyntaxError When an error occurred during compilation + */ + public function resolveTemplate($names): TemplateWrapper + { + if (!\is_array($names)) { + return $this->load($names); + } + + $count = \count($names); + foreach ($names as $name) { + if ($name instanceof Template) { + trigger_deprecation('twig/twig', '3.9', 'Passing a "%s" instance to "%s" is deprecated.', Template::class, __METHOD__); + + return new TemplateWrapper($this, $name); + } + if ($name instanceof TemplateWrapper) { + return $name; + } + + if (1 !== $count && !$this->getLoader()->exists($name)) { + continue; + } + + return $this->load($name); + } + + throw new LoaderError(\sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names))); + } + + public function setLexer(Lexer $lexer) + { + $this->lexer = $lexer; + } + + /** + * @throws SyntaxError When the code is syntactically wrong + */ + public function tokenize(Source $source): TokenStream + { + if (null === $this->lexer) { + $this->lexer = new Lexer($this); + } + + return $this->lexer->tokenize($source); + } + + public function setParser(Parser $parser) + { + $this->parser = $parser; + } + + /** + * Converts a token stream to a node tree. + * + * @throws SyntaxError When the token stream is syntactically or semantically wrong + */ + public function parse(TokenStream $stream): ModuleNode + { + if (null === $this->parser) { + $this->parser = new Parser($this); + } + + return $this->parser->parse($stream); + } + + public function setCompiler(Compiler $compiler) + { + $this->compiler = $compiler; + } + + /** + * Compiles a node and returns the PHP code. + */ + public function compile(Node $node): string + { + if (null === $this->compiler) { + $this->compiler = new Compiler($this); + } + + return $this->compiler->compile($node)->getSource(); + } + + /** + * Compiles a template source code. + * + * @throws SyntaxError When there was an error during tokenizing, parsing or compiling + */ + public function compileSource(Source $source): string + { + try { + return $this->compile($this->parse($this->tokenize($source))); + } catch (Error $e) { + $e->setSourceContext($source); + throw $e; + } catch (\Exception $e) { + throw new SyntaxError(\sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $source, $e); + } + } + + public function setLoader(LoaderInterface $loader) + { + $this->loader = $loader; + } + + public function getLoader(): LoaderInterface + { + return $this->loader; + } + + public function setCharset(string $charset) + { + if ('UTF8' === $charset = strtoupper($charset ?: '')) { + // iconv on Windows requires "UTF-8" instead of "UTF8" + $charset = 'UTF-8'; + } + + $this->charset = $charset; + } + + public function getCharset(): string + { + return $this->charset; + } + + public function hasExtension(string $class): bool + { + return $this->extensionSet->hasExtension($class); + } + + public function addRuntimeLoader(RuntimeLoaderInterface $loader) + { + $this->runtimeLoaders[] = $loader; + } + + /** + * @template TExtension of ExtensionInterface + * + * @param class-string<TExtension> $class + * + * @return TExtension + */ + public function getExtension(string $class): ExtensionInterface + { + return $this->extensionSet->getExtension($class); + } + + /** + * Returns the runtime implementation of a Twig element (filter/function/tag/test). + * + * @template TRuntime of object + * + * @param class-string<TRuntime> $class A runtime class name + * + * @return TRuntime The runtime implementation + * + * @throws RuntimeError When the template cannot be found + */ + public function getRuntime(string $class) + { + if (isset($this->runtimes[$class])) { + return $this->runtimes[$class]; + } + + foreach ($this->runtimeLoaders as $loader) { + if (null !== $runtime = $loader->load($class)) { + return $this->runtimes[$class] = $runtime; + } + } + + if (null !== $runtime = $this->defaultRuntimeLoader->load($class)) { + return $this->runtimes[$class] = $runtime; + } + + throw new RuntimeError(\sprintf('Unable to load the "%s" runtime.', $class)); + } + + public function addExtension(ExtensionInterface $extension) + { + $this->extensionSet->addExtension($extension); + $this->updateOptionsHash(); + } + + /** + * @param ExtensionInterface[] $extensions An array of extensions + */ + public function setExtensions(array $extensions) + { + $this->extensionSet->setExtensions($extensions); + $this->updateOptionsHash(); + } + + /** + * @return ExtensionInterface[] An array of extensions (keys are for internal usage only and should not be relied on) + */ + public function getExtensions(): array + { + return $this->extensionSet->getExtensions(); + } + + public function addTokenParser(TokenParserInterface $parser) + { + $this->extensionSet->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + * + * @internal + */ + public function getTokenParsers(): array + { + return $this->extensionSet->getTokenParsers(); + } + + /** + * @internal + */ + public function getTokenParser(string $name): ?TokenParserInterface + { + return $this->extensionSet->getTokenParser($name); + } + + public function registerUndefinedTokenParserCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedTokenParserCallback($callable); + } + + public function addNodeVisitor(NodeVisitorInterface $visitor) + { + $this->extensionSet->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + * + * @internal + */ + public function getNodeVisitors(): array + { + return $this->extensionSet->getNodeVisitors(); + } + + public function addFilter(TwigFilter $filter) + { + $this->extensionSet->addFilter($filter); + } + + /** + * @internal + */ + public function getFilter(string $name): ?TwigFilter + { + return $this->extensionSet->getFilter($name); + } + + public function registerUndefinedFilterCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedFilterCallback($callable); + } + + /** + * Gets the registered Filters. + * + * Be warned that this method cannot return filters defined with registerUndefinedFilterCallback. + * + * @return TwigFilter[] + * + * @see registerUndefinedFilterCallback + * + * @internal + */ + public function getFilters(): array + { + return $this->extensionSet->getFilters(); + } + + public function addTest(TwigTest $test) + { + $this->extensionSet->addTest($test); + } + + /** + * @return TwigTest[] + * + * @internal + */ + public function getTests(): array + { + return $this->extensionSet->getTests(); + } + + /** + * @internal + */ + public function getTest(string $name): ?TwigTest + { + return $this->extensionSet->getTest($name); + } + + public function addFunction(TwigFunction $function) + { + $this->extensionSet->addFunction($function); + } + + /** + * @internal + */ + public function getFunction(string $name): ?TwigFunction + { + return $this->extensionSet->getFunction($name); + } + + public function registerUndefinedFunctionCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedFunctionCallback($callable); + } + + /** + * Gets registered functions. + * + * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback. + * + * @return TwigFunction[] + * + * @see registerUndefinedFunctionCallback + * + * @internal + */ + public function getFunctions(): array + { + return $this->extensionSet->getFunctions(); + } + + /** + * Registers a Global. + * + * New globals can be added before compiling or rendering a template; + * but after, you can only update existing globals. + * + * @param mixed $value The global value + */ + public function addGlobal(string $name, $value) + { + if ($this->extensionSet->isInitialized() && !\array_key_exists($name, $this->getGlobals())) { + throw new \LogicException(\sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name)); + } + + if (null !== $this->resolvedGlobals) { + $this->resolvedGlobals[$name] = $value; + } else { + $this->globals[$name] = $value; + } + } + + /** + * @internal + * + * @return array<string, mixed> + */ + public function getGlobals(): array + { + if ($this->extensionSet->isInitialized()) { + if (null === $this->resolvedGlobals) { + $this->resolvedGlobals = array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + return $this->resolvedGlobals; + } + + return array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + public function mergeGlobals(array $context): array + { + // we don't use array_merge as the context being generally + // bigger than globals, this code is faster. + foreach ($this->getGlobals() as $key => $value) { + if (!\array_key_exists($key, $context)) { + $context[$key] = $value; + } + } + + return $context; + } + + /** + * @internal + * + * @return array<string, array{precedence: int, class: class-string<AbstractUnary>}> + */ + public function getUnaryOperators(): array + { + return $this->extensionSet->getUnaryOperators(); + } + + /** + * @internal + * + * @return array<string, array{precedence: int, class: class-string<AbstractBinary>, associativity: ExpressionParser::OPERATOR_*}> + */ + public function getBinaryOperators(): array + { + return $this->extensionSet->getBinaryOperators(); + } + + private function updateOptionsHash(): void + { + $this->optionsHash = implode(':', [ + $this->extensionSet->getSignature(), + \PHP_MAJOR_VERSION, + \PHP_MINOR_VERSION, + self::VERSION, + (int) $this->debug, + (int) $this->strictVariables, + $this->useYield ? '1' : '0', + ]); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/Error.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/Error.php new file mode 100644 index 0000000..4efd9ca --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/Error.php @@ -0,0 +1,227 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Error; + +use Twig\Source; +use Twig\Template; + +/** + * Twig base exception. + * + * This exception class and its children must only be used when + * an error occurs during the loading of a template, when a syntax error + * is detected in a template, or when rendering a template. Other + * errors must use regular PHP exception classes (like when the template + * cache directory is not writable for instance). + * + * To help debugging template issues, this class tracks the original template + * name and line where the error occurred. + * + * Whenever possible, you must set these information (original template name + * and line number) yourself by passing them to the constructor. If some or all + * these information are not available from where you throw the exception, then + * this class will guess them automatically (when the line number is set to -1 + * and/or the name is set to null). As this is a costly operation, this + * can be disabled by passing false for both the name and the line number + * when creating a new instance of this class. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class Error extends \Exception +{ + private $lineno; + private $name; + private $rawMessage; + private $sourcePath; + private $sourceCode; + + /** + * Constructor. + * + * By default, automatic guessing is enabled. + * + * @param string $message The error message + * @param int $lineno The template line where the error occurred + * @param Source|null $source The source context where the error occurred + */ + public function __construct(string $message, int $lineno = -1, ?Source $source = null, ?\Throwable $previous = null) + { + parent::__construct('', 0, $previous); + + if (null === $source) { + $name = null; + } else { + $name = $source->getName(); + $this->sourceCode = $source->getCode(); + $this->sourcePath = $source->getPath(); + } + + $this->lineno = $lineno; + $this->name = $name; + $this->rawMessage = $message; + $this->updateRepr(); + } + + public function getRawMessage(): string + { + return $this->rawMessage; + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function setTemplateLine(int $lineno): void + { + $this->lineno = $lineno; + + $this->updateRepr(); + } + + public function getSourceContext(): ?Source + { + return $this->name ? new Source($this->sourceCode, $this->name, $this->sourcePath) : null; + } + + public function setSourceContext(?Source $source = null): void + { + if (null === $source) { + $this->sourceCode = $this->name = $this->sourcePath = null; + } else { + $this->sourceCode = $source->getCode(); + $this->name = $source->getName(); + $this->sourcePath = $source->getPath(); + } + + $this->updateRepr(); + } + + public function guess(): void + { + $this->guessTemplateInfo(); + $this->updateRepr(); + } + + public function appendMessage($rawMessage): void + { + $this->rawMessage .= $rawMessage; + $this->updateRepr(); + } + + private function updateRepr(): void + { + $this->message = $this->rawMessage; + + if ($this->sourcePath && $this->lineno > 0) { + $this->file = $this->sourcePath; + $this->line = $this->lineno; + + return; + } + + $dot = false; + if (str_ends_with($this->message, '.')) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + $questionMark = false; + if (str_ends_with($this->message, '?')) { + $this->message = substr($this->message, 0, -1); + $questionMark = true; + } + + if ($this->name) { + if (\is_string($this->name) || (\is_object($this->name) && method_exists($this->name, '__toString'))) { + $name = \sprintf('"%s"', $this->name); + } else { + $name = json_encode($this->name); + } + $this->message .= \sprintf(' in %s', $name); + } + + if ($this->lineno && $this->lineno >= 0) { + $this->message .= \sprintf(' at line %d', $this->lineno); + } + + if ($dot) { + $this->message .= '.'; + } + + if ($questionMark) { + $this->message .= '?'; + } + } + + private function guessTemplateInfo(): void + { + $template = null; + $templateClass = null; + + $backtrace = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS | \DEBUG_BACKTRACE_PROVIDE_OBJECT); + foreach ($backtrace as $trace) { + if (isset($trace['object']) && $trace['object'] instanceof Template) { + $currentClass = \get_class($trace['object']); + $isEmbedContainer = null === $templateClass ? false : str_starts_with($templateClass, $currentClass); + if (null === $this->name || ($this->name == $trace['object']->getTemplateName() && !$isEmbedContainer)) { + $template = $trace['object']; + $templateClass = \get_class($trace['object']); + } + } + } + + // update template name + if (null !== $template && null === $this->name) { + $this->name = $template->getTemplateName(); + } + + // update template path if any + if (null !== $template && null === $this->sourcePath) { + $src = $template->getSourceContext(); + $this->sourceCode = $src->getCode(); + $this->sourcePath = $src->getPath(); + } + + if (null === $template || $this->lineno > -1) { + return; + } + + $r = new \ReflectionObject($template); + $file = $r->getFileName(); + + $exceptions = [$e = $this]; + while ($e = $e->getPrevious()) { + $exceptions[] = $e; + } + + while ($e = array_pop($exceptions)) { + $traces = $e->getTrace(); + array_unshift($traces, ['file' => $e->getFile(), 'line' => $e->getLine()]); + + while ($trace = array_shift($traces)) { + if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) { + continue; + } + + foreach ($template->getDebugInfo() as $codeLine => $templateLine) { + if ($codeLine <= $trace['line']) { + // update template line + $this->lineno = $templateLine; + + return; + } + } + } + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/LoaderError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/LoaderError.php new file mode 100644 index 0000000..7c8c23c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/LoaderError.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Error; + +/** + * Exception thrown when an error occurs during template loading. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class LoaderError extends Error +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/RuntimeError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/RuntimeError.php new file mode 100644 index 0000000..f6b8476 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/RuntimeError.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Error; + +/** + * Exception thrown when an error occurs at runtime. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class RuntimeError extends Error +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/SyntaxError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/SyntaxError.php new file mode 100644 index 0000000..841b653 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Error/SyntaxError.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Error; + +/** + * \Exception thrown when a syntax error occurs during lexing or parsing of a template. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class SyntaxError extends Error +{ + /** + * Tweaks the error message to include suggestions. + * + * @param string $name The original name of the item that does not exist + * @param array $items An array of possible items + */ + public function addSuggestions(string $name, array $items): void + { + $alternatives = []; + foreach ($items as $item) { + $lev = levenshtein($name, $item); + if ($lev <= \strlen($name) / 3 || str_contains($item, $name)) { + $alternatives[$item] = $lev; + } + } + + if (!$alternatives) { + return; + } + + asort($alternatives); + + $this->appendMessage(\sprintf(' Did you mean "%s"?', implode('", "', array_keys($alternatives)))); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExpressionParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExpressionParser.php new file mode 100644 index 0000000..8448440 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExpressionParser.php @@ -0,0 +1,852 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Error\SyntaxError; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\ArrowFunctionExpression; +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\Binary\AbstractBinary; +use Twig\Node\Expression\Binary\ConcatBinary; +use Twig\Node\Expression\BlockReferenceExpression; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\MethodCallExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\ParentExpression; +use Twig\Node\Expression\TestExpression; +use Twig\Node\Expression\Unary\AbstractUnary; +use Twig\Node\Expression\Unary\NegUnary; +use Twig\Node\Expression\Unary\NotUnary; +use Twig\Node\Expression\Unary\PosUnary; +use Twig\Node\Node; + +/** + * Parses expressions. + * + * This parser implements a "Precedence climbing" algorithm. + * + * @see https://www.engr.mun.ca/~theo/Misc/exp_parsing.htm + * @see https://en.wikipedia.org/wiki/Operator-precedence_parser + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class ExpressionParser +{ + public const OPERATOR_LEFT = 1; + public const OPERATOR_RIGHT = 2; + + private $parser; + private $env; + /** @var array<string, array{precedence: int, class: class-string<AbstractUnary>}> */ + private $unaryOperators; + /** @var array<string, array{precedence: int, class: class-string<AbstractBinary>, associativity: self::OPERATOR_*}> */ + private $binaryOperators; + + public function __construct(Parser $parser, Environment $env) + { + $this->parser = $parser; + $this->env = $env; + $this->unaryOperators = $env->getUnaryOperators(); + $this->binaryOperators = $env->getBinaryOperators(); + } + + public function parseExpression($precedence = 0, $allowArrow = false) + { + if ($allowArrow && $arrow = $this->parseArrow()) { + return $arrow; + } + + $expr = $this->getPrimary(); + $token = $this->parser->getCurrentToken(); + while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) { + $op = $this->binaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + + if ('is not' === $token->getValue()) { + $expr = $this->parseNotTestExpression($expr); + } elseif ('is' === $token->getValue()) { + $expr = $this->parseTestExpression($expr); + } elseif (isset($op['callable'])) { + $expr = $op['callable']($this->parser, $expr); + } else { + $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence'], true); + $class = $op['class']; + $expr = new $class($expr, $expr1, $token->getLine()); + } + + $token = $this->parser->getCurrentToken(); + } + + if (0 === $precedence) { + return $this->parseConditionalExpression($expr); + } + + return $expr; + } + + /** + * @return ArrowFunctionExpression|null + */ + private function parseArrow() + { + $stream = $this->parser->getStream(); + + // short array syntax (one argument, no parentheses)? + if ($stream->look(1)->test(/* Token::ARROW_TYPE */ 12)) { + $line = $stream->getCurrent()->getLine(); + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names = [new AssignNameExpression($token->getValue(), $token->getLine())]; + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + // first, determine if we are parsing an arrow function by finding => (long form) + $i = 0; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + return null; + } + ++$i; + while (true) { + // variable name + ++$i; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + ++$i; + } + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + return null; + } + ++$i; + if (!$stream->look($i)->test(/* Token::ARROW_TYPE */ 12)) { + return null; + } + + // yes, let's parse it properly + $token = $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '('); + $line = $token->getLine(); + + $names = []; + while (true) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names[] = new AssignNameExpression($token->getValue(), $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')'); + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + private function getPrimary(): AbstractExpression + { + $token = $this->parser->getCurrentToken(); + + if ($this->isUnary($token)) { + $operator = $this->unaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + $expr = $this->parseExpression($operator['precedence']); + $class = $operator['class']; + + return $this->parsePostfixExpression(new $class($expr, $token->getLine())); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $this->parser->getStream()->next(); + $expr = $this->parseExpression(); + $this->parser->getStream()->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'An opened parenthesis is not properly closed'); + + return $this->parsePostfixExpression($expr); + } + + return $this->parsePrimaryExpression(); + } + + private function parseConditionalExpression($expr): AbstractExpression + { + while ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, '?')) { + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $expr2 = $this->parseExpression(); + if ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + // Ternary operator (expr ? expr2 : expr3) + $expr3 = $this->parseExpression(); + } else { + // Ternary without else (expr ? expr2) + $expr3 = new ConstantExpression('', $this->parser->getCurrentToken()->getLine()); + } + } else { + // Ternary without then (expr ?: expr3) + $expr2 = $expr; + $expr3 = $this->parseExpression(); + } + + $expr = new ConditionalExpression($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine()); + } + + return $expr; + } + + private function isUnary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->unaryOperators[$token->getValue()]); + } + + private function isBinary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->binaryOperators[$token->getValue()]); + } + + public function parsePrimaryExpression() + { + $token = $this->parser->getCurrentToken(); + switch ($token->getType()) { + case /* Token::NAME_TYPE */ 5: + $this->parser->getStream()->next(); + switch ($token->getValue()) { + case 'true': + case 'TRUE': + $node = new ConstantExpression(true, $token->getLine()); + break; + + case 'false': + case 'FALSE': + $node = new ConstantExpression(false, $token->getLine()); + break; + + case 'none': + case 'NONE': + case 'null': + case 'NULL': + $node = new ConstantExpression(null, $token->getLine()); + break; + + default: + if ('(' === $this->parser->getCurrentToken()->getValue()) { + $node = $this->getFunctionNode($token->getValue(), $token->getLine()); + } else { + $node = new NameExpression($token->getValue(), $token->getLine()); + } + } + break; + + case /* Token::NUMBER_TYPE */ 6: + $this->parser->getStream()->next(); + $node = new ConstantExpression($token->getValue(), $token->getLine()); + break; + + case /* Token::STRING_TYPE */ 7: + case /* Token::INTERPOLATION_START_TYPE */ 10: + $node = $this->parseStringExpression(); + break; + + case /* Token::OPERATOR_TYPE */ 8: + if (preg_match(Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + $node = new NameExpression($token->getValue(), $token->getLine()); + break; + } + + if (isset($this->unaryOperators[$token->getValue()])) { + $class = $this->unaryOperators[$token->getValue()]['class']; + if (!\in_array($class, [NegUnary::class, PosUnary::class])) { + throw new SyntaxError(\sprintf('Unexpected unary operator "%s".', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + + $this->parser->getStream()->next(); + $expr = $this->parsePrimaryExpression(); + + $node = new $class($expr, $token->getLine()); + break; + } + + // no break + default: + if ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '[')) { + $node = $this->parseSequenceExpression(); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '{')) { + $node = $this->parseMappingExpression(); + } elseif ($token->test(/* Token::OPERATOR_TYPE */ 8, '=') && ('==' === $this->parser->getStream()->look(-1)->getValue() || '!=' === $this->parser->getStream()->look(-1)->getValue())) { + throw new SyntaxError(\sprintf('Unexpected operator of value "%s". Did you try to use "===" or "!==" for strict comparison? Use "is same as(value)" instead.', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } else { + throw new SyntaxError(\sprintf('Unexpected token "%s" of value "%s".', Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + } + + return $this->parsePostfixExpression($node); + } + + public function parseStringExpression() + { + $stream = $this->parser->getStream(); + + $nodes = []; + // a string cannot be followed by another string in a single expression + $nextCanBeString = true; + while (true) { + if ($nextCanBeString && $token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) { + $nodes[] = new ConstantExpression($token->getValue(), $token->getLine()); + $nextCanBeString = false; + } elseif ($stream->nextIf(/* Token::INTERPOLATION_START_TYPE */ 10)) { + $nodes[] = $this->parseExpression(); + $stream->expect(/* Token::INTERPOLATION_END_TYPE */ 11); + $nextCanBeString = true; + } else { + break; + } + } + + $expr = array_shift($nodes); + foreach ($nodes as $node) { + $expr = new ConcatBinary($expr, $node, $node->getTemplateLine()); + } + + return $expr; + } + + /** + * @deprecated since 3.11, use parseSequenceExpression() instead + */ + public function parseArrayExpression() + { + trigger_deprecation('twig/twig', '3.11', 'Calling "%s()" is deprecated, use "parseSequenceExpression()" instead.', __METHOD__); + + return $this->parseSequenceExpression(); + } + + public function parseSequenceExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '[', 'A sequence element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'A sequence element must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + break; + } + } + $first = false; + + if ($stream->test(/* Token::SPREAD_TYPE */ 13)) { + $stream->next(); + $expr = $this->parseExpression(); + $expr->setAttribute('spread', true); + $node->addElement($expr); + } else { + $node->addElement($this->parseExpression()); + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']', 'An opened sequence is not properly closed'); + + return $node; + } + + /** + * @deprecated since 3.11, use parseMappingExpression() instead + */ + public function parseHashExpression() + { + trigger_deprecation('twig/twig', '3.11', 'Calling "%s()" is deprecated, use "parseMappingExpression()" instead.', __METHOD__); + + return $this->parseMappingExpression(); + } + + public function parseMappingExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '{', 'A mapping element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'A mapping value must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + break; + } + } + $first = false; + + if ($stream->test(/* Token::SPREAD_TYPE */ 13)) { + $stream->next(); + $value = $this->parseExpression(); + $value->setAttribute('spread', true); + $node->addElement($value); + continue; + } + + // a mapping key can be: + // + // * a number -- 12 + // * a string -- 'a' + // * a name, which is equivalent to a string -- a + // * an expression, which must be enclosed in parentheses -- (1 + 2) + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $key = new ConstantExpression($token->getValue(), $token->getLine()); + + // {a} is a shortcut for {a:a} + if ($stream->test(Token::PUNCTUATION_TYPE, [',', '}'])) { + $value = new NameExpression($key->getAttribute('value'), $key->getTemplateLine()); + $node->addElement($value, $key); + continue; + } + } elseif (($token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) || $token = $stream->nextIf(/* Token::NUMBER_TYPE */ 6)) { + $key = new ConstantExpression($token->getValue(), $token->getLine()); + } elseif ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $key = $this->parseExpression(); + } else { + $current = $stream->getCurrent(); + + throw new SyntaxError(\sprintf('A mapping key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s".', Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ':', 'A mapping key must be followed by a colon (:)'); + $value = $this->parseExpression(); + + $node->addElement($value, $key); + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '}', 'An opened mapping is not properly closed'); + + return $node; + } + + public function parsePostfixExpression($node) + { + while (true) { + $token = $this->parser->getCurrentToken(); + if (/* Token::PUNCTUATION_TYPE */ 9 == $token->getType()) { + if ('.' == $token->getValue() || '[' == $token->getValue()) { + $node = $this->parseSubscriptExpression($node); + } elseif ('|' == $token->getValue()) { + $node = $this->parseFilterExpression($node); + } else { + break; + } + } else { + break; + } + } + + return $node; + } + + public function getFunctionNode($name, $line) + { + switch ($name) { + case 'parent': + $this->parseArguments(); + if (!\count($this->parser->getBlockStack())) { + throw new SyntaxError('Calling "parent" outside a block is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + if (!$this->parser->getParent() && !$this->parser->hasTraits()) { + throw new SyntaxError('Calling "parent" on a template that does not extend nor "use" another template is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + return new ParentExpression($this->parser->peekBlockStack(), $line); + case 'block': + $args = $this->parseArguments(); + if (\count($args) < 1) { + throw new SyntaxError('The "block" function takes one argument (the block name).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new BlockReferenceExpression($args->getNode('0'), \count($args) > 1 ? $args->getNode('1') : null, $line); + case 'attribute': + $args = $this->parseArguments(); + if (\count($args) < 2) { + throw new SyntaxError('The "attribute" function takes at least two arguments (the variable and the attributes).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new GetAttrExpression($args->getNode('0'), $args->getNode('1'), \count($args) > 2 ? $args->getNode('2') : null, Template::ANY_CALL, $line); + default: + if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) { + $arguments = new ArrayExpression([], $line); + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + + $node = new MethodCallExpression($alias['node'], $alias['name'], $arguments, $line); + $node->setAttribute('safe', true); + + return $node; + } + + $args = $this->parseArguments(true); + $class = $this->getFunctionNodeClass($name, $line); + + return new $class($name, $args, $line); + } + } + + public function parseSubscriptExpression($node) + { + $stream = $this->parser->getStream(); + $token = $stream->next(); + $lineno = $token->getLine(); + $arguments = new ArrayExpression([], $lineno); + $type = Template::ANY_CALL; + if ('.' == $token->getValue()) { + $token = $stream->next(); + if ( + /* Token::NAME_TYPE */ 5 == $token->getType() + || + /* Token::NUMBER_TYPE */ 6 == $token->getType() + || + (/* Token::OPERATOR_TYPE */ 8 == $token->getType() && preg_match(Lexer::REGEX_NAME, $token->getValue())) + ) { + $arg = new ConstantExpression($token->getValue(), $lineno); + + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $type = Template::METHOD_CALL; + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + } + } else { + throw new SyntaxError(\sprintf('Expected name or number, got value "%s" of type %s.', $token->getValue(), Token::typeToEnglish($token->getType())), $lineno, $stream->getSourceContext()); + } + + if ($node instanceof NameExpression && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) { + $name = $arg->getAttribute('value'); + + $node = new MethodCallExpression($node, 'macro_'.$name, $arguments, $lineno); + $node->setAttribute('safe', true); + + return $node; + } + } else { + $type = Template::ARRAY_CALL; + + // slice? + $slice = false; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + $arg = new ConstantExpression(0, $token->getLine()); + } else { + $arg = $this->parseExpression(); + } + + if ($stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + } + + if ($slice) { + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + $length = new ConstantExpression(null, $token->getLine()); + } else { + $length = $this->parseExpression(); + } + + $class = $this->getFilterNodeClass('slice', $token->getLine()); + $arguments = new Node([$arg, $length]); + $filter = new $class($node, new ConstantExpression('slice', $token->getLine()), $arguments, $token->getLine()); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + + return $filter; + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + } + + return new GetAttrExpression($node, $arg, $arguments, $type, $lineno); + } + + public function parseFilterExpression($node) + { + $this->parser->getStream()->next(); + + return $this->parseFilterExpressionRaw($node); + } + + public function parseFilterExpressionRaw($node, $tag = null) + { + while (true) { + $token = $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5); + + $name = new ConstantExpression($token->getValue(), $token->getLine()); + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = new Node(); + } else { + $arguments = $this->parseArguments(true, false, true); + } + + $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine()); + + $node = new $class($node, $name, $arguments, $token->getLine(), $tag); + + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '|')) { + break; + } + + $this->parser->getStream()->next(); + } + + return $node; + } + + /** + * Parses arguments. + * + * @param bool $namedArguments Whether to allow named arguments or not + * @param bool $definition Whether we are parsing arguments for a function definition + * + * @return Node + * + * @throws SyntaxError + */ + public function parseArguments($namedArguments = false, $definition = false, $allowArrow = false) + { + $args = []; + $stream = $this->parser->getStream(); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '(', 'A list of arguments must begin with an opening parenthesis'); + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + if (!empty($args)) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'Arguments must be separated by a comma'); + + // if the comma above was a trailing comma, early exit the argument parse loop + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + break; + } + } + + if ($definition) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5, null, 'An argument must be a name'); + $value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine()); + } else { + $value = $this->parseExpression(0, $allowArrow); + } + + $name = null; + if ($namedArguments && $token = $stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + if (!$value instanceof NameExpression) { + throw new SyntaxError(\sprintf('A parameter name must be a string, "%s" given.', \get_class($value)), $token->getLine(), $stream->getSourceContext()); + } + $name = $value->getAttribute('name'); + + if ($definition) { + $value = $this->parsePrimaryExpression(); + + if (!$this->checkConstantExpression($value)) { + throw new SyntaxError('A default value for an argument must be a constant (a boolean, a string, a number, a sequence, or a mapping).', $token->getLine(), $stream->getSourceContext()); + } + } else { + $value = $this->parseExpression(0, $allowArrow); + } + } + + if ($definition) { + if (null === $name) { + $name = $value->getAttribute('name'); + $value = new ConstantExpression(null, $this->parser->getCurrentToken()->getLine()); + } + $args[$name] = $value; + } else { + if (null === $name) { + $args[] = $value; + } else { + $args[$name] = $value; + } + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'A list of arguments must be closed by a parenthesis'); + + return new Node($args); + } + + public function parseAssignmentExpression() + { + $stream = $this->parser->getStream(); + $targets = []; + while (true) { + $token = $this->parser->getCurrentToken(); + if ($stream->test(/* Token::OPERATOR_TYPE */ 8) && preg_match(Lexer::REGEX_NAME, $token->getValue())) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + } else { + $stream->expect(/* Token::NAME_TYPE */ 5, null, 'Only variables can be assigned to'); + } + $value = $token->getValue(); + if (\in_array(strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), ['true', 'false', 'none', 'null'])) { + throw new SyntaxError(\sprintf('You cannot assign a value to "%s".', $value), $token->getLine(), $stream->getSourceContext()); + } + $targets[] = new AssignNameExpression($value, $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + public function parseMultitargetExpression() + { + $targets = []; + while (true) { + $targets[] = $this->parseExpression(); + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + private function parseNotTestExpression(Node $node): NotUnary + { + return new NotUnary($this->parseTestExpression($node), $this->parser->getCurrentToken()->getLine()); + } + + private function parseTestExpression(Node $node): TestExpression + { + $stream = $this->parser->getStream(); + [$name, $test] = $this->getTest($node->getTemplateLine()); + + $class = $this->getTestNodeClass($test); + $arguments = null; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = $this->parseArguments(true); + } elseif ($test->hasOneMandatoryArgument()) { + $arguments = new Node([0 => $this->parsePrimaryExpression()]); + } + + if ('defined' === $name && $node instanceof NameExpression && null !== $alias = $this->parser->getImportedSymbol('function', $node->getAttribute('name'))) { + $node = new MethodCallExpression($alias['node'], $alias['name'], new ArrayExpression([], $node->getTemplateLine()), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + + return new $class($node, $name, $arguments, $this->parser->getCurrentToken()->getLine()); + } + + private function getTest(int $line): array + { + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + if ($test = $this->env->getTest($name)) { + return [$name, $test]; + } + + if ($stream->test(/* Token::NAME_TYPE */ 5)) { + // try 2-words tests + $name = $name.' '.$this->parser->getCurrentToken()->getValue(); + + if ($test = $this->env->getTest($name)) { + $stream->next(); + + return [$name, $test]; + } + } + + $e = new SyntaxError(\sprintf('Unknown "%s" test.', $name), $line, $stream->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getTests())); + + throw $e; + } + + private function getTestNodeClass(TwigTest $test): string + { + if ($test->isDeprecated()) { + $stream = $this->parser->getStream(); + $message = \sprintf('Twig Test "%s" is deprecated', $test->getName()); + + if ($test->getAlternative()) { + $message .= \sprintf('. Use "%s" instead', $test->getAlternative()); + } + $src = $stream->getSourceContext(); + $message .= \sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine()); + + trigger_deprecation($test->getDeprecatingPackage(), $test->getDeprecatedVersion(), $message); + } + + return $test->getNodeClass(); + } + + private function getFunctionNodeClass(string $name, int $line): string + { + if (!$function = $this->env->getFunction($name)) { + $e = new SyntaxError(\sprintf('Unknown "%s" function.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFunctions())); + + throw $e; + } + + if ($function->isDeprecated()) { + $message = \sprintf('Twig Function "%s" is deprecated', $function->getName()); + if ($function->getAlternative()) { + $message .= \sprintf('. Use "%s" instead', $function->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= \sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + trigger_deprecation($function->getDeprecatingPackage(), $function->getDeprecatedVersion(), $message); + } + + return $function->getNodeClass(); + } + + private function getFilterNodeClass(string $name, int $line): string + { + if (!$filter = $this->env->getFilter($name)) { + $e = new SyntaxError(\sprintf('Unknown "%s" filter.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFilters())); + + throw $e; + } + + if ($filter->isDeprecated()) { + $message = \sprintf('Twig Filter "%s" is deprecated', $filter->getName()); + if ($filter->getAlternative()) { + $message .= \sprintf('. Use "%s" instead', $filter->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= \sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + trigger_deprecation($filter->getDeprecatingPackage(), $filter->getDeprecatedVersion(), $message); + } + + return $filter->getNodeClass(); + } + + // checks that the node only contains "constant" elements + private function checkConstantExpression(Node $node): bool + { + if (!($node instanceof ConstantExpression || $node instanceof ArrayExpression + || $node instanceof NegUnary || $node instanceof PosUnary + )) { + return false; + } + + foreach ($node as $n) { + if (!$this->checkConstantExpression($n)) { + return false; + } + } + + return true; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/AbstractExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/AbstractExtension.php new file mode 100644 index 0000000..a1b083b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/AbstractExtension.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +abstract class AbstractExtension implements ExtensionInterface +{ + public function getTokenParsers() + { + return []; + } + + public function getNodeVisitors() + { + return []; + } + + public function getFilters() + { + return []; + } + + public function getTests() + { + return []; + } + + public function getFunctions() + { + return []; + } + + public function getOperators() + { + return [[], []]; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/CoreExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/CoreExtension.php new file mode 100644 index 0000000..b077e79 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/CoreExtension.php @@ -0,0 +1,1946 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\ExpressionParser; +use Twig\Markup; +use Twig\Node\Expression\Binary\AddBinary; +use Twig\Node\Expression\Binary\AndBinary; +use Twig\Node\Expression\Binary\BitwiseAndBinary; +use Twig\Node\Expression\Binary\BitwiseOrBinary; +use Twig\Node\Expression\Binary\BitwiseXorBinary; +use Twig\Node\Expression\Binary\ConcatBinary; +use Twig\Node\Expression\Binary\DivBinary; +use Twig\Node\Expression\Binary\EndsWithBinary; +use Twig\Node\Expression\Binary\EqualBinary; +use Twig\Node\Expression\Binary\FloorDivBinary; +use Twig\Node\Expression\Binary\GreaterBinary; +use Twig\Node\Expression\Binary\GreaterEqualBinary; +use Twig\Node\Expression\Binary\HasEveryBinary; +use Twig\Node\Expression\Binary\HasSomeBinary; +use Twig\Node\Expression\Binary\InBinary; +use Twig\Node\Expression\Binary\LessBinary; +use Twig\Node\Expression\Binary\LessEqualBinary; +use Twig\Node\Expression\Binary\MatchesBinary; +use Twig\Node\Expression\Binary\ModBinary; +use Twig\Node\Expression\Binary\MulBinary; +use Twig\Node\Expression\Binary\NotEqualBinary; +use Twig\Node\Expression\Binary\NotInBinary; +use Twig\Node\Expression\Binary\OrBinary; +use Twig\Node\Expression\Binary\PowerBinary; +use Twig\Node\Expression\Binary\RangeBinary; +use Twig\Node\Expression\Binary\SpaceshipBinary; +use Twig\Node\Expression\Binary\StartsWithBinary; +use Twig\Node\Expression\Binary\SubBinary; +use Twig\Node\Expression\Filter\DefaultFilter; +use Twig\Node\Expression\NullCoalesceExpression; +use Twig\Node\Expression\Test\ConstantTest; +use Twig\Node\Expression\Test\DefinedTest; +use Twig\Node\Expression\Test\DivisiblebyTest; +use Twig\Node\Expression\Test\EvenTest; +use Twig\Node\Expression\Test\NullTest; +use Twig\Node\Expression\Test\OddTest; +use Twig\Node\Expression\Test\SameasTest; +use Twig\Node\Expression\Unary\NegUnary; +use Twig\Node\Expression\Unary\NotUnary; +use Twig\Node\Expression\Unary\PosUnary; +use Twig\NodeVisitor\MacroAutoImportNodeVisitor; +use Twig\Sandbox\SecurityNotAllowedMethodError; +use Twig\Sandbox\SecurityNotAllowedPropertyError; +use Twig\Source; +use Twig\Template; +use Twig\TemplateWrapper; +use Twig\TokenParser\ApplyTokenParser; +use Twig\TokenParser\BlockTokenParser; +use Twig\TokenParser\DeprecatedTokenParser; +use Twig\TokenParser\DoTokenParser; +use Twig\TokenParser\EmbedTokenParser; +use Twig\TokenParser\ExtendsTokenParser; +use Twig\TokenParser\FlushTokenParser; +use Twig\TokenParser\ForTokenParser; +use Twig\TokenParser\FromTokenParser; +use Twig\TokenParser\IfTokenParser; +use Twig\TokenParser\ImportTokenParser; +use Twig\TokenParser\IncludeTokenParser; +use Twig\TokenParser\MacroTokenParser; +use Twig\TokenParser\SetTokenParser; +use Twig\TokenParser\UseTokenParser; +use Twig\TokenParser\WithTokenParser; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +final class CoreExtension extends AbstractExtension +{ + public const ARRAY_LIKE_CLASSES = [ + 'ArrayIterator', + 'ArrayObject', + 'CachingIterator', + 'RecursiveArrayIterator', + 'RecursiveCachingIterator', + 'SplDoublyLinkedList', + 'SplFixedArray', + 'SplObjectStorage', + 'SplQueue', + 'SplStack', + 'WeakMap', + ]; + + private $dateFormats = ['F j, Y H:i', '%d days']; + private $numberFormat = [0, '.', ',']; + private $timezone = null; + + /** + * Sets the default format to be used by the date filter. + * + * @param string|null $format The default date format string + * @param string|null $dateIntervalFormat The default date interval format string + */ + public function setDateFormat($format = null, $dateIntervalFormat = null) + { + if (null !== $format) { + $this->dateFormats[0] = $format; + } + + if (null !== $dateIntervalFormat) { + $this->dateFormats[1] = $dateIntervalFormat; + } + } + + /** + * Gets the default format to be used by the date filter. + * + * @return array The default date format string and the default date interval format string + */ + public function getDateFormat() + { + return $this->dateFormats; + } + + /** + * Sets the default timezone to be used by the date filter. + * + * @param \DateTimeZone|string $timezone The default timezone string or a \DateTimeZone object + */ + public function setTimezone($timezone) + { + $this->timezone = $timezone instanceof \DateTimeZone ? $timezone : new \DateTimeZone($timezone); + } + + /** + * Gets the default timezone to be used by the date filter. + * + * @return \DateTimeZone The default timezone currently in use + */ + public function getTimezone() + { + if (null === $this->timezone) { + $this->timezone = new \DateTimeZone(date_default_timezone_get()); + } + + return $this->timezone; + } + + /** + * Sets the default format to be used by the number_format filter. + * + * @param int $decimal the number of decimal places to use + * @param string $decimalPoint the character(s) to use for the decimal point + * @param string $thousandSep the character(s) to use for the thousands separator + */ + public function setNumberFormat($decimal, $decimalPoint, $thousandSep) + { + $this->numberFormat = [$decimal, $decimalPoint, $thousandSep]; + } + + /** + * Get the default format used by the number_format filter. + * + * @return array The arguments for number_format() + */ + public function getNumberFormat() + { + return $this->numberFormat; + } + + public function getTokenParsers(): array + { + return [ + new ApplyTokenParser(), + new ForTokenParser(), + new IfTokenParser(), + new ExtendsTokenParser(), + new IncludeTokenParser(), + new BlockTokenParser(), + new UseTokenParser(), + new MacroTokenParser(), + new ImportTokenParser(), + new FromTokenParser(), + new SetTokenParser(), + new FlushTokenParser(), + new DoTokenParser(), + new EmbedTokenParser(), + new WithTokenParser(), + new DeprecatedTokenParser(), + ]; + } + + public function getFilters(): array + { + return [ + // formatting filters + new TwigFilter('date', [$this, 'formatDate']), + new TwigFilter('date_modify', [$this, 'modifyDate']), + new TwigFilter('format', [self::class, 'sprintf']), + new TwigFilter('replace', [self::class, 'replace']), + new TwigFilter('number_format', [$this, 'formatNumber']), + new TwigFilter('abs', 'abs'), + new TwigFilter('round', [self::class, 'round']), + + // encoding + new TwigFilter('url_encode', [self::class, 'urlencode']), + new TwigFilter('json_encode', 'json_encode'), + new TwigFilter('convert_encoding', [self::class, 'convertEncoding']), + + // string filters + new TwigFilter('title', [self::class, 'titleCase'], ['needs_charset' => true]), + new TwigFilter('capitalize', [self::class, 'capitalize'], ['needs_charset' => true]), + new TwigFilter('upper', [self::class, 'upper'], ['needs_charset' => true]), + new TwigFilter('lower', [self::class, 'lower'], ['needs_charset' => true]), + new TwigFilter('striptags', [self::class, 'striptags']), + new TwigFilter('trim', [self::class, 'trim']), + new TwigFilter('nl2br', [self::class, 'nl2br'], ['pre_escape' => 'html', 'is_safe' => ['html']]), + new TwigFilter('spaceless', [self::class, 'spaceless'], ['is_safe' => ['html']]), + + // array helpers + new TwigFilter('join', [self::class, 'join']), + new TwigFilter('split', [self::class, 'split'], ['needs_charset' => true]), + new TwigFilter('sort', [self::class, 'sort'], ['needs_environment' => true]), + new TwigFilter('merge', [self::class, 'merge']), + new TwigFilter('batch', [self::class, 'batch']), + new TwigFilter('column', [self::class, 'column']), + new TwigFilter('filter', [self::class, 'filter'], ['needs_environment' => true]), + new TwigFilter('map', [self::class, 'map'], ['needs_environment' => true]), + new TwigFilter('reduce', [self::class, 'reduce'], ['needs_environment' => true]), + new TwigFilter('find', [self::class, 'find'], ['needs_environment' => true]), + + // string/array filters + new TwigFilter('reverse', [self::class, 'reverse'], ['needs_charset' => true]), + new TwigFilter('shuffle', [self::class, 'shuffle'], ['needs_charset' => true]), + new TwigFilter('length', [self::class, 'length'], ['needs_charset' => true]), + new TwigFilter('slice', [self::class, 'slice'], ['needs_charset' => true]), + new TwigFilter('first', [self::class, 'first'], ['needs_charset' => true]), + new TwigFilter('last', [self::class, 'last'], ['needs_charset' => true]), + + // iteration and runtime + new TwigFilter('default', [self::class, 'default'], ['node_class' => DefaultFilter::class]), + new TwigFilter('keys', [self::class, 'keys']), + ]; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('max', 'max'), + new TwigFunction('min', 'min'), + new TwigFunction('range', 'range'), + new TwigFunction('constant', [self::class, 'constant']), + new TwigFunction('cycle', [self::class, 'cycle']), + new TwigFunction('random', [self::class, 'random'], ['needs_charset' => true]), + new TwigFunction('date', [$this, 'convertDate']), + new TwigFunction('include', [self::class, 'include'], ['needs_environment' => true, 'needs_context' => true, 'is_safe' => ['all']]), + new TwigFunction('source', [self::class, 'source'], ['needs_environment' => true, 'is_safe' => ['all']]), + ]; + } + + public function getTests(): array + { + return [ + new TwigTest('even', null, ['node_class' => EvenTest::class]), + new TwigTest('odd', null, ['node_class' => OddTest::class]), + new TwigTest('defined', null, ['node_class' => DefinedTest::class]), + new TwigTest('same as', null, ['node_class' => SameasTest::class, 'one_mandatory_argument' => true]), + new TwigTest('none', null, ['node_class' => NullTest::class]), + new TwigTest('null', null, ['node_class' => NullTest::class]), + new TwigTest('divisible by', null, ['node_class' => DivisiblebyTest::class, 'one_mandatory_argument' => true]), + new TwigTest('constant', null, ['node_class' => ConstantTest::class]), + new TwigTest('empty', [self::class, 'testEmpty']), + new TwigTest('iterable', 'is_iterable'), + new TwigTest('sequence', [self::class, 'testSequence']), + new TwigTest('mapping', [self::class, 'testMapping']), + ]; + } + + public function getNodeVisitors(): array + { + return [new MacroAutoImportNodeVisitor()]; + } + + public function getOperators(): array + { + return [ + [ + 'not' => ['precedence' => 50, 'class' => NotUnary::class], + '-' => ['precedence' => 500, 'class' => NegUnary::class], + '+' => ['precedence' => 500, 'class' => PosUnary::class], + ], + [ + 'or' => ['precedence' => 10, 'class' => OrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'and' => ['precedence' => 15, 'class' => AndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-or' => ['precedence' => 16, 'class' => BitwiseOrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-xor' => ['precedence' => 17, 'class' => BitwiseXorBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-and' => ['precedence' => 18, 'class' => BitwiseAndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '==' => ['precedence' => 20, 'class' => EqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '!=' => ['precedence' => 20, 'class' => NotEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=>' => ['precedence' => 20, 'class' => SpaceshipBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<' => ['precedence' => 20, 'class' => LessBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>' => ['precedence' => 20, 'class' => GreaterBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>=' => ['precedence' => 20, 'class' => GreaterEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=' => ['precedence' => 20, 'class' => LessEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'not in' => ['precedence' => 20, 'class' => NotInBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'in' => ['precedence' => 20, 'class' => InBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'matches' => ['precedence' => 20, 'class' => MatchesBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'starts with' => ['precedence' => 20, 'class' => StartsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'ends with' => ['precedence' => 20, 'class' => EndsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'has some' => ['precedence' => 20, 'class' => HasSomeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'has every' => ['precedence' => 20, 'class' => HasEveryBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '..' => ['precedence' => 25, 'class' => RangeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '+' => ['precedence' => 30, 'class' => AddBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '-' => ['precedence' => 30, 'class' => SubBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '~' => ['precedence' => 40, 'class' => ConcatBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '*' => ['precedence' => 60, 'class' => MulBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '/' => ['precedence' => 60, 'class' => DivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '//' => ['precedence' => 60, 'class' => FloorDivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '%' => ['precedence' => 60, 'class' => ModBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is not' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '**' => ['precedence' => 200, 'class' => PowerBinary::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + '??' => ['precedence' => 300, 'class' => NullCoalesceExpression::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + ], + ]; + } + + /** + * Cycles over a value. + * + * @param \ArrayAccess|array $values + * @param int $position The cycle position + * + * @return string The next value in the cycle + * + * @internal + */ + public static function cycle($values, $position): string + { + if (!\is_array($values) && !$values instanceof \ArrayAccess) { + return $values; + } + + if (!\count($values)) { + throw new RuntimeError('The "cycle" function does not work on empty sequences/mappings.'); + } + + return $values[$position % \count($values)]; + } + + /** + * Returns a random value depending on the supplied parameter type: + * - a random item from a \Traversable or array + * - a random character from a string + * - a random integer between 0 and the integer parameter. + * + * @param \Traversable|array|int|float|string $values The values to pick a random item from + * @param int|null $max Maximum value used when $values is an int + * + * @return mixed A random value from the given sequence + * + * @throws RuntimeError when $values is an empty array (does not apply to an empty string which is returned as is) + * + * @internal + */ + public static function random(string $charset, $values = null, $max = null) + { + if (null === $values) { + return null === $max ? mt_rand() : mt_rand(0, (int) $max); + } + + if (\is_int($values) || \is_float($values)) { + if (null === $max) { + if ($values < 0) { + $max = 0; + $min = $values; + } else { + $max = $values; + $min = 0; + } + } else { + $min = $values; + } + + return mt_rand((int) $min, (int) $max); + } + + if (\is_string($values)) { + if ('' === $values) { + return ''; + } + + if ('UTF-8' !== $charset) { + $values = self::convertEncoding($values, 'UTF-8', $charset); + } + + // unicode version of str_split() + // split at all positions, but not after the start and not before the end + $values = preg_split('/(?<!^)(?!$)/u', $values); + + if ('UTF-8' !== $charset) { + foreach ($values as $i => $value) { + $values[$i] = self::convertEncoding($value, $charset, 'UTF-8'); + } + } + } + + if (!is_iterable($values)) { + return $values; + } + + $values = self::toArray($values); + + if (0 === \count($values)) { + throw new RuntimeError('The random function cannot pick from an empty sequence/mapping.'); + } + + return $values[array_rand($values, 1)]; + } + + /** + * Formats a date. + * + * {{ post.published_at|date("m/d/Y") }} + * + * @param \DateTimeInterface|\DateInterval|string $date A date + * @param string|null $format The target format, null to use the default + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + */ + public function formatDate($date, $format = null, $timezone = null): string + { + if (null === $format) { + $formats = $this->getDateFormat(); + $format = $date instanceof \DateInterval ? $formats[1] : $formats[0]; + } + + if ($date instanceof \DateInterval) { + return $date->format($format); + } + + return $this->convertDate($date, $timezone)->format($format); + } + + /** + * Returns a new date object modified. + * + * {{ post.published_at|date_modify("-1day")|date("m/d/Y") }} + * + * @param \DateTimeInterface|string $date A date + * @param string $modifier A modifier string + * + * @return \DateTime|\DateTimeImmutable + * + * @internal + */ + public function modifyDate($date, $modifier) + { + return $this->convertDate($date, false)->modify($modifier); + } + + /** + * Returns a formatted string. + * + * @param string|null $format + * @param ...$values + * + * @internal + */ + public static function sprintf($format, ...$values): string + { + return \sprintf($format ?? '', ...$values); + } + + /** + * @internal + */ + public static function dateConverter(Environment $env, $date, $format = null, $timezone = null): string + { + return $env->getExtension(self::class)->formatDate($date, $format, $timezone); + } + + /** + * Converts an input to a \DateTime instance. + * + * {% if date(user.created_at) < date('+2days') %} + * {# do something #} + * {% endif %} + * + * @param \DateTimeInterface|string|null $date A date or null to use the current time + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return \DateTime|\DateTimeImmutable + */ + public function convertDate($date = null, $timezone = null) + { + // determine the timezone + if (false !== $timezone) { + if (null === $timezone) { + $timezone = $this->getTimezone(); + } elseif (!$timezone instanceof \DateTimeZone) { + $timezone = new \DateTimeZone($timezone); + } + } + + // immutable dates + if ($date instanceof \DateTimeImmutable) { + return false !== $timezone ? $date->setTimezone($timezone) : $date; + } + + if ($date instanceof \DateTime) { + $date = clone $date; + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; + } + + if (null === $date || 'now' === $date) { + if (null === $date) { + $date = 'now'; + } + + return new \DateTime($date, false !== $timezone ? $timezone : $this->getTimezone()); + } + + $asString = (string) $date; + if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) { + $date = new \DateTime('@'.$date); + } else { + $date = new \DateTime($date, $this->getTimezone()); + } + + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; + } + + /** + * Replaces strings within a string. + * + * @param string|null $str String to replace in + * @param array|\Traversable $from Replace values + * + * @internal + */ + public static function replace($str, $from): string + { + if (!is_iterable($from)) { + throw new RuntimeError(\sprintf('The "replace" filter expects a sequence/mapping or "Traversable" as replace values, got "%s".', \is_object($from) ? \get_class($from) : \gettype($from))); + } + + return strtr($str ?? '', self::toArray($from)); + } + + /** + * Rounds a number. + * + * @param int|float|string|null $value The value to round + * @param int|float $precision The rounding precision + * @param string $method The method to use for rounding + * + * @return int|float The rounded number + * + * @internal + */ + public static function round($value, $precision = 0, $method = 'common') + { + $value = (float) $value; + + if ('common' === $method) { + return round($value, $precision); + } + + if ('ceil' !== $method && 'floor' !== $method) { + throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.'); + } + + return $method($value * 10 ** $precision) / 10 ** $precision; + } + + /** + * Formats a number. + * + * All of the formatting options can be left null, in that case the defaults will + * be used. Supplying any of the parameters will override the defaults set in the + * environment object. + * + * @param mixed $number A float/int/string of the number to format + * @param int|null $decimal the number of decimal points to display + * @param string|null $decimalPoint the character(s) to use for the decimal point + * @param string|null $thousandSep the character(s) to use for the thousands separator + */ + public function formatNumber($number, $decimal = null, $decimalPoint = null, $thousandSep = null): string + { + $defaults = $this->getNumberFormat(); + if (null === $decimal) { + $decimal = $defaults[0]; + } + + if (null === $decimalPoint) { + $decimalPoint = $defaults[1]; + } + + if (null === $thousandSep) { + $thousandSep = $defaults[2]; + } + + return number_format((float) $number, $decimal, $decimalPoint, $thousandSep); + } + + /** + * URL encodes (RFC 3986) a string as a path segment or an array as a query string. + * + * @param string|array|null $url A URL or an array of query parameters + * + * @internal + */ + public static function urlencode($url): string + { + if (\is_array($url)) { + return http_build_query($url, '', '&', \PHP_QUERY_RFC3986); + } + + return rawurlencode($url ?? ''); + } + + /** + * Merges any number of arrays or Traversable objects. + * + * {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %} + * + * {% set items = items|merge({ 'peugeot': 'car' }, { 'banana': 'fruit' }) %} + * + * {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car', 'banana': 'fruit' } #} + * + * @param array|\Traversable ...$arrays Any number of arrays or Traversable objects to merge + * + * @internal + */ + public static function merge(...$arrays): array + { + $result = []; + + foreach ($arrays as $argNumber => $array) { + if (!is_iterable($array)) { + throw new RuntimeError(\sprintf('The merge filter only works with sequences/mappings or "Traversable", got "%s" for argument %d.', \gettype($array), $argNumber + 1)); + } + + $result = array_merge($result, self::toArray($array)); + } + + return $result; + } + + /** + * Slices a variable. + * + * @param mixed $item A variable + * @param int $start Start of the slice + * @param int $length Size of the slice + * @param bool $preserveKeys Whether to preserve key or not (when the input is an array) + * + * @return mixed The sliced variable + * + * @internal + */ + public static function slice(string $charset, $item, $start, $length = null, $preserveKeys = false) + { + if ($item instanceof \Traversable) { + while ($item instanceof \IteratorAggregate) { + $item = $item->getIterator(); + } + + if ($start >= 0 && $length >= 0 && $item instanceof \Iterator) { + try { + return iterator_to_array(new \LimitIterator($item, $start, $length ?? -1), $preserveKeys); + } catch (\OutOfBoundsException $e) { + return []; + } + } + + $item = iterator_to_array($item, $preserveKeys); + } + + if (\is_array($item)) { + return \array_slice($item, $start, $length, $preserveKeys); + } + + return mb_substr((string) $item, $start, $length, $charset); + } + + /** + * Returns the first element of the item. + * + * @param mixed $item A variable + * + * @return mixed The first element of the item + * + * @internal + */ + public static function first(string $charset, $item) + { + $elements = self::slice($charset, $item, 0, 1, false); + + return \is_string($elements) ? $elements : current($elements); + } + + /** + * Returns the last element of the item. + * + * @param mixed $item A variable + * + * @return mixed The last element of the item + * + * @internal + */ + public static function last(string $charset, $item) + { + $elements = self::slice($charset, $item, -1, 1, false); + + return \is_string($elements) ? $elements : current($elements); + } + + /** + * Joins the values to a string. + * + * The separators between elements are empty strings per default, you can define them with the optional parameters. + * + * {{ [1, 2, 3]|join(', ', ' and ') }} + * {# returns 1, 2 and 3 #} + * + * {{ [1, 2, 3]|join('|') }} + * {# returns 1|2|3 #} + * + * {{ [1, 2, 3]|join }} + * {# returns 123 #} + * + * @param array $value An array + * @param string $glue The separator + * @param string|null $and The separator for the last pair + * + * @internal + */ + public static function join($value, $glue = '', $and = null): string + { + if (!is_iterable($value)) { + $value = (array) $value; + } + + $value = self::toArray($value, false); + + if (0 === \count($value)) { + return ''; + } + + if (null === $and || $and === $glue) { + return implode($glue, $value); + } + + if (1 === \count($value)) { + return $value[0]; + } + + return implode($glue, \array_slice($value, 0, -1)).$and.$value[\count($value) - 1]; + } + + /** + * Splits the string into an array. + * + * {{ "one,two,three"|split(',') }} + * {# returns [one, two, three] #} + * + * {{ "one,two,three,four,five"|split(',', 3) }} + * {# returns [one, two, "three,four,five"] #} + * + * {{ "123"|split('') }} + * {# returns [1, 2, 3] #} + * + * {{ "aabbcc"|split('', 2) }} + * {# returns [aa, bb, cc] #} + * + * @param string|null $value A string + * @param string $delimiter The delimiter + * @param int|null $limit The limit + * + * @internal + */ + public static function split(string $charset, $value, $delimiter, $limit = null): array + { + $value = $value ?? ''; + + if ('' !== $delimiter) { + return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit); + } + + if ($limit <= 1) { + return preg_split('/(?<!^)(?!$)/u', $value); + } + + $length = mb_strlen($value, $charset); + if ($length < $limit) { + return [$value]; + } + + $r = []; + for ($i = 0; $i < $length; $i += $limit) { + $r[] = mb_substr($value, $i, $limit, $charset); + } + + return $r; + } + + // The '_default' filter is used internally to avoid using the ternary operator + // which costs a lot for big contexts (before PHP 5.4). So, on average, + // a function call is cheaper. + /** + * @internal + */ + public static function default($value, $default = '') + { + if (self::testEmpty($value)) { + return $default; + } + + return $value; + } + + /** + * Returns the keys for the given array. + * + * It is useful when you want to iterate over the keys of an array: + * + * {% for key in array|keys %} + * {# ... #} + * {% endfor %} + * + * @internal + */ + public static function keys($array): array + { + if ($array instanceof \Traversable) { + while ($array instanceof \IteratorAggregate) { + $array = $array->getIterator(); + } + + $keys = []; + if ($array instanceof \Iterator) { + $array->rewind(); + while ($array->valid()) { + $keys[] = $array->key(); + $array->next(); + } + + return $keys; + } + + foreach ($array as $key => $item) { + $keys[] = $key; + } + + return $keys; + } + + if (!\is_array($array)) { + return []; + } + + return array_keys($array); + } + + /** + * Reverses a variable. + * + * @param array|\Traversable|string|null $item An array, a \Traversable instance, or a string + * @param bool $preserveKeys Whether to preserve key or not + * + * @return mixed The reversed input + * + * @internal + */ + public static function reverse(string $charset, $item, $preserveKeys = false) + { + if ($item instanceof \Traversable) { + return array_reverse(iterator_to_array($item), $preserveKeys); + } + + if (\is_array($item)) { + return array_reverse($item, $preserveKeys); + } + + $string = (string) $item; + + if ('UTF-8' !== $charset) { + $string = self::convertEncoding($string, 'UTF-8', $charset); + } + + preg_match_all('/./us', $string, $matches); + + $string = implode('', array_reverse($matches[0])); + + if ('UTF-8' !== $charset) { + $string = self::convertEncoding($string, $charset, 'UTF-8'); + } + + return $string; + } + + /** + * Shuffles an array, a \Traversable instance, or a string. + * The function does not preserve keys. + * + * @param array|\Traversable|string|null $item + * + * @return mixed + * + * @internal + */ + public static function shuffle(string $charset, $item) + { + if (\is_string($item)) { + if ('UTF-8' !== $charset) { + $item = self::convertEncoding($item, 'UTF-8', $charset); + } + + $item = preg_split('/(?<!^)(?!$)/u', $item, -1); + shuffle($item); + $item = implode('', $item); + + if ('UTF-8' !== $charset) { + $item = self::convertEncoding($item, $charset, 'UTF-8'); + } + + return $item; + } + + if (is_iterable($item)) { + $item = self::toArray($item, false); + shuffle($item); + } + + return $item; + } + + /** + * Sorts an array. + * + * @param array|\Traversable $array + * + * @internal + */ + public static function sort(Environment $env, $array, $arrow = null): array + { + if ($array instanceof \Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(\sprintf('The sort filter only works with sequences/mappings or "Traversable", got "%s".', \gettype($array))); + } + + if (null !== $arrow) { + self::checkArrowInSandbox($env, $arrow, 'sort', 'filter'); + + uasort($array, $arrow); + } else { + asort($array); + } + + return $array; + } + + /** + * @internal + */ + public static function inFilter($value, $compare) + { + if ($value instanceof Markup) { + $value = (string) $value; + } + if ($compare instanceof Markup) { + $compare = (string) $compare; + } + + if (\is_string($compare)) { + if (\is_string($value) || \is_int($value) || \is_float($value)) { + return '' === $value || str_contains($compare, (string) $value); + } + + return false; + } + + if (!is_iterable($compare)) { + return false; + } + + if (\is_object($value) || \is_resource($value)) { + if (!\is_array($compare)) { + foreach ($compare as $item) { + if ($item === $value) { + return true; + } + } + + return false; + } + + return \in_array($value, $compare, true); + } + + foreach ($compare as $item) { + if (0 === self::compare($value, $item)) { + return true; + } + } + + return false; + } + + /** + * Compares two values using a more strict version of the PHP non-strict comparison operator. + * + * @see https://wiki.php.net/rfc/string_to_number_comparison + * @see https://wiki.php.net/rfc/trailing_whitespace_numerics + * + * @internal + */ + public static function compare($a, $b) + { + // int <=> string + if (\is_int($a) && \is_string($b)) { + $bTrim = trim($b, " \t\n\r\v\f"); + if (!is_numeric($bTrim)) { + return (string) $a <=> $b; + } + if ((int) $bTrim == $bTrim) { + return $a <=> (int) $bTrim; + } else { + return (float) $a <=> (float) $bTrim; + } + } + if (\is_string($a) && \is_int($b)) { + $aTrim = trim($a, " \t\n\r\v\f"); + if (!is_numeric($aTrim)) { + return $a <=> (string) $b; + } + if ((int) $aTrim == $aTrim) { + return (int) $aTrim <=> $b; + } else { + return (float) $aTrim <=> (float) $b; + } + } + + // float <=> string + if (\is_float($a) && \is_string($b)) { + if (is_nan($a)) { + return 1; + } + $bTrim = trim($b, " \t\n\r\v\f"); + if (!is_numeric($bTrim)) { + return (string) $a <=> $b; + } + + return $a <=> (float) $bTrim; + } + if (\is_string($a) && \is_float($b)) { + if (is_nan($b)) { + return 1; + } + $aTrim = trim($a, " \t\n\r\v\f"); + if (!is_numeric($aTrim)) { + return $a <=> (string) $b; + } + + return (float) $aTrim <=> $b; + } + + // fallback to <=> + return $a <=> $b; + } + + /** + * @throws RuntimeError When an invalid pattern is used + * + * @internal + */ + public static function matches(string $regexp, ?string $str): int + { + set_error_handler(function ($t, $m) use ($regexp) { + throw new RuntimeError(\sprintf('Regexp "%s" passed to "matches" is not valid', $regexp).substr($m, 12)); + }); + try { + return preg_match($regexp, $str ?? ''); + } finally { + restore_error_handler(); + } + } + + /** + * Returns a trimmed string. + * + * @param string|null $string + * @param string|null $characterMask + * @param string $side + * + * @throws RuntimeError When an invalid trimming side is used (not a string or not 'left', 'right', or 'both') + * + * @internal + */ + public static function trim($string, $characterMask = null, $side = 'both'): string + { + if (null === $characterMask) { + $characterMask = " \t\n\r\0\x0B"; + } + + switch ($side) { + case 'both': + return trim($string ?? '', $characterMask); + case 'left': + return ltrim($string ?? '', $characterMask); + case 'right': + return rtrim($string ?? '', $characterMask); + default: + throw new RuntimeError('Trimming side must be "left", "right" or "both".'); + } + } + + /** + * Inserts HTML line breaks before all newlines in a string. + * + * @param string|null $string + * + * @internal + */ + public static function nl2br($string): string + { + return nl2br($string ?? ''); + } + + /** + * Removes whitespaces between HTML tags. + * + * @param string|null $content + * + * @internal + */ + public static function spaceless($content): string + { + return trim(preg_replace('/>\s+</', '><', $content ?? '')); + } + + /** + * @param string|null $string + * @param string $to + * @param string $from + * + * @internal + */ + public static function convertEncoding($string, $to, $from): string + { + if (!\function_exists('iconv')) { + throw new RuntimeError('Unable to convert encoding: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); + } + + return iconv($from, $to, $string ?? ''); + } + + /** + * Returns the length of a variable. + * + * @param mixed $thing A variable + * + * @internal + */ + public static function length(string $charset, $thing): int + { + if (null === $thing) { + return 0; + } + + if (\is_scalar($thing)) { + return mb_strlen($thing, $charset); + } + + if ($thing instanceof \Countable || \is_array($thing) || $thing instanceof \SimpleXMLElement) { + return \count($thing); + } + + if ($thing instanceof \Traversable) { + return iterator_count($thing); + } + + if (method_exists($thing, '__toString')) { + return mb_strlen((string) $thing, $charset); + } + + return 1; + } + + /** + * Converts a string to uppercase. + * + * @param string|null $string A string + * + * @internal + */ + public static function upper(string $charset, $string): string + { + return mb_strtoupper($string ?? '', $charset); + } + + /** + * Converts a string to lowercase. + * + * @param string|null $string A string + * + * @internal + */ + public static function lower(string $charset, $string): string + { + return mb_strtolower($string ?? '', $charset); + } + + /** + * Strips HTML and PHP tags from a string. + * + * @param string|null $string + * @param string[]|string|null $allowable_tags + * + * @internal + */ + public static function striptags($string, $allowable_tags = null): string + { + return strip_tags($string ?? '', $allowable_tags); + } + + /** + * Returns a titlecased string. + * + * @param string|null $string A string + * + * @internal + */ + public static function titleCase(string $charset, $string): string + { + return mb_convert_case($string ?? '', \MB_CASE_TITLE, $charset); + } + + /** + * Returns a capitalized string. + * + * @param string|null $string A string + * + * @internal + */ + public static function capitalize(string $charset, $string): string + { + return mb_strtoupper(mb_substr($string ?? '', 0, 1, $charset), $charset).mb_strtolower(mb_substr($string ?? '', 1, null, $charset), $charset); + } + + /** + * @internal + */ + public static function callMacro(Template $template, string $method, array $args, int $lineno, array $context, Source $source) + { + if (!method_exists($template, $method)) { + $parent = $template; + while ($parent = $parent->getParent($context)) { + if (method_exists($parent, $method)) { + return $parent->$method(...$args); + } + } + + throw new RuntimeError(\sprintf('Macro "%s" is not defined in template "%s".', substr($method, \strlen('macro_')), $template->getTemplateName()), $lineno, $source); + } + + return $template->$method(...$args); + } + + /** + * @internal + */ + public static function ensureTraversable($seq) + { + if (is_iterable($seq)) { + return $seq; + } + + return []; + } + + /** + * @internal + */ + public static function toArray($seq, $preserveKeys = true) + { + if ($seq instanceof \Traversable) { + return iterator_to_array($seq, $preserveKeys); + } + + if (!\is_array($seq)) { + return $seq; + } + + return $preserveKeys ? $seq : array_values($seq); + } + + /** + * Checks if a variable is empty. + * + * {# evaluates to true if the foo variable is null, false, or the empty string #} + * {% if foo is empty %} + * {# ... #} + * {% endif %} + * + * @param mixed $value A variable + * + * @internal + */ + public static function testEmpty($value): bool + { + if ($value instanceof \Countable) { + return 0 === \count($value); + } + + if ($value instanceof \Traversable) { + return !iterator_count($value); + } + + if (\is_object($value) && method_exists($value, '__toString')) { + return '' === (string) $value; + } + + return '' === $value || false === $value || null === $value || [] === $value; + } + + /** + * Checks if a variable is a sequence. + * + * {# evaluates to true if the foo variable is a sequence #} + * {% if foo is sequence %} + * {# ... #} + * {% endif %} + * + * @param mixed $value + * + * @internal + */ + public static function testSequence($value): bool + { + if ($value instanceof \ArrayObject) { + $value = $value->getArrayCopy(); + } + + if ($value instanceof \Traversable) { + $value = iterator_to_array($value); + } + + return \is_array($value) && array_is_list($value); + } + + /** + * Checks if a variable is a mapping. + * + * {# evaluates to true if the foo variable is a mapping #} + * {% if foo is mapping %} + * {# ... #} + * {% endif %} + * + * @param mixed $value + * + * @internal + */ + public static function testMapping($value): bool + { + if ($value instanceof \ArrayObject) { + $value = $value->getArrayCopy(); + } + + if ($value instanceof \Traversable) { + $value = iterator_to_array($value); + } + + return (\is_array($value) && !array_is_list($value)) || \is_object($value); + } + + /** + * Renders a template. + * + * @param array $context + * @param string|array|TemplateWrapper $template The template to render or an array of templates to try consecutively + * @param array $variables The variables to pass to the template + * @param bool $withContext + * @param bool $ignoreMissing Whether to ignore missing templates or not + * @param bool $sandboxed Whether to sandbox the template or not + * + * @internal + */ + public static function include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false): string + { + $alreadySandboxed = false; + $sandbox = null; + if ($withContext) { + $variables = array_merge($context, $variables); + } + + if ($isSandboxed = $sandboxed && $env->hasExtension(SandboxExtension::class)) { + $sandbox = $env->getExtension(SandboxExtension::class); + if (!$alreadySandboxed = $sandbox->isSandboxed()) { + $sandbox->enableSandbox(); + } + } + + try { + $loaded = null; + try { + $loaded = $env->resolveTemplate($template); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + } + + if ($isSandboxed && $loaded) { + $loaded->unwrap()->checkSecurity(); + } + + return $loaded ? $loaded->render($variables) : ''; + } finally { + if ($isSandboxed && !$alreadySandboxed) { + $sandbox->disableSandbox(); + } + } + } + + /** + * Returns a template content without rendering it. + * + * @param string $name The template name + * @param bool $ignoreMissing Whether to ignore missing templates or not + * + * @internal + */ + public static function source(Environment $env, $name, $ignoreMissing = false): string + { + $loader = $env->getLoader(); + try { + return $loader->getSourceContext($name)->getCode(); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + + return ''; + } + } + + /** + * Provides the ability to get constants from instances as well as class/global constants. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @return mixed Class constants can return many types like scalars, arrays, and + * objects depending on the PHP version (\BackedEnum, \UnitEnum, etc.) + * + * @internal + */ + public static function constant($constant, $object = null) + { + if (null !== $object) { + if ('class' === $constant) { + return \get_class($object); + } + + $constant = \get_class($object).'::'.$constant; + } + + if (!\defined($constant)) { + if ('::class' === strtolower(substr($constant, -7))) { + throw new RuntimeError(\sprintf('You cannot use the Twig function "constant()" to access "%s". You could provide an object and call constant("class", $object) or use the class name directly as a string.', $constant)); + } + + throw new RuntimeError(\sprintf('Constant "%s" is undefined.', $constant)); + } + + return \constant($constant); + } + + /** + * Checks if a constant exists. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @internal + */ + public static function constantIsDefined($constant, $object = null): bool + { + if (null !== $object) { + if ('class' === $constant) { + return true; + } + + $constant = \get_class($object).'::'.$constant; + } + + return \defined($constant); + } + + /** + * Batches item. + * + * @param array $items An array of items + * @param int $size The size of the batch + * @param mixed $fill A value used to fill missing items + * + * @internal + */ + public static function batch($items, $size, $fill = null, $preserveKeys = true): array + { + if (!is_iterable($items)) { + throw new RuntimeError(\sprintf('The "batch" filter expects a sequence/mapping or "Traversable", got "%s".', \is_object($items) ? \get_class($items) : \gettype($items))); + } + + $size = (int) ceil($size); + + $result = array_chunk(self::toArray($items, $preserveKeys), $size, $preserveKeys); + + if (null !== $fill && $result) { + $last = \count($result) - 1; + if ($fillCount = $size - \count($result[$last])) { + for ($i = 0; $i < $fillCount; ++$i) { + $result[$last][] = $fill; + } + } + } + + return $result; + } + + /** + * Returns the attribute value for a given array/object. + * + * @param mixed $object The object or array from where to get the item + * @param mixed $item The item to get from the array or object + * @param array $arguments An array of arguments to pass if the item is an object method + * @param string $type The type of attribute (@see \Twig\Template constants) + * @param bool $isDefinedTest Whether this is only a defined check + * @param bool $ignoreStrictCheck Whether to ignore the strict attribute check or not + * @param int $lineno The template line where the attribute was called + * + * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true + * + * @throws RuntimeError if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false + * + * @internal + */ + public static function getAttribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = /* Template::ANY_CALL */ 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) + { + $propertyNotAllowedError = null; + + // array + if (/* Template::METHOD_CALL */ 'method' !== $type) { + $arrayItem = \is_bool($item) || \is_float($item) ? (int) $item : $item; + + if ($sandboxed && $object instanceof \ArrayAccess && !\in_array(get_class($object), self::ARRAY_LIKE_CLASSES, true)) { + try { + $env->getExtension(SandboxExtension::class)->checkPropertyAllowed($object, $arrayItem, $lineno, $source); + } catch (SecurityNotAllowedPropertyError $propertyNotAllowedError) { + goto methodCheck; + } + } + + if (((\is_array($object) || $object instanceof \ArrayObject) && (isset($object[$arrayItem]) || \array_key_exists($arrayItem, (array) $object))) + || ($object instanceof \ArrayAccess && isset($object[$arrayItem])) + ) { + if ($isDefinedTest) { + return true; + } + + return $object[$arrayItem]; + } + + if (/* Template::ARRAY_CALL */ 'array' === $type || !\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if ($object instanceof \ArrayAccess) { + $message = \sprintf('Key "%s" in object with ArrayAccess of class "%s" does not exist.', $arrayItem, \get_class($object)); + } elseif (\is_object($object)) { + $message = \sprintf('Impossible to access a key "%s" on an object of class "%s" that does not implement ArrayAccess interface.', $item, \get_class($object)); + } elseif (\is_array($object)) { + if (empty($object)) { + $message = \sprintf('Key "%s" does not exist as the sequence/mapping is empty.', $arrayItem); + } else { + $message = \sprintf('Key "%s" for sequence/mapping with keys "%s" does not exist.', $arrayItem, implode(', ', array_keys($object))); + } + } elseif (/* Template::ARRAY_CALL */ 'array' === $type) { + if (null === $object) { + $message = \sprintf('Impossible to access a key ("%s") on a null variable.', $item); + } else { + $message = \sprintf('Impossible to access a key ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + } elseif (null === $object) { + $message = \sprintf('Impossible to access an attribute ("%s") on a null variable.', $item); + } else { + $message = \sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + } + + if (!\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if (null === $object) { + $message = \sprintf('Impossible to invoke a method ("%s") on a null variable.', $item); + } elseif (\is_array($object)) { + $message = \sprintf('Impossible to invoke a method ("%s") on a sequence/mapping.', $item); + } else { + $message = \sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + + if ($object instanceof Template) { + throw new RuntimeError('Accessing \Twig\Template attributes is forbidden.', $lineno, $source); + } + + // object property + if (/* Template::METHOD_CALL */ 'method' !== $type) { + if ($sandboxed) { + try { + $env->getExtension(SandboxExtension::class)->checkPropertyAllowed($object, $item, $lineno, $source); + } catch (SecurityNotAllowedPropertyError $propertyNotAllowedError) { + goto methodCheck; + } + } + + if (isset($object->$item) || \array_key_exists((string) $item, (array) $object)) { + if ($isDefinedTest) { + return true; + } + + return $object->$item; + } + } + + methodCheck: + + static $cache = []; + + $class = \get_class($object); + + // object method + // precedence: getXxx() > isXxx() > hasXxx() + if (!isset($cache[$class])) { + $methods = get_class_methods($object); + sort($methods); + $lcMethods = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, $methods); + $classCache = []; + foreach ($methods as $i => $method) { + $classCache[$method] = $method; + $classCache[$lcName = $lcMethods[$i]] = $method; + + if ('g' === $lcName[0] && str_starts_with($lcName, 'get')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + } elseif ('i' === $lcName[0] && str_starts_with($lcName, 'is')) { + $name = substr($method, 2); + $lcName = substr($lcName, 2); + } elseif ('h' === $lcName[0] && str_starts_with($lcName, 'has')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + if (\in_array('is'.$lcName, $lcMethods)) { + continue; + } + } else { + continue; + } + + // skip get() and is() methods (in which case, $name is empty) + if ($name) { + if (!isset($classCache[$name])) { + $classCache[$name] = $method; + } + + if (!isset($classCache[$lcName])) { + $classCache[$lcName] = $method; + } + } + } + $cache[$class] = $classCache; + } + + $call = false; + if (isset($cache[$class][$item])) { + $method = $cache[$class][$item]; + } elseif (isset($cache[$class][$lcItem = strtr($item, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')])) { + $method = $cache[$class][$lcItem]; + } elseif (isset($cache[$class]['__call'])) { + $method = $item; + $call = true; + } else { + if ($isDefinedTest) { + return false; + } + + if ($propertyNotAllowedError) { + throw $propertyNotAllowedError; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + throw new RuntimeError(\sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()"/"has%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), $lineno, $source); + } + + if ($sandboxed) { + try { + $env->getExtension(SandboxExtension::class)->checkMethodAllowed($object, $method, $lineno, $source); + } catch (SecurityNotAllowedMethodError $e) { + if ($isDefinedTest) { + return false; + } + + if ($propertyNotAllowedError) { + throw $propertyNotAllowedError; + } + + throw $e; + } + } + + if ($isDefinedTest) { + return true; + } + + // Some objects throw exceptions when they have __call, and the method we try + // to call is not supported. If ignoreStrictCheck is true, we should return null. + try { + $ret = $object->$method(...$arguments); + } catch (\BadMethodCallException $e) { + if ($call && ($ignoreStrictCheck || !$env->isStrictVariables())) { + return; + } + throw $e; + } + + return $ret; + } + + /** + * Returns the values from a single column in the input array. + * + * <pre> + * {% set items = [{ 'fruit' : 'apple'}, {'fruit' : 'orange' }] %} + * + * {% set fruits = items|column('fruit') %} + * + * {# fruits now contains ['apple', 'orange'] #} + * </pre> + * + * @param array|\Traversable $array An array + * @param int|string $name The column name + * @param int|string|null $index The column to use as the index/keys for the returned array + * + * @return array The array of values + * + * @internal + */ + public static function column($array, $name, $index = null): array + { + if ($array instanceof \Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(\sprintf('The column filter only works with sequences/mappings or "Traversable", got "%s" as first argument.', \gettype($array))); + } + + return array_column($array, $name, $index); + } + + /** + * @internal + */ + public static function filter(Environment $env, $array, $arrow) + { + if (!is_iterable($array)) { + throw new RuntimeError(\sprintf('The "filter" filter expects a sequence/mapping or "Traversable", got "%s".', \is_object($array) ? \get_class($array) : \gettype($array))); + } + + self::checkArrowInSandbox($env, $arrow, 'filter', 'filter'); + + if (\is_array($array)) { + return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH); + } + + // the IteratorIterator wrapping is needed as some internal PHP classes are \Traversable but do not implement \Iterator + return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow); + } + + /** + * @internal + */ + public static function find(Environment $env, $array, $arrow) + { + self::checkArrowInSandbox($env, $arrow, 'find', 'filter'); + + foreach ($array as $k => $v) { + if ($arrow($v, $k)) { + return $v; + } + } + + return null; + } + + /** + * @internal + */ + public static function map(Environment $env, $array, $arrow) + { + self::checkArrowInSandbox($env, $arrow, 'map', 'filter'); + + $r = []; + foreach ($array as $k => $v) { + $r[$k] = $arrow($v, $k); + } + + return $r; + } + + /** + * @internal + */ + public static function reduce(Environment $env, $array, $arrow, $initial = null) + { + self::checkArrowInSandbox($env, $arrow, 'reduce', 'filter'); + + if (!\is_array($array) && !$array instanceof \Traversable) { + throw new RuntimeError(\sprintf('The "reduce" filter only works with sequences/mappings or "Traversable", got "%s" as first argument.', \gettype($array))); + } + + $accumulator = $initial; + foreach ($array as $key => $value) { + $accumulator = $arrow($accumulator, $value, $key); + } + + return $accumulator; + } + + /** + * @internal + */ + public static function arraySome(Environment $env, $array, $arrow) + { + self::checkArrowInSandbox($env, $arrow, 'has some', 'operator'); + + foreach ($array as $k => $v) { + if ($arrow($v, $k)) { + return true; + } + } + + return false; + } + + /** + * @internal + */ + public static function arrayEvery(Environment $env, $array, $arrow) + { + self::checkArrowInSandbox($env, $arrow, 'has every', 'operator'); + + foreach ($array as $k => $v) { + if (!$arrow($v, $k)) { + return false; + } + } + + return true; + } + + /** + * @internal + */ + public static function checkArrowInSandbox(Environment $env, $arrow, $thing, $type) + { + if (!$arrow instanceof \Closure && $env->hasExtension(SandboxExtension::class) && $env->getExtension(SandboxExtension::class)->isSandboxed()) { + throw new RuntimeError(\sprintf('The callable passed to the "%s" %s must be a Closure in sandbox mode.', $thing, $type)); + } + } + + /** + * @internal to be removed in Twig 4 + */ + public static function captureOutput(iterable $body): string + { + $output = ''; + $level = ob_get_level(); + ob_start(); + + try { + foreach ($body as $data) { + if (ob_get_length()) { + $output .= ob_get_clean(); + ob_start(); + } + + $output .= $data; + } + + if (ob_get_length()) { + $output .= ob_get_clean(); + } + } finally { + while (ob_get_level() > $level) { + ob_end_clean(); + } + } + + return $output; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/DebugExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/DebugExtension.php new file mode 100644 index 0000000..cefb44c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/DebugExtension.php @@ -0,0 +1,64 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\Environment; +use Twig\Template; +use Twig\TemplateWrapper; +use Twig\TwigFunction; + +final class DebugExtension extends AbstractExtension +{ + public function getFunctions(): array + { + // dump is safe if var_dump is overridden by xdebug + $isDumpOutputHtmlSafe = \extension_loaded('xdebug') + // false means that it was not set (and the default is on) or it explicitly enabled + && (false === \ini_get('xdebug.overload_var_dump') || \ini_get('xdebug.overload_var_dump')) + // false means that it was not set (and the default is on) or it explicitly enabled + // xdebug.overload_var_dump produces HTML only when html_errors is also enabled + && (false === \ini_get('html_errors') || \ini_get('html_errors')) + || 'cli' === \PHP_SAPI + ; + + return [ + new TwigFunction('dump', [self::class, 'dump'], ['is_safe' => $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]), + ]; + } + + /** + * @internal + */ + public static function dump(Environment $env, $context, ...$vars) + { + if (!$env->isDebug()) { + return; + } + + ob_start(); + + if (!$vars) { + $vars = []; + foreach ($context as $key => $value) { + if (!$value instanceof Template && !$value instanceof TemplateWrapper) { + $vars[$key] = $value; + } + } + + var_dump($vars); + } else { + var_dump(...$vars); + } + + return ob_get_clean(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/EscaperExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/EscaperExtension.php new file mode 100644 index 0000000..d8e9b6e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/EscaperExtension.php @@ -0,0 +1,199 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\Environment; +use Twig\FileExtensionEscapingStrategy; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\Filter\RawFilter; +use Twig\Node\Node; +use Twig\NodeVisitor\EscaperNodeVisitor; +use Twig\Runtime\EscaperRuntime; +use Twig\TokenParser\AutoEscapeTokenParser; +use Twig\TwigFilter; + +final class EscaperExtension extends AbstractExtension +{ + private $environment; + private $escapers = []; + private $escaper; + private $defaultStrategy; + + /** + * @param string|false|callable $defaultStrategy An escaping strategy + * + * @see setDefaultStrategy() + */ + public function __construct($defaultStrategy = 'html') + { + $this->setDefaultStrategy($defaultStrategy); + } + + public function getTokenParsers(): array + { + return [new AutoEscapeTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new EscaperNodeVisitor()]; + } + + public function getFilters(): array + { + return [ + new TwigFilter('escape', [EscaperRuntime::class, 'escape'], ['is_safe_callback' => [self::class, 'escapeFilterIsSafe']]), + new TwigFilter('e', [EscaperRuntime::class, 'escape'], ['is_safe_callback' => [self::class, 'escapeFilterIsSafe']]), + new TwigFilter('raw', null, ['is_safe' => ['all'], 'node_class' => RawFilter::class]), + ]; + } + + /** + * @deprecated since Twig 3.10 + */ + public function setEnvironment(Environment $environment, bool $triggerDeprecation = true): void + { + if ($triggerDeprecation) { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated and not needed if you are using methods from "Twig\Runtime\EscaperRuntime".', __METHOD__); + } + + $this->environment = $environment; + $this->escaper = $environment->getRuntime(EscaperRuntime::class); + } + + /** + * @deprecated since Twig 3.10 + */ + public function setEscaperRuntime(EscaperRuntime $escaper) + { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated and not needed if you are using methods from "Twig\Runtime\EscaperRuntime".', __METHOD__); + + $this->escaper = $escaper; + } + + /** + * Sets the default strategy to use when not defined by the user. + * + * The strategy can be a valid PHP callback that takes the template + * name as an argument and returns the strategy to use. + * + * @param string|false|callable(string $templateName): string $defaultStrategy An escaping strategy + */ + public function setDefaultStrategy($defaultStrategy): void + { + if ('name' === $defaultStrategy) { + $defaultStrategy = [FileExtensionEscapingStrategy::class, 'guess']; + } + + $this->defaultStrategy = $defaultStrategy; + } + + /** + * Gets the default strategy to use when not defined by the user. + * + * @param string $name The template name + * + * @return string|false The default strategy to use for the template + */ + public function getDefaultStrategy(string $name) + { + // disable string callables to avoid calling a function named html or js, + // or any other upcoming escaping strategy + if (!\is_string($this->defaultStrategy) && false !== $this->defaultStrategy) { + return \call_user_func($this->defaultStrategy, $name); + } + + return $this->defaultStrategy; + } + + /** + * Defines a new escaper to be used via the escape filter. + * + * @param string $strategy The strategy name that should be used as a strategy in the escape call + * @param callable(Environment, string, string): string $callable A valid PHP callable + * + * @deprecated since Twig 3.10 + */ + public function setEscaper($strategy, callable $callable) + { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::setEscaper()" method instead (be warned that Environment is not passed anymore to the callable).', __METHOD__); + + if (!isset($this->environment)) { + throw new \LogicException(\sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__)); + } + + $this->escapers[$strategy] = $callable; + $callable = function ($string, $charset) use ($callable) { + return $callable($this->environment, $string, $charset); + }; + + $this->escaper->setEscaper($strategy, $callable); + } + + /** + * Gets all defined escapers. + * + * @return array<string, callable(Environment, string, string): string> An array of escapers + * + * @deprecated since Twig 3.10 + */ + public function getEscapers() + { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::getEscaper()" method instead.', __METHOD__); + + return $this->escapers; + } + + /** + * @deprecated since Twig 3.10 + */ + public function setSafeClasses(array $safeClasses = []) + { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::setSafeClasses()" method instead.', __METHOD__); + + if (!isset($this->escaper)) { + throw new \LogicException(\sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__)); + } + + $this->escaper->setSafeClasses($safeClasses); + } + + /** + * @deprecated since Twig 3.10 + */ + public function addSafeClass(string $class, array $strategies) + { + trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::addSafeClass()" method instead.', __METHOD__); + + if (!isset($this->escaper)) { + throw new \LogicException(\sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__)); + } + + $this->escaper->addSafeClass($class, $strategies); + } + + /** + * @internal + */ + public static function escapeFilterIsSafe(Node $filterArgs) + { + foreach ($filterArgs as $arg) { + if ($arg instanceof ConstantExpression) { + return [$arg->getAttribute('value')]; + } + + return []; + } + + return ['html']; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ExtensionInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ExtensionInterface.php new file mode 100644 index 0000000..10a42b6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ExtensionInterface.php @@ -0,0 +1,75 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\ExpressionParser; +use Twig\Node\Expression\AbstractExpression; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\TokenParser\TokenParserInterface; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +/** + * Interface implemented by extension classes. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface ExtensionInterface +{ + /** + * Returns the token parser instances to add to the existing list. + * + * @return TokenParserInterface[] + */ + public function getTokenParsers(); + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(); + + /** + * Returns a list of filters to add to the existing list. + * + * @return TwigFilter[] + */ + public function getFilters(); + + /** + * Returns a list of tests to add to the existing list. + * + * @return TwigTest[] + */ + public function getTests(); + + /** + * Returns a list of functions to add to the existing list. + * + * @return TwigFunction[] + */ + public function getFunctions(); + + /** + * Returns a list of operators to add to the existing list. + * + * @return array<array> First array of unary operators, second array of binary operators + * + * @psalm-return array{ + * array<string, array{precedence: int, class: class-string<AbstractExpression>}>, + * array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}> + * } + */ + public function getOperators(); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/GlobalsInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/GlobalsInterface.php new file mode 100644 index 0000000..6f1dfe8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/GlobalsInterface.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +/** + * Enables usage of the deprecated Twig\Extension\AbstractExtension::getGlobals() method. + * + * Explicitly implement this interface if you really need to implement the + * deprecated getGlobals() method in your extensions. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface GlobalsInterface +{ + /** + * @return array<string, mixed> + */ + public function getGlobals(): array; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/OptimizerExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/OptimizerExtension.php new file mode 100644 index 0000000..965bfdb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/OptimizerExtension.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\NodeVisitor\OptimizerNodeVisitor; + +final class OptimizerExtension extends AbstractExtension +{ + private $optimizers; + + public function __construct(int $optimizers = -1) + { + $this->optimizers = $optimizers; + } + + public function getNodeVisitors(): array + { + return [new OptimizerNodeVisitor($this->optimizers)]; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ProfilerExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ProfilerExtension.php new file mode 100644 index 0000000..43e4a44 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/ProfilerExtension.php @@ -0,0 +1,52 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\Profiler\NodeVisitor\ProfilerNodeVisitor; +use Twig\Profiler\Profile; + +class ProfilerExtension extends AbstractExtension +{ + private $actives = []; + + public function __construct(Profile $profile) + { + $this->actives[] = $profile; + } + + /** + * @return void + */ + public function enter(Profile $profile) + { + $this->actives[0]->addProfile($profile); + array_unshift($this->actives, $profile); + } + + /** + * @return void + */ + public function leave(Profile $profile) + { + $profile->leave(); + array_shift($this->actives); + + if (1 === \count($this->actives)) { + $this->actives[0]->leave(); + } + } + + public function getNodeVisitors(): array + { + return [new ProfilerNodeVisitor(static::class)]; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php new file mode 100644 index 0000000..63bc3b1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php @@ -0,0 +1,19 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +/** + * @author Grégoire Pineau <lyrixx@lyrixx.info> + */ +interface RuntimeExtensionInterface +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/SandboxExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/SandboxExtension.php new file mode 100644 index 0000000..255f2f2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/SandboxExtension.php @@ -0,0 +1,182 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\NodeVisitor\SandboxNodeVisitor; +use Twig\Sandbox\SecurityNotAllowedMethodError; +use Twig\Sandbox\SecurityNotAllowedPropertyError; +use Twig\Sandbox\SecurityPolicyInterface; +use Twig\Sandbox\SourcePolicyInterface; +use Twig\Source; +use Twig\TokenParser\SandboxTokenParser; + +final class SandboxExtension extends AbstractExtension +{ + private $sandboxedGlobally; + private $sandboxed; + private $policy; + private $sourcePolicy; + + public function __construct(SecurityPolicyInterface $policy, $sandboxed = false, ?SourcePolicyInterface $sourcePolicy = null) + { + $this->policy = $policy; + $this->sandboxedGlobally = $sandboxed; + $this->sourcePolicy = $sourcePolicy; + } + + public function getTokenParsers(): array + { + return [new SandboxTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new SandboxNodeVisitor()]; + } + + public function enableSandbox(): void + { + $this->sandboxed = true; + } + + public function disableSandbox(): void + { + $this->sandboxed = false; + } + + public function isSandboxed(?Source $source = null): bool + { + return $this->sandboxedGlobally || $this->sandboxed || $this->isSourceSandboxed($source); + } + + public function isSandboxedGlobally(): bool + { + return $this->sandboxedGlobally; + } + + private function isSourceSandboxed(?Source $source): bool + { + if (null === $source || null === $this->sourcePolicy) { + return false; + } + + return $this->sourcePolicy->enableSandbox($source); + } + + public function setSecurityPolicy(SecurityPolicyInterface $policy) + { + $this->policy = $policy; + } + + public function getSecurityPolicy(): SecurityPolicyInterface + { + return $this->policy; + } + + public function checkSecurity($tags, $filters, $functions, ?Source $source = null): void + { + if ($this->isSandboxed($source)) { + $this->policy->checkSecurity($tags, $filters, $functions); + } + } + + public function checkMethodAllowed($obj, $method, int $lineno = -1, ?Source $source = null): void + { + if ($this->isSandboxed($source)) { + try { + $this->policy->checkMethodAllowed($obj, $method); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function checkPropertyAllowed($obj, $property, int $lineno = -1, ?Source $source = null): void + { + if ($this->isSandboxed($source)) { + try { + $this->policy->checkPropertyAllowed($obj, $property); + } catch (SecurityNotAllowedPropertyError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function ensureToStringAllowed($obj, int $lineno = -1, ?Source $source = null) + { + if (\is_array($obj)) { + $this->ensureToStringAllowedForArray($obj, $lineno, $source); + + return $obj; + } + + if ($this->isSandboxed($source) && \is_object($obj) && method_exists($obj, '__toString')) { + try { + $this->policy->checkMethodAllowed($obj, '__toString'); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + + return $obj; + } + + private function ensureToStringAllowedForArray(array $obj, int $lineno, ?Source $source, array &$stack = []): void + { + foreach ($obj as $k => $v) { + if (!$v) { + continue; + } + + if (!\is_array($v)) { + $this->ensureToStringAllowed($v, $lineno, $source); + continue; + } + + if (\PHP_VERSION_ID < 70400) { + static $cookie; + + if ($v === $cookie ?? $cookie = new \stdClass()) { + continue; + } + + $obj[$k] = $cookie; + try { + $this->ensureToStringAllowedForArray($v, $lineno, $source, $stack); + } finally { + $obj[$k] = $v; + } + + continue; + } + + if ($r = \ReflectionReference::fromArrayElement($obj, $k)) { + if (isset($stack[$r->getId()])) { + continue; + } + + $stack[$r->getId()] = true; + } + + $this->ensureToStringAllowedForArray($v, $lineno, $source, $stack); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StagingExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StagingExtension.php new file mode 100644 index 0000000..59db2ca --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StagingExtension.php @@ -0,0 +1,100 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\TokenParser\TokenParserInterface; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +/** + * Used by \Twig\Environment as a staging area. + * + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class StagingExtension extends AbstractExtension +{ + private $functions = []; + private $filters = []; + private $visitors = []; + private $tokenParsers = []; + private $tests = []; + + public function addFunction(TwigFunction $function): void + { + if (isset($this->functions[$function->getName()])) { + throw new \LogicException(\sprintf('Function "%s" is already registered.', $function->getName())); + } + + $this->functions[$function->getName()] = $function; + } + + public function getFunctions(): array + { + return $this->functions; + } + + public function addFilter(TwigFilter $filter): void + { + if (isset($this->filters[$filter->getName()])) { + throw new \LogicException(\sprintf('Filter "%s" is already registered.', $filter->getName())); + } + + $this->filters[$filter->getName()] = $filter; + } + + public function getFilters(): array + { + return $this->filters; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[] = $visitor; + } + + public function getNodeVisitors(): array + { + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if (isset($this->tokenParsers[$parser->getTag()])) { + throw new \LogicException(\sprintf('Tag "%s" is already registered.', $parser->getTag())); + } + + $this->tokenParsers[$parser->getTag()] = $parser; + } + + public function getTokenParsers(): array + { + return $this->tokenParsers; + } + + public function addTest(TwigTest $test): void + { + if (isset($this->tests[$test->getName()])) { + throw new \LogicException(\sprintf('Test "%s" is already registered.', $test->getName())); + } + + $this->tests[$test->getName()] = $test; + } + + public function getTests(): array + { + return $this->tests; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StringLoaderExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StringLoaderExtension.php new file mode 100644 index 0000000..12f5c30 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/StringLoaderExtension.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\Environment; +use Twig\TemplateWrapper; +use Twig\TwigFunction; + +final class StringLoaderExtension extends AbstractExtension +{ + public function getFunctions(): array + { + return [ + new TwigFunction('template_from_string', [self::class, 'templateFromString'], ['needs_environment' => true]), + ]; + } + + /** + * Loads a template from a string. + * + * {{ include(template_from_string("Hello {{ name }}")) }} + * + * @param string $template A template as a string or object implementing __toString() + * @param string|null $name An optional name of the template to be used in error messages + * + * @internal + */ + public static function templateFromString(Environment $env, $template, ?string $name = null): TemplateWrapper + { + return $env->createTemplate((string) $template, $name); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/YieldNotReadyExtension.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/YieldNotReadyExtension.php new file mode 100644 index 0000000..2503c8d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Extension/YieldNotReadyExtension.php @@ -0,0 +1,32 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Extension; + +use Twig\NodeVisitor\YieldNotReadyNodeVisitor; + +/** + * @internal to be removed in Twig 4 + */ +final class YieldNotReadyExtension extends AbstractExtension +{ + private $useYield; + + public function __construct(bool $useYield) + { + $this->useYield = $useYield; + } + + public function getNodeVisitors(): array + { + return [new YieldNotReadyNodeVisitor($this->useYield)]; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExtensionSet.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExtensionSet.php new file mode 100644 index 0000000..8b59a13 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/ExtensionSet.php @@ -0,0 +1,481 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Error\RuntimeError; +use Twig\Extension\ExtensionInterface; +use Twig\Extension\GlobalsInterface; +use Twig\Extension\StagingExtension; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\Binary\AbstractBinary; +use Twig\Node\Expression\Unary\AbstractUnary; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\TokenParser\TokenParserInterface; + +/** + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class ExtensionSet +{ + private $extensions; + private $initialized = false; + private $runtimeInitialized = false; + private $staging; + private $parsers; + private $visitors; + /** @var array<string, TwigFilter> */ + private $filters; + /** @var array<string, TwigTest> */ + private $tests; + /** @var array<string, TwigFunction> */ + private $functions; + /** @var array<string, array{precedence: int, class: class-string<AbstractExpression>}> */ + private $unaryOperators; + /** @var array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}> */ + private $binaryOperators; + /** @var array<string, mixed> */ + private $globals; + private $functionCallbacks = []; + private $filterCallbacks = []; + private $parserCallbacks = []; + private $lastModified = 0; + + public function __construct() + { + $this->staging = new StagingExtension(); + } + + public function initRuntime() + { + $this->runtimeInitialized = true; + } + + public function hasExtension(string $class): bool + { + return isset($this->extensions[ltrim($class, '\\')]); + } + + public function getExtension(string $class): ExtensionInterface + { + $class = ltrim($class, '\\'); + + if (!isset($this->extensions[$class])) { + throw new RuntimeError(\sprintf('The "%s" extension is not enabled.', $class)); + } + + return $this->extensions[$class]; + } + + /** + * @param ExtensionInterface[] $extensions + */ + public function setExtensions(array $extensions): void + { + foreach ($extensions as $extension) { + $this->addExtension($extension); + } + } + + /** + * @return ExtensionInterface[] + */ + public function getExtensions(): array + { + return $this->extensions; + } + + public function getSignature(): string + { + return json_encode(array_keys($this->extensions)); + } + + public function isInitialized(): bool + { + return $this->initialized || $this->runtimeInitialized; + } + + public function getLastModified(): int + { + if (0 !== $this->lastModified) { + return $this->lastModified; + } + + foreach ($this->extensions as $extension) { + $r = new \ReflectionObject($extension); + if (is_file($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModified) { + $this->lastModified = $extensionTime; + } + } + + return $this->lastModified; + } + + public function addExtension(ExtensionInterface $extension): void + { + $class = \get_class($extension); + + if ($this->initialized) { + throw new \LogicException(\sprintf('Unable to register extension "%s" as extensions have already been initialized.', $class)); + } + + if (isset($this->extensions[$class])) { + throw new \LogicException(\sprintf('Unable to register extension "%s" as it is already registered.', $class)); + } + + $this->extensions[$class] = $extension; + } + + public function addFunction(TwigFunction $function): void + { + if ($this->initialized) { + throw new \LogicException(\sprintf('Unable to add function "%s" as extensions have already been initialized.', $function->getName())); + } + + $this->staging->addFunction($function); + } + + /** + * @return TwigFunction[] + */ + public function getFunctions(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->functions; + } + + public function getFunction(string $name): ?TwigFunction + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->functions[$name])) { + return $this->functions[$name]; + } + + foreach ($this->functions as $pattern => $function) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $function->setArguments($matches); + + return $function; + } + } + + foreach ($this->functionCallbacks as $callback) { + if (false !== $function = $callback($name)) { + return $function; + } + } + + return null; + } + + public function registerUndefinedFunctionCallback(callable $callable): void + { + $this->functionCallbacks[] = $callable; + } + + public function addFilter(TwigFilter $filter): void + { + if ($this->initialized) { + throw new \LogicException(\sprintf('Unable to add filter "%s" as extensions have already been initialized.', $filter->getName())); + } + + $this->staging->addFilter($filter); + } + + /** + * @return TwigFilter[] + */ + public function getFilters(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->filters; + } + + public function getFilter(string $name): ?TwigFilter + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->filters[$name])) { + return $this->filters[$name]; + } + + foreach ($this->filters as $pattern => $filter) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $filter->setArguments($matches); + + return $filter; + } + } + + foreach ($this->filterCallbacks as $callback) { + if (false !== $filter = $callback($name)) { + return $filter; + } + } + + return null; + } + + public function registerUndefinedFilterCallback(callable $callable): void + { + $this->filterCallbacks[] = $callable; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a node visitor as extensions have already been initialized.'); + } + + $this->staging->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a token parser as extensions have already been initialized.'); + } + + $this->staging->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + */ + public function getTokenParsers(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->parsers; + } + + public function getTokenParser(string $name): ?TokenParserInterface + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->parsers[$name])) { + return $this->parsers[$name]; + } + + foreach ($this->parserCallbacks as $callback) { + if (false !== $parser = $callback($name)) { + return $parser; + } + } + + return null; + } + + public function registerUndefinedTokenParserCallback(callable $callable): void + { + $this->parserCallbacks[] = $callable; + } + + /** + * @return array<string, mixed> + */ + public function getGlobals(): array + { + if (null !== $this->globals) { + return $this->globals; + } + + $globals = []; + foreach ($this->extensions as $extension) { + if (!$extension instanceof GlobalsInterface) { + continue; + } + + $extGlobals = $extension->getGlobals(); + if (!\is_array($extGlobals)) { + throw new \UnexpectedValueException(\sprintf('"%s::getGlobals()" must return an array of globals.', \get_class($extension))); + } + + $globals = array_merge($globals, $extGlobals); + } + + if ($this->initialized) { + $this->globals = $globals; + } + + return $globals; + } + + public function addTest(TwigTest $test): void + { + if ($this->initialized) { + throw new \LogicException(\sprintf('Unable to add test "%s" as extensions have already been initialized.', $test->getName())); + } + + $this->staging->addTest($test); + } + + /** + * @return TwigTest[] + */ + public function getTests(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->tests; + } + + public function getTest(string $name): ?TwigTest + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->tests[$name])) { + return $this->tests[$name]; + } + + foreach ($this->tests as $pattern => $test) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count) { + if (preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $test->setArguments($matches); + + return $test; + } + } + } + + return null; + } + + /** + * @return array<string, array{precedence: int, class: class-string<AbstractExpression>}> + */ + public function getUnaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->unaryOperators; + } + + /** + * @return array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}> + */ + public function getBinaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->binaryOperators; + } + + private function initExtensions(): void + { + $this->parsers = []; + $this->filters = []; + $this->functions = []; + $this->tests = []; + $this->visitors = []; + $this->unaryOperators = []; + $this->binaryOperators = []; + + foreach ($this->extensions as $extension) { + $this->initExtension($extension); + } + $this->initExtension($this->staging); + // Done at the end only, so that an exception during initialization does not mark the environment as initialized when catching the exception + $this->initialized = true; + } + + private function initExtension(ExtensionInterface $extension): void + { + // filters + foreach ($extension->getFilters() as $filter) { + $this->filters[$filter->getName()] = $filter; + } + + // functions + foreach ($extension->getFunctions() as $function) { + $this->functions[$function->getName()] = $function; + } + + // tests + foreach ($extension->getTests() as $test) { + $this->tests[$test->getName()] = $test; + } + + // token parsers + foreach ($extension->getTokenParsers() as $parser) { + if (!$parser instanceof TokenParserInterface) { + throw new \LogicException('getTokenParsers() must return an array of \Twig\TokenParser\TokenParserInterface.'); + } + + $this->parsers[$parser->getTag()] = $parser; + } + + // node visitors + foreach ($extension->getNodeVisitors() as $visitor) { + $this->visitors[] = $visitor; + } + + // operators + if ($operators = $extension->getOperators()) { + if (!\is_array($operators)) { + throw new \InvalidArgumentException(\sprintf('"%s::getOperators()" must return an array with operators, got "%s".', \get_class($extension), \is_object($operators) ? \get_class($operators) : \gettype($operators).(\is_resource($operators) ? '' : '#'.$operators))); + } + + if (2 !== \count($operators)) { + throw new \InvalidArgumentException(\sprintf('"%s::getOperators()" must return an array of 2 elements, got %d.', \get_class($extension), \count($operators))); + } + + $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]); + $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/FileExtensionEscapingStrategy.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/FileExtensionEscapingStrategy.php new file mode 100644 index 0000000..812071b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/FileExtensionEscapingStrategy.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +/** + * Default autoescaping strategy based on file names. + * + * This strategy sets the HTML as the default autoescaping strategy, + * but changes it based on the template name. + * + * Note that there is no runtime performance impact as the + * default autoescaping strategy is set at compilation time. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class FileExtensionEscapingStrategy +{ + /** + * Guesses the best autoescaping strategy based on the file name. + * + * @param string $name The template name + * + * @return string|false The escaping strategy name to use or false to disable + */ + public static function guess(string $name) + { + if (\in_array(substr($name, -1), ['/', '\\'])) { + return 'html'; // return html for directories + } + + if (str_ends_with($name, '.twig')) { + $name = substr($name, 0, -5); + } + + $extension = pathinfo($name, \PATHINFO_EXTENSION); + + switch ($extension) { + case 'js': + return 'js'; + + case 'css': + return 'css'; + + case 'txt': + return false; + + default: + return 'html'; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Lexer.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Lexer.php new file mode 100644 index 0000000..8973fbb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Lexer.php @@ -0,0 +1,519 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Error\SyntaxError; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +class Lexer +{ + private $isInitialized = false; + + private $tokens; + private $code; + private $cursor; + private $lineno; + private $end; + private $state; + private $states; + private $brackets; + private $env; + private $source; + private $options; + private $regexes; + private $position; + private $positions; + private $currentVarBlockLine; + + public const STATE_DATA = 0; + public const STATE_BLOCK = 1; + public const STATE_VAR = 2; + public const STATE_STRING = 3; + public const STATE_INTERPOLATION = 4; + + public const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; + public const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A'; + public const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; + public const REGEX_DQ_STRING_DELIM = '/"/A'; + public const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; + public const PUNCTUATION = '()[]{}?:.,|'; + + public function __construct(Environment $env, array $options = []) + { + $this->env = $env; + + $this->options = array_merge([ + 'tag_comment' => ['{#', '#}'], + 'tag_block' => ['{%', '%}'], + 'tag_variable' => ['{{', '}}'], + 'whitespace_trim' => '-', + 'whitespace_line_trim' => '~', + 'whitespace_line_chars' => ' \t\0\x0B', + 'interpolation' => ['#{', '}'], + ], $options); + } + + private function initialize() + { + if ($this->isInitialized) { + return; + } + + // when PHP 7.3 is the min version, we will be able to remove the '#' part in preg_quote as it's part of the default + $this->regexes = [ + // }} + 'lex_var' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '#').'\s*'. // -}}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_variable'][1], '#'). // }} + ') + }Ax', + + // %} + 'lex_block' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*\n?'. // -%}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#').'\n?'. // %}\n? + ') + }Ax', + + // {% endverbatim %} + 'lex_raw_data' => '{'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '('. + $this->options['whitespace_trim']. // - + '|'. + $this->options['whitespace_line_trim']. // ~ + ')?\s*endverbatim\s*'. + '(?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%} + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }sx', + + 'operator' => $this->getOperatorRegex(), + + // #} + 'lex_comment' => '{ + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_comment'][1], '#').'\s*\n?'. // -#}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_comment'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~#}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_comment'][1], '#').'\n?'. // #}\n? + ') + }sx', + + // verbatim %} + 'lex_block_raw' => '{ + \s*verbatim\s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }Asx', + + 'lex_block_line' => '{\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '#').'}As', + + // {{ or {% or {# + 'lex_tokens_start' => '{ + ('. + preg_quote($this->options['tag_variable'][0], '#'). // {{ + '|'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '|'. + preg_quote($this->options['tag_comment'][0], '#'). // {# + ')('. + preg_quote($this->options['whitespace_trim'], '#'). // - + '|'. + preg_quote($this->options['whitespace_line_trim'], '#'). // ~ + ')? + }sx', + 'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0], '#').'\s*}A', + 'interpolation_end' => '{\s*'.preg_quote($this->options['interpolation'][1], '#').'}A', + ]; + + $this->isInitialized = true; + } + + public function tokenize(Source $source): TokenStream + { + $this->initialize(); + + $this->source = $source; + $this->code = str_replace(["\r\n", "\r"], "\n", $source->getCode()); + $this->cursor = 0; + $this->lineno = 1; + $this->end = \strlen($this->code); + $this->tokens = []; + $this->state = self::STATE_DATA; + $this->states = []; + $this->brackets = []; + $this->position = -1; + + // find all token starts in one go + preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, \PREG_OFFSET_CAPTURE); + $this->positions = $matches; + + while ($this->cursor < $this->end) { + // dispatch to the lexing functions depending + // on the current state + switch ($this->state) { + case self::STATE_DATA: + $this->lexData(); + break; + + case self::STATE_BLOCK: + $this->lexBlock(); + break; + + case self::STATE_VAR: + $this->lexVar(); + break; + + case self::STATE_STRING: + $this->lexString(); + break; + + case self::STATE_INTERPOLATION: + $this->lexInterpolation(); + break; + } + } + + $this->pushToken(/* Token::EOF_TYPE */ -1); + + if (!empty($this->brackets)) { + [$expect, $lineno] = array_pop($this->brackets); + throw new SyntaxError(\sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + return new TokenStream($this->tokens, $this->source); + } + + private function lexData(): void + { + // if no matches are left we return the rest of the template as simple text token + if ($this->position == \count($this->positions[0]) - 1) { + $this->pushToken(/* Token::TEXT_TYPE */ 0, substr($this->code, $this->cursor)); + $this->cursor = $this->end; + + return; + } + + // Find the first token after the current cursor + $position = $this->positions[0][++$this->position]; + while ($position[1] < $this->cursor) { + if ($this->position == \count($this->positions[0]) - 1) { + return; + } + $position = $this->positions[0][++$this->position]; + } + + // push the template text first + $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); + + // trim? + if (isset($this->positions[2][$this->position][0])) { + if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } elseif ($this->options['whitespace_line_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + $this->moveCursor($textContent.$position[0]); + + switch ($this->positions[1][$this->position][0]) { + case $this->options['tag_comment'][0]: + $this->lexComment(); + break; + + case $this->options['tag_block'][0]: + // raw data? + if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lexRawData(); + // {% line \d+ %} + } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lineno = (int) $match[1]; + } else { + $this->pushToken(/* Token::BLOCK_START_TYPE */ 1); + $this->pushState(self::STATE_BLOCK); + $this->currentVarBlockLine = $this->lineno; + } + break; + + case $this->options['tag_variable'][0]: + $this->pushToken(/* Token::VAR_START_TYPE */ 2); + $this->pushState(self::STATE_VAR); + $this->currentVarBlockLine = $this->lineno; + break; + } + } + + private function lexBlock(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::BLOCK_END_TYPE */ 3); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexVar(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::VAR_END_TYPE */ 4); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexExpression(): void + { + // whitespace + if (preg_match('/\s+/A', $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + + if ($this->cursor >= $this->end) { + throw new SyntaxError(\sprintf('Unclosed "%s".', self::STATE_BLOCK === $this->state ? 'block' : 'variable'), $this->currentVarBlockLine, $this->source); + } + } + + // spread operator + if ('.' === $this->code[$this->cursor] && ($this->cursor + 2 < $this->end) && '.' === $this->code[$this->cursor + 1] && '.' === $this->code[$this->cursor + 2]) { + $this->pushToken(Token::SPREAD_TYPE, '...'); + $this->moveCursor('...'); + } + // arrow function + elseif ('=' === $this->code[$this->cursor] && ($this->cursor + 1 < $this->end) && '>' === $this->code[$this->cursor + 1]) { + $this->pushToken(Token::ARROW_TYPE, '=>'); + $this->moveCursor('=>'); + } + // operators + elseif (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::OPERATOR_TYPE */ 8, preg_replace('/\s+/', ' ', $match[0])); + $this->moveCursor($match[0]); + } + // names + elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::NAME_TYPE */ 5, $match[0]); + $this->moveCursor($match[0]); + } + // numbers + elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) { + $number = (float) $match[0]; // floats + if (ctype_digit($match[0]) && $number <= \PHP_INT_MAX) { + $number = (int) $match[0]; // integers lower than the maximum + } + $this->pushToken(/* Token::NUMBER_TYPE */ 6, $number); + $this->moveCursor($match[0]); + } + // punctuation + elseif (str_contains(self::PUNCTUATION, $this->code[$this->cursor])) { + // opening bracket + if (str_contains('([{', $this->code[$this->cursor])) { + $this->brackets[] = [$this->code[$this->cursor], $this->lineno]; + } + // closing bracket + elseif (str_contains(')]}', $this->code[$this->cursor])) { + if (empty($this->brackets)) { + throw new SyntaxError(\sprintf('Unexpected "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + + [$expect, $lineno] = array_pop($this->brackets); + if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) { + throw new SyntaxError(\sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + } + + $this->pushToken(/* Token::PUNCTUATION_TYPE */ 9, $this->code[$this->cursor]); + ++$this->cursor; + } + // strings + elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes(substr($match[0], 1, -1))); + $this->moveCursor($match[0]); + } + // opening double quoted string + elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = ['"', $this->lineno]; + $this->pushState(self::STATE_STRING); + $this->moveCursor($match[0]); + } + // unlexable + else { + throw new SyntaxError(\sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexRawData(): void + { + if (!preg_match($this->regexes['lex_raw_data'], $this->code, $match, \PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unexpected end of file: Unclosed "verbatim" block.', $this->lineno, $this->source); + } + + $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor); + $this->moveCursor($text.$match[0][0]); + + // trim? + if (isset($match[1][0])) { + if ($this->options['whitespace_trim'] === $match[1][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } else { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + } + + private function lexComment(): void + { + if (!preg_match($this->regexes['lex_comment'], $this->code, $match, \PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unclosed comment.', $this->lineno, $this->source); + } + + $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]); + } + + private function lexString(): void + { + if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = [$this->options['interpolation'][0], $this->lineno]; + $this->pushToken(/* Token::INTERPOLATION_START_TYPE */ 10); + $this->moveCursor($match[0]); + $this->pushState(self::STATE_INTERPOLATION); + } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && '' !== $match[0]) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes($match[0])); + $this->moveCursor($match[0]); + } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + [$expect, $lineno] = array_pop($this->brackets); + if ('"' != $this->code[$this->cursor]) { + throw new SyntaxError(\sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + $this->popState(); + ++$this->cursor; + } else { + // unlexable + throw new SyntaxError(\sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexInterpolation(): void + { + $bracket = end($this->brackets); + if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) { + array_pop($this->brackets); + $this->pushToken(/* Token::INTERPOLATION_END_TYPE */ 11); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function pushToken($type, $value = ''): void + { + // do not push empty text tokens + if (/* Token::TEXT_TYPE */ 0 === $type && '' === $value) { + return; + } + + $this->tokens[] = new Token($type, $value, $this->lineno); + } + + private function moveCursor($text): void + { + $this->cursor += \strlen($text); + $this->lineno += substr_count($text, "\n"); + } + + private function getOperatorRegex(): string + { + $operators = array_merge( + ['='], + array_keys($this->env->getUnaryOperators()), + array_keys($this->env->getBinaryOperators()) + ); + + $operators = array_combine($operators, array_map('strlen', $operators)); + arsort($operators); + + $regex = []; + foreach ($operators as $operator => $length) { + // an operator that ends with a character must be followed by + // a whitespace, a parenthesis, an opening map [ or sequence { + $r = preg_quote($operator, '/'); + if (ctype_alpha($operator[$length - 1])) { + $r .= '(?=[\s()\[{])'; + } + + // an operator that begins with a character must not have a dot or pipe before + if (ctype_alpha($operator[0])) { + $r = '(?<![\.\|])'.$r; + } + + // an operator with a space can be any amount of whitespaces + $r = preg_replace('/\s+/', '\s+', $r); + + $regex[] = $r; + } + + return '/'.implode('|', $regex).'/A'; + } + + private function pushState($state): void + { + $this->states[] = $this->state; + $this->state = $state; + } + + private function popState(): void + { + if (0 === \count($this->states)) { + throw new \LogicException('Cannot pop state without a previous state.'); + } + + $this->state = array_pop($this->states); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ArrayLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ArrayLoader.php new file mode 100644 index 0000000..ce613c9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ArrayLoader.php @@ -0,0 +1,77 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Loader; + +use Twig\Error\LoaderError; +use Twig\Source; + +/** + * Loads a template from an array. + * + * When using this loader with a cache mechanism, you should know that a new cache + * key is generated each time a template content "changes" (the cache key being the + * source code of the template). If you don't want to see your cache grows out of + * control, you need to take care of clearing the old cache file by yourself. + * + * This loader should only be used for unit testing. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class ArrayLoader implements LoaderInterface +{ + private $templates = []; + + /** + * @param array $templates An array of templates (keys are the names, and values are the source code) + */ + public function __construct(array $templates = []) + { + $this->templates = $templates; + } + + public function setTemplate(string $name, string $template): void + { + $this->templates[$name] = $template; + } + + public function getSourceContext(string $name): Source + { + if (!isset($this->templates[$name])) { + throw new LoaderError(\sprintf('Template "%s" is not defined.', $name)); + } + + return new Source($this->templates[$name], $name); + } + + public function exists(string $name): bool + { + return isset($this->templates[$name]); + } + + public function getCacheKey(string $name): string + { + if (!isset($this->templates[$name])) { + throw new LoaderError(\sprintf('Template "%s" is not defined.', $name)); + } + + return $name.':'.$this->templates[$name]; + } + + public function isFresh(string $name, int $time): bool + { + if (!isset($this->templates[$name])) { + throw new LoaderError(\sprintf('Template "%s" is not defined.', $name)); + } + + return true; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ChainLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ChainLoader.php new file mode 100644 index 0000000..163c029 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/ChainLoader.php @@ -0,0 +1,119 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Loader; + +use Twig\Error\LoaderError; +use Twig\Source; + +/** + * Loads templates from other loaders. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class ChainLoader implements LoaderInterface +{ + private $hasSourceCache = []; + private $loaders = []; + + /** + * @param LoaderInterface[] $loaders + */ + public function __construct(array $loaders = []) + { + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + public function addLoader(LoaderInterface $loader): void + { + $this->loaders[] = $loader; + $this->hasSourceCache = []; + } + + /** + * @return LoaderInterface[] + */ + public function getLoaders(): array + { + return $this->loaders; + } + + public function getSourceContext(string $name): Source + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getSourceContext($name); + } catch (LoaderError $e) { + $exceptions[] = $e->getMessage(); + } + } + + throw new LoaderError(\sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function exists(string $name): bool + { + if (isset($this->hasSourceCache[$name])) { + return $this->hasSourceCache[$name]; + } + + foreach ($this->loaders as $loader) { + if ($loader->exists($name)) { + return $this->hasSourceCache[$name] = true; + } + } + + return $this->hasSourceCache[$name] = false; + } + + public function getCacheKey(string $name): string + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getCacheKey($name); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(\sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function isFresh(string $name, int $time): bool + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->isFresh($name, $time); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(\sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/FilesystemLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/FilesystemLoader.php new file mode 100644 index 0000000..c60964f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/FilesystemLoader.php @@ -0,0 +1,283 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Loader; + +use Twig\Error\LoaderError; +use Twig\Source; + +/** + * Loads template from the filesystem. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class FilesystemLoader implements LoaderInterface +{ + /** Identifier of the main namespace. */ + public const MAIN_NAMESPACE = '__main__'; + + protected $paths = []; + protected $cache = []; + protected $errorCache = []; + + private $rootPath; + + /** + * @param string|array $paths A path or an array of paths where to look for templates + * @param string|null $rootPath The root path common to all relative paths (null for getcwd()) + */ + public function __construct($paths = [], ?string $rootPath = null) + { + $this->rootPath = ($rootPath ?? getcwd()).\DIRECTORY_SEPARATOR; + if (null !== $rootPath && false !== ($realPath = realpath($rootPath))) { + $this->rootPath = $realPath.\DIRECTORY_SEPARATOR; + } + + if ($paths) { + $this->setPaths($paths); + } + } + + /** + * Returns the paths to the templates. + */ + public function getPaths(string $namespace = self::MAIN_NAMESPACE): array + { + return $this->paths[$namespace] ?? []; + } + + /** + * Returns the path namespaces. + * + * The main namespace is always defined. + */ + public function getNamespaces(): array + { + return array_keys($this->paths); + } + + /** + * @param string|array $paths A path or an array of paths where to look for templates + */ + public function setPaths($paths, string $namespace = self::MAIN_NAMESPACE): void + { + if (!\is_array($paths)) { + $paths = [$paths]; + } + + $this->paths[$namespace] = []; + foreach ($paths as $path) { + $this->addPath($path, $namespace); + } + } + + /** + * @throws LoaderError + */ + public function addPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(\sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $this->paths[$namespace][] = rtrim($path, '/\\'); + } + + /** + * @throws LoaderError + */ + public function prependPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(\sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $path = rtrim($path, '/\\'); + + if (!isset($this->paths[$namespace])) { + $this->paths[$namespace][] = $path; + } else { + array_unshift($this->paths[$namespace], $path); + } + } + + public function getSourceContext(string $name): Source + { + if (null === $path = $this->findTemplate($name)) { + return new Source('', $name, ''); + } + + return new Source(file_get_contents($path), $name, $path); + } + + public function getCacheKey(string $name): string + { + if (null === $path = $this->findTemplate($name)) { + return ''; + } + $len = \strlen($this->rootPath); + if (0 === strncmp($this->rootPath, $path, $len)) { + return substr($path, $len); + } + + return $path; + } + + /** + * @return bool + */ + public function exists(string $name) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return true; + } + + return null !== $this->findTemplate($name, false); + } + + public function isFresh(string $name, int $time): bool + { + // false support to be removed in 3.0 + if (null === $path = $this->findTemplate($name)) { + return false; + } + + return filemtime($path) < $time; + } + + /** + * @return string|null + */ + protected function findTemplate(string $name, bool $throw = true) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return $this->cache[$name]; + } + + if (isset($this->errorCache[$name])) { + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + try { + [$namespace, $shortname] = $this->parseName($name); + + $this->validateName($shortname); + } catch (LoaderError $e) { + if (!$throw) { + return null; + } + + throw $e; + } + + if (!isset($this->paths[$namespace])) { + $this->errorCache[$name] = \sprintf('There are no registered paths for namespace "%s".', $namespace); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + foreach ($this->paths[$namespace] as $path) { + if (!$this->isAbsolutePath($path)) { + $path = $this->rootPath.$path; + } + + if (is_file($path.'/'.$shortname)) { + if (false !== $realpath = realpath($path.'/'.$shortname)) { + return $this->cache[$name] = $realpath; + } + + return $this->cache[$name] = $path.'/'.$shortname; + } + } + + $this->errorCache[$name] = \sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace])); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + private function normalizeName(string $name): string + { + return preg_replace('#/{2,}#', '/', str_replace('\\', '/', $name)); + } + + private function parseName(string $name, string $default = self::MAIN_NAMESPACE): array + { + if (isset($name[0]) && '@' == $name[0]) { + if (false === $pos = strpos($name, '/')) { + throw new LoaderError(\sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name)); + } + + $namespace = substr($name, 1, $pos - 1); + $shortname = substr($name, $pos + 1); + + return [$namespace, $shortname]; + } + + return [$default, $name]; + } + + private function validateName(string $name): void + { + if (str_contains($name, "\0")) { + throw new LoaderError('A template name cannot contain NUL bytes.'); + } + + $name = ltrim($name, '/'); + $parts = explode('/', $name); + $level = 0; + foreach ($parts as $part) { + if ('..' === $part) { + --$level; + } elseif ('.' !== $part) { + ++$level; + } + + if ($level < 0) { + throw new LoaderError(\sprintf('Looks like you try to load a template outside configured directories (%s).', $name)); + } + } + } + + private function isAbsolutePath(string $file): bool + { + return strspn($file, '/\\', 0, 1) + || (\strlen($file) > 3 && ctype_alpha($file[0]) + && ':' === $file[1] + && strspn($file, '/\\', 2, 1) + ) + || null !== parse_url($file, \PHP_URL_SCHEME) + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/LoaderInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/LoaderInterface.php new file mode 100644 index 0000000..fec7e85 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Loader/LoaderInterface.php @@ -0,0 +1,49 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Loader; + +use Twig\Error\LoaderError; +use Twig\Source; + +/** + * Interface all loaders must implement. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface LoaderInterface +{ + /** + * Returns the source context for a given template logical name. + * + * @throws LoaderError When $name is not found + */ + public function getSourceContext(string $name): Source; + + /** + * Gets the cache key to use for the cache for a given template name. + * + * @throws LoaderError When $name is not found + */ + public function getCacheKey(string $name): string; + + /** + * @param int $time Timestamp of the last modification time of the cached template + * + * @throws LoaderError When $name is not found + */ + public function isFresh(string $name, int $time): bool; + + /** + * @return bool + */ + public function exists(string $name); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Markup.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Markup.php new file mode 100644 index 0000000..1788acc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Markup.php @@ -0,0 +1,52 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +/** + * Marks a content as safe. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class Markup implements \Countable, \JsonSerializable +{ + private $content; + private $charset; + + public function __construct($content, $charset) + { + $this->content = (string) $content; + $this->charset = $charset; + } + + public function __toString() + { + return $this->content; + } + + /** + * @return int + */ + #[\ReturnTypeWillChange] + public function count() + { + return mb_strlen($this->content, $this->charset); + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->content; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/AutoEscapeNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/AutoEscapeNode.php new file mode 100644 index 0000000..f9bc17e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/AutoEscapeNode.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents an autoescape node. + * + * The value is the escaping strategy (can be html, js, ...) + * + * The true value is equivalent to html. + * + * If autoescaping is disabled, then the value is false. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class AutoEscapeNode extends Node +{ + public function __construct($value, Node $body, int $lineno, string $tag = 'autoescape') + { + parent::__construct(['body' => $body], ['value' => $value], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('body')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockNode.php new file mode 100644 index 0000000..15973a3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockNode.php @@ -0,0 +1,47 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a block node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class BlockNode extends Node +{ + public function __construct(string $name, Node $body, int $lineno, ?string $tag = null) + { + parent::__construct(['body' => $body], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(\sprintf("public function block_%s(\$context, array \$blocks = [])\n", $this->getAttribute('name')), "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ; + + $compiler + ->subcompile($this->getNode('body')) + ->write("return; yield '';\n") // needed when body doesn't yield anything + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockReferenceNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockReferenceNode.php new file mode 100644 index 0000000..23c73ea --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BlockReferenceNode.php @@ -0,0 +1,38 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a block call node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class BlockReferenceNode extends Node implements NodeOutputInterface +{ + public function __construct(string $name, int $lineno, ?string $tag = null) + { + parent::__construct([], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(\sprintf("yield from \$this->unwrap()->yieldBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name'))) + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BodyNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BodyNode.php new file mode 100644 index 0000000..08115b3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/BodyNode.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; + +/** + * Represents a body node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class BodyNode extends Node +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CaptureNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CaptureNode.php new file mode 100644 index 0000000..b1cb357 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CaptureNode.php @@ -0,0 +1,57 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a node for which we need to capture the output. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class CaptureNode extends Node +{ + public function __construct(Node $body, int $lineno, ?string $tag = null) + { + parent::__construct(['body' => $body], ['raw' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $useYield = $compiler->getEnvironment()->useYield(); + + if (!$this->getAttribute('raw')) { + $compiler->raw("('' === \$tmp = "); + } + $compiler + ->raw($useYield ? "implode('', iterator_to_array(" : '\\Twig\\Extension\\CoreExtension::captureOutput(') + ->raw("(function () use (&\$context, \$macros, \$blocks) {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->write("return; yield '';\n") + ->outdent() + ->write('})()') + ; + if ($useYield) { + $compiler->raw(', false))'); + } else { + $compiler->raw(')'); + } + if (!$this->getAttribute('raw')) { + $compiler->raw(") ? '' : new Markup(\$tmp, \$this->env->getCharset());"); + } else { + $compiler->raw(';'); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityCallNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityCallNode.php new file mode 100644 index 0000000..9c162d1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityCallNode.php @@ -0,0 +1,30 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class CheckSecurityCallNode extends Node +{ + public function compile(Compiler $compiler) + { + $compiler + ->write("\$this->sandbox = \$this->extensions[SandboxExtension::class];\n") + ->write("\$this->checkSecurity();\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityNode.php new file mode 100644 index 0000000..6e591aa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckSecurityNode.php @@ -0,0 +1,85 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class CheckSecurityNode extends Node +{ + private $usedFilters; + private $usedTags; + private $usedFunctions; + + /** + * @param array<string, int> $usedFilters + * @param array<string, int> $usedTags + * @param array<string, int> $usedFunctions + */ + public function __construct(array $usedFilters, array $usedTags, array $usedFunctions) + { + $this->usedFilters = $usedFilters; + $this->usedTags = $usedTags; + $this->usedFunctions = $usedFunctions; + + parent::__construct(); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write("\n") + ->write("public function checkSecurity()\n") + ->write("{\n") + ->indent() + ->write('static $tags = ')->repr(array_filter($this->usedTags))->raw(";\n") + ->write('static $filters = ')->repr(array_filter($this->usedFilters))->raw(";\n") + ->write('static $functions = ')->repr(array_filter($this->usedFunctions))->raw(";\n\n") + ->write("try {\n") + ->indent() + ->write("\$this->sandbox->checkSecurity(\n") + ->indent() + ->write(!$this->usedTags ? "[],\n" : "['".implode("', '", array_keys($this->usedTags))."'],\n") + ->write(!$this->usedFilters ? "[],\n" : "['".implode("', '", array_keys($this->usedFilters))."'],\n") + ->write(!$this->usedFunctions ? "[],\n" : "['".implode("', '", array_keys($this->usedFunctions))."'],\n") + ->write("\$this->source\n") + ->outdent() + ->write(");\n") + ->outdent() + ->write("} catch (SecurityError \$e) {\n") + ->indent() + ->write("\$e->setSourceContext(\$this->source);\n\n") + ->write("if (\$e instanceof SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n") + ->outdent() + ->write("}\n\n") + ->write("throw \$e;\n") + ->outdent() + ->write("}\n\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckToStringNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckToStringNode.php new file mode 100644 index 0000000..81fb924 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/CheckToStringNode.php @@ -0,0 +1,47 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; + +/** + * Checks if casting an expression to __toString() is allowed by the sandbox. + * + * For instance, when there is a simple Print statement, like {{ article }}, + * and if the sandbox is enabled, we need to check that the __toString() + * method is allowed if 'article' is an object. The same goes for {{ article|upper }} + * or {{ random(article) }} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class CheckToStringNode extends AbstractExpression +{ + public function __construct(AbstractExpression $expr) + { + parent::__construct(['expr' => $expr], [], $expr->getTemplateLine(), $expr->getNodeTag()); + } + + public function compile(Compiler $compiler): void + { + $expr = $this->getNode('expr'); + $compiler + ->raw('$this->sandbox->ensureToStringAllowed(') + ->subcompile($expr) + ->raw(', ') + ->repr($expr->getTemplateLine()) + ->raw(', $this->source)') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DeprecatedNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DeprecatedNode.php new file mode 100644 index 0000000..afeb833 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DeprecatedNode.php @@ -0,0 +1,73 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\ConstantExpression; + +/** + * Represents a deprecated node. + * + * @author Yonel Ceruto <yonelceruto@gmail.com> + */ +#[YieldReady] +class DeprecatedNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, ?string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $expr = $this->getNode('expr'); + + if (!$expr instanceof ConstantExpression) { + $varName = $compiler->getVarName(); + $compiler + ->write(\sprintf('$%s = ', $varName)) + ->subcompile($expr) + ->raw(";\n") + ; + } + + $compiler->write('trigger_deprecation('); + if ($this->hasNode('package')) { + $compiler->subcompile($this->getNode('package')); + } else { + $compiler->raw("''"); + } + $compiler->raw(', '); + if ($this->hasNode('version')) { + $compiler->subcompile($this->getNode('version')); + } else { + $compiler->raw("''"); + } + $compiler->raw(', '); + + if ($expr instanceof ConstantExpression) { + $compiler->subcompile($expr); + } else { + $compiler->write(\sprintf('$%s', $varName)); + } + + $compiler + ->raw(".") + ->string(\sprintf(' in "%s" at line %d.', $this->getTemplateName(), $this->getTemplateLine())) + ->raw(");\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DoNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DoNode.php new file mode 100644 index 0000000..445016a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/DoNode.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; + +/** + * Represents a do node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class DoNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, ?string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/EmbedNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/EmbedNode.php new file mode 100644 index 0000000..5455094 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/EmbedNode.php @@ -0,0 +1,50 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\ConstantExpression; + +/** + * Represents an embed node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class EmbedNode extends IncludeNode +{ + // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) + public function __construct(string $name, int $index, ?AbstractExpression $variables, bool $only, bool $ignoreMissing, int $lineno, ?string $tag = null) + { + parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); + + $this->setAttribute('name', $name); + $this->setAttribute('index', $index); + } + + protected function addGetTemplate(Compiler $compiler): void + { + $compiler + ->write('$this->loadTemplate(') + ->string($this->getAttribute('name')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(', ') + ->string($this->getAttribute('index')) + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AbstractExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AbstractExpression.php new file mode 100644 index 0000000..1692f56 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AbstractExpression.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Node\Node; + +/** + * Abstract class for all nodes that represents an expression. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +abstract class AbstractExpression extends Node +{ + public function isGenerator(): bool + { + return $this->hasAttribute('is_generator') && $this->getAttribute('is_generator'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrayExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrayExpression.php new file mode 100644 index 0000000..5f8b0f6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrayExpression.php @@ -0,0 +1,135 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class ArrayExpression extends AbstractExpression +{ + private $index; + + public function __construct(array $elements, int $lineno) + { + parent::__construct($elements, [], $lineno); + + $this->index = -1; + foreach ($this->getKeyValuePairs() as $pair) { + if ($pair['key'] instanceof ConstantExpression && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) { + $this->index = $pair['key']->getAttribute('value'); + } + } + } + + public function getKeyValuePairs(): array + { + $pairs = []; + foreach (array_chunk($this->nodes, 2) as $pair) { + $pairs[] = [ + 'key' => $pair[0], + 'value' => $pair[1], + ]; + } + + return $pairs; + } + + public function hasElement(AbstractExpression $key): bool + { + foreach ($this->getKeyValuePairs() as $pair) { + // we compare the string representation of the keys + // to avoid comparing the line numbers which are not relevant here. + if ((string) $key === (string) $pair['key']) { + return true; + } + } + + return false; + } + + public function addElement(AbstractExpression $value, ?AbstractExpression $key = null): void + { + if (null === $key) { + $key = new ConstantExpression(++$this->index, $value->getTemplateLine()); + } + + array_push($this->nodes, $key, $value); + } + + public function compile(Compiler $compiler): void + { + $keyValuePairs = $this->getKeyValuePairs(); + $needsArrayMergeSpread = \PHP_VERSION_ID < 80100 && $this->hasSpreadItem($keyValuePairs); + + if ($needsArrayMergeSpread) { + $compiler->raw('CoreExtension::merge('); + } + $compiler->raw('['); + $first = true; + $reopenAfterMergeSpread = false; + $nextIndex = 0; + foreach ($keyValuePairs as $pair) { + if ($reopenAfterMergeSpread) { + $compiler->raw(', ['); + $reopenAfterMergeSpread = false; + } + + if ($needsArrayMergeSpread && $pair['value']->hasAttribute('spread')) { + $compiler->raw('], ')->subcompile($pair['value']); + $first = true; + $reopenAfterMergeSpread = true; + continue; + } + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + if ($pair['value']->hasAttribute('spread') && !$needsArrayMergeSpread) { + $compiler->raw('...')->subcompile($pair['value']); + ++$nextIndex; + } else { + $key = $pair['key'] instanceof ConstantExpression ? $pair['key']->getAttribute('value') : null; + + if ($nextIndex !== $key) { + if (\is_int($key)) { + $nextIndex = $key + 1; + } + $compiler + ->subcompile($pair['key']) + ->raw(' => ') + ; + } else { + ++$nextIndex; + } + + $compiler->subcompile($pair['value']); + } + } + if (!$reopenAfterMergeSpread) { + $compiler->raw(']'); + } + if ($needsArrayMergeSpread) { + $compiler->raw(')'); + } + } + + private function hasSpreadItem(array $pairs): bool + { + foreach ($pairs as $pair) { + if ($pair['value']->hasAttribute('spread')) { + return true; + } + } + + return false; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php new file mode 100644 index 0000000..eaad03c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php @@ -0,0 +1,64 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Node; + +/** + * Represents an arrow function. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class ArrowFunctionExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $expr, Node $names, $lineno, $tag = null) + { + parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->raw('function (') + ; + foreach ($this->getNode('names') as $i => $name) { + if ($i) { + $compiler->raw(', '); + } + + $compiler + ->raw('$__') + ->raw($name->getAttribute('name')) + ->raw('__') + ; + } + $compiler + ->raw(') use ($context, $macros) { ') + ; + foreach ($this->getNode('names') as $name) { + $compiler + ->raw('$context["') + ->raw($name->getAttribute('name')) + ->raw('"] = $__') + ->raw($name->getAttribute('name')) + ->raw('__; ') + ; + } + $compiler + ->raw('return ') + ->subcompile($this->getNode('expr')) + ->raw('; }') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php new file mode 100644 index 0000000..7dd1bc4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class AssignNameExpression extends NameExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('$context[') + ->string($this->getAttribute('name')) + ->raw(']') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php new file mode 100644 index 0000000..c424e5c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php @@ -0,0 +1,42 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Node; + +abstract class AbstractBinary extends AbstractExpression +{ + public function __construct(Node $left, Node $right, int $lineno) + { + parent::__construct(['left' => $left, 'right' => $right], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('left')) + ->raw(' ') + ; + $this->operator($compiler); + $compiler + ->raw(' ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php new file mode 100644 index 0000000..ee4307e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class AddBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('+'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php new file mode 100644 index 0000000..5f2380d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class AndBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('&&'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php new file mode 100644 index 0000000..db7d6d6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class BitwiseAndBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('&'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php new file mode 100644 index 0000000..ce803dd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class BitwiseOrBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('|'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php new file mode 100644 index 0000000..5c29785 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class BitwiseXorBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('^'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php new file mode 100644 index 0000000..f825ab8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class ConcatBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('.'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php new file mode 100644 index 0000000..e3817d1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class DivBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('/'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php new file mode 100644 index 0000000..a73a560 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class EndsWithBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $left = $compiler->getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(\sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(\sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(\sprintf(') && str_ends_with($%1$s, $%2$s))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php new file mode 100644 index 0000000..5f42319 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class EqualBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 === CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('=='); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php new file mode 100644 index 0000000..d7e7980 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php @@ -0,0 +1,29 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class FloorDivBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler->raw('(int) floor('); + parent::compile($compiler); + $compiler->raw(')'); + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('/'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php new file mode 100644 index 0000000..f42de3f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class GreaterBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(1 === CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php new file mode 100644 index 0000000..0c4f43f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class GreaterEqualBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 <= CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>='); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php new file mode 100644 index 0000000..c57bb20 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class HasEveryBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('CoreExtension::arrayEvery($this->env, ') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php new file mode 100644 index 0000000..12293f8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class HasSomeBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('CoreExtension::arraySome($this->env, ') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php new file mode 100644 index 0000000..68a98fe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class InBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('CoreExtension::inFilter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('in'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php new file mode 100644 index 0000000..fb3264a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class LessBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(-1 === CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php new file mode 100644 index 0000000..8f36538 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class LessEqualBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 >= CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<='); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php new file mode 100644 index 0000000..4669044 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class MatchesBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('CoreExtension::matches(') + ->subcompile($this->getNode('right')) + ->raw(', ') + ->subcompile($this->getNode('left')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php new file mode 100644 index 0000000..271b45c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class ModBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('%'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php new file mode 100644 index 0000000..6d4c1e0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class MulBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('*'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php new file mode 100644 index 0000000..d137ef6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class NotEqualBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + if (\PHP_VERSION_ID >= 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 !== CoreExtension::compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('!='); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php new file mode 100644 index 0000000..80c8755 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class NotInBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('!CoreExtension::inFilter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('not in'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php new file mode 100644 index 0000000..21f87c9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class OrBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('||'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php new file mode 100644 index 0000000..c9f4c66 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class PowerBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('**'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php new file mode 100644 index 0000000..55982c8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class RangeBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('range(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('..'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php new file mode 100644 index 0000000..ae5a4a4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php @@ -0,0 +1,22 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class SpaceshipBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<=>'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php new file mode 100644 index 0000000..4519f30 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class StartsWithBinary extends AbstractBinary +{ + public function compile(Compiler $compiler): void + { + $left = $compiler->getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(\sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(\sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(\sprintf(') && str_starts_with($%1$s, $%2$s))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php new file mode 100644 index 0000000..eeb87fa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Binary; + +use Twig\Compiler; + +class SubBinary extends AbstractBinary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('-'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php new file mode 100644 index 0000000..6293822 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php @@ -0,0 +1,87 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Node; + +/** + * Represents a block call node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class BlockReferenceExpression extends AbstractExpression +{ + public function __construct(Node $name, ?Node $template, int $lineno, ?string $tag = null) + { + $nodes = ['name' => $name]; + if (null !== $template) { + $nodes['template'] = $template; + } + + parent::__construct($nodes, ['is_defined_test' => false, 'output' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $this->compileTemplateCall($compiler, 'hasBlock'); + } else { + if ($this->getAttribute('output')) { + $compiler->addDebugInfo($this); + + $compiler->write('yield from '); + $this + ->compileTemplateCall($compiler, 'yieldBlock') + ->raw(";\n"); + } else { + $this->compileTemplateCall($compiler, 'renderBlock'); + } + } + } + + private function compileTemplateCall(Compiler $compiler, string $method): Compiler + { + if (!$this->hasNode('template')) { + $compiler->write('$this'); + } else { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('template')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + $compiler->raw(\sprintf('->unwrap()->%s', $method)); + + return $this->compileBlockArguments($compiler); + } + + private function compileBlockArguments(Compiler $compiler): Compiler + { + $compiler + ->raw('(') + ->subcompile($this->getNode('name')) + ->raw(', $context'); + + if (!$this->hasNode('template')) { + $compiler->raw(', $blocks'); + } + + return $compiler->raw(')'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/CallExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/CallExpression.php new file mode 100644 index 0000000..cd81df4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/CallExpression.php @@ -0,0 +1,304 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Error\SyntaxError; +use Twig\Extension\ExtensionInterface; +use Twig\Node\Node; +use Twig\Util\ReflectionCallable; + +abstract class CallExpression extends AbstractExpression +{ + private $reflector = null; + + protected function compileCallable(Compiler $compiler) + { + $callable = $this->getAttribute('callable'); + + if (\is_string($callable) && !str_contains($callable, '::')) { + $compiler->raw($callable); + } else { + $rc = $this->reflectCallable($callable); + $r = $rc->getReflector(); + $callable = $rc->getCallable(); + + if (\is_string($callable)) { + $compiler->raw($callable); + } elseif (\is_array($callable) && \is_string($callable[0])) { + if (!$r instanceof \ReflectionMethod || $r->isStatic()) { + $compiler->raw(\sprintf('%s::%s', $callable[0], $callable[1])); + } else { + $compiler->raw(\sprintf('$this->env->getRuntime(\'%s\')->%s', $callable[0], $callable[1])); + } + } elseif (\is_array($callable) && $callable[0] instanceof ExtensionInterface) { + $class = \get_class($callable[0]); + if (!$compiler->getEnvironment()->hasExtension($class)) { + // Compile a non-optimized call to trigger a \Twig\Error\RuntimeError, which cannot be a compile-time error + $compiler->raw(\sprintf('$this->env->getExtension(\'%s\')', $class)); + } else { + $compiler->raw(\sprintf('$this->extensions[\'%s\']', ltrim($class, '\\'))); + } + + $compiler->raw(\sprintf('->%s', $callable[1])); + } else { + $compiler->raw(\sprintf('$this->env->get%s(\'%s\')->getCallable()', ucfirst($this->getAttribute('type')), $this->getAttribute('name'))); + } + } + + $this->compileArguments($compiler); + } + + protected function compileArguments(Compiler $compiler, $isArray = false): void + { + if (\func_num_args() >= 2) { + trigger_deprecation('twig/twig', '3.11', 'Passing a second argument to "%s()" is deprecated.', __METHOD__); + } + + $compiler->raw($isArray ? '[' : '('); + + $first = true; + + if ($this->hasAttribute('needs_charset') && $this->getAttribute('needs_charset')) { + $compiler->raw('$this->env->getCharset()'); + $first = false; + } + + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->raw('$this->env'); + $first = false; + } + + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->raw('$context'); + $first = false; + } + + if ($this->hasAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->string($argument); + $first = false; + } + } + + if ($this->hasNode('node')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($this->getNode('node')); + $first = false; + } + + if ($this->hasNode('arguments')) { + $callable = $this->getAttribute('callable'); + $arguments = $this->getArguments($callable, $this->getNode('arguments')); + foreach ($arguments as $node) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($node); + $first = false; + } + } + + $compiler->raw($isArray ? ']' : ')'); + } + + protected function getArguments($callable, $arguments) + { + $callType = $this->getAttribute('type'); + $callName = $this->getAttribute('name'); + + $parameters = []; + $named = false; + foreach ($arguments as $name => $node) { + if (!\is_int($name)) { + $named = true; + $name = $this->normalizeName($name); + } elseif ($named) { + throw new SyntaxError(\sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + $parameters[$name] = $node; + } + + $isVariadic = $this->hasAttribute('is_variadic') && $this->getAttribute('is_variadic'); + if (!$named && !$isVariadic) { + return $parameters; + } + + if (!$callable) { + if ($named) { + $message = \sprintf('Named arguments are not supported for %s "%s".', $callType, $callName); + } else { + $message = \sprintf('Arbitrary positional arguments are not supported for %s "%s".', $callType, $callName); + } + + throw new \LogicException($message); + } + + [$callableParameters, $isPhpVariadic] = $this->getCallableParameters($callable, $isVariadic); + $arguments = []; + $names = []; + $missingArguments = []; + $optionalArguments = []; + $pos = 0; + foreach ($callableParameters as $callableParameter) { + $name = $this->normalizeName($callableParameter->name); + if (\PHP_VERSION_ID >= 80000 && 'range' === $callable) { + if ('start' === $name) { + $name = 'low'; + } elseif ('end' === $name) { + $name = 'high'; + } + } + + $names[] = $name; + + if (\array_key_exists($name, $parameters)) { + if (\array_key_exists($pos, $parameters)) { + throw new SyntaxError(\sprintf('Argument "%s" is defined twice for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + if (\count($missingArguments)) { + throw new SyntaxError(\sprintf( + 'Argument "%s" could not be assigned for %s "%s(%s)" because it is mapped to an internal PHP function which cannot determine default value for optional argument%s "%s".', + $name, $callType, $callName, implode(', ', $names), \count($missingArguments) > 1 ? 's' : '', implode('", "', $missingArguments) + ), $this->getTemplateLine(), $this->getSourceContext()); + } + + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$name]; + unset($parameters[$name]); + $optionalArguments = []; + } elseif (\array_key_exists($pos, $parameters)) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$pos]; + unset($parameters[$pos]); + $optionalArguments = []; + ++$pos; + } elseif ($callableParameter->isDefaultValueAvailable()) { + $optionalArguments[] = new ConstantExpression($callableParameter->getDefaultValue(), -1); + } elseif ($callableParameter->isOptional()) { + if (empty($parameters)) { + break; + } else { + $missingArguments[] = $name; + } + } else { + throw new SyntaxError(\sprintf('Value for argument "%s" is required for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + } + + if ($isVariadic) { + $arbitraryArguments = $isPhpVariadic ? new VariadicExpression([], -1) : new ArrayExpression([], -1); + foreach ($parameters as $key => $value) { + if (\is_int($key)) { + $arbitraryArguments->addElement($value); + } else { + $arbitraryArguments->addElement($value, new ConstantExpression($key, -1)); + } + unset($parameters[$key]); + } + + if ($arbitraryArguments->count()) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $arbitraryArguments; + } + } + + if (!empty($parameters)) { + $unknownParameter = null; + foreach ($parameters as $parameter) { + if ($parameter instanceof Node) { + $unknownParameter = $parameter; + break; + } + } + + throw new SyntaxError( + \sprintf( + 'Unknown argument%s "%s" for %s "%s(%s)".', + \count($parameters) > 1 ? 's' : '', implode('", "', array_keys($parameters)), $callType, $callName, implode(', ', $names) + ), + $unknownParameter ? $unknownParameter->getTemplateLine() : $this->getTemplateLine(), + $unknownParameter ? $unknownParameter->getSourceContext() : $this->getSourceContext() + ); + } + + return $arguments; + } + + protected function normalizeName(string $name): string + { + return strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], $name)); + } + + private function getCallableParameters($callable, bool $isVariadic): array + { + $rc = $this->reflectCallable($callable); + $r = $rc->getReflector(); + $callableName = $rc->getName(); + + $parameters = $r->getParameters(); + if ($this->hasNode('node')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_charset') && $this->getAttribute('needs_charset')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + array_shift($parameters); + } + if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + array_shift($parameters); + } + } + $isPhpVariadic = false; + if ($isVariadic) { + $argument = end($parameters); + $isArray = $argument && $argument->hasType() && $argument->getType() instanceof \ReflectionNamedType && 'array' === $argument->getType()->getName(); + if ($isArray && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) { + array_pop($parameters); + } elseif ($argument && $argument->isVariadic()) { + array_pop($parameters); + $isPhpVariadic = true; + } else { + throw new \LogicException(\sprintf('The last parameter of "%s" for %s "%s" must be an array with default value, eg. "array $arg = []".', $callableName, $this->getAttribute('type'), $this->getAttribute('name'))); + } + } + + return [$parameters, $isPhpVariadic]; + } + + private function reflectCallable($callable): ReflectionCallable + { + if (!$this->reflector) { + $this->reflector = new ReflectionCallable($callable, $this->getAttribute('type'), $this->getAttribute('name')); + } + + return $this->reflector; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php new file mode 100644 index 0000000..d7db993 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class ConditionalExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $expr1, AbstractExpression $expr2, AbstractExpression $expr3, int $lineno) + { + parent::__construct(['expr1' => $expr1, 'expr2' => $expr2, 'expr3' => $expr3], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + // Ternary with no then uses Elvis operator + if ($this->getNode('expr1') === $this->getNode('expr2')) { + $compiler + ->raw('((') + ->subcompile($this->getNode('expr1')) + ->raw(') ?: (') + ->subcompile($this->getNode('expr3')) + ->raw('))'); + } else { + $compiler + ->raw('((') + ->subcompile($this->getNode('expr1')) + ->raw(') ? (') + ->subcompile($this->getNode('expr2')) + ->raw(') : (') + ->subcompile($this->getNode('expr3')) + ->raw('))'); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConstantExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConstantExpression.php new file mode 100644 index 0000000..2a8909d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ConstantExpression.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +/** + * @final + */ +class ConstantExpression extends AbstractExpression +{ + public function __construct($value, int $lineno) + { + parent::__construct([], ['value' => $value], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->repr($this->getAttribute('value')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php new file mode 100644 index 0000000..7eb0ea7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php @@ -0,0 +1,52 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Filter; + +use Twig\Compiler; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\Test\DefinedTest; +use Twig\Node\Node; + +/** + * Returns the value or the default value when it is undefined or empty. + * + * {{ var.foo|default('foo item on var is not defined') }} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class DefaultFilter extends FilterExpression +{ + public function __construct(Node $node, ConstantExpression $filterName, Node $arguments, int $lineno, ?string $tag = null) + { + $default = new FilterExpression($node, new ConstantExpression('default', $node->getTemplateLine()), $arguments, $node->getTemplateLine()); + + if ('default' === $filterName->getAttribute('value') && ($node instanceof NameExpression || $node instanceof GetAttrExpression)) { + $test = new DefinedTest(clone $node, 'defined', new Node(), $node->getTemplateLine()); + $false = \count($arguments) ? $arguments->getNode('0') : new ConstantExpression('', $node->getTemplateLine()); + + $node = new ConditionalExpression($test, $default, $false, $node->getTemplateLine()); + } else { + $node = $default; + } + + parent::__construct($node, $filterName, $arguments, $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php new file mode 100644 index 0000000..5849423 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Filter; + +use Twig\Compiler; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Node; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +class RawFilter extends FilterExpression +{ + public function __construct(Node $node, ?ConstantExpression $filterName = null, ?Node $arguments = null, int $lineno = 0, ?string $tag = null) + { + if (null === $filterName) { + $filterName = new ConstantExpression('raw', $node->getTemplateLine()); + } + if (null === $arguments) { + $arguments = new Node(); + } + + parent::__construct($node, $filterName, $arguments, $lineno ?: $node->getTemplateLine(), $tag ?: $node->getNodeTag()); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FilterExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FilterExpression.php new file mode 100644 index 0000000..251870a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FilterExpression.php @@ -0,0 +1,50 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Node; + +class FilterExpression extends CallExpression +{ + public function __construct(Node $node, ConstantExpression $filterName, Node $arguments, int $lineno, ?string $tag = null) + { + parent::__construct(['node' => $node, 'filter' => $filterName, 'arguments' => $arguments], ['name' => $filterName->getAttribute('value'), 'type' => 'filter'], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getNode('filter')->getAttribute('value'); + if ($name !== $this->getAttribute('name')) { + trigger_deprecation('twig/twig', '3.11', 'Changing the value of a "filter" node in a NodeVisitor class is not supported anymore.'); + $this->setAttribute('name', $name); + } + if ('raw' === $name) { + trigger_deprecation('twig/twig', '3.11', 'Creating the "raw" filter via "FilterExpression" is deprecated; use "RawFilter" instead.'); + + $compiler->subcompile($this->getNode('node')); + + return; + } + $filter = $compiler->getEnvironment()->getFilter($name); + + $this->setAttribute('needs_charset', $filter->needsCharset()); + $this->setAttribute('needs_environment', $filter->needsEnvironment()); + $this->setAttribute('needs_context', $filter->needsContext()); + $this->setAttribute('arguments', $filter->getArguments()); + $this->setAttribute('callable', $filter->getCallable()); + $this->setAttribute('is_variadic', $filter->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FunctionExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FunctionExpression.php new file mode 100644 index 0000000..ef99c40 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/FunctionExpression.php @@ -0,0 +1,43 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Extension\CoreExtension; +use Twig\Node\Node; + +class FunctionExpression extends CallExpression +{ + public function __construct(string $name, Node $arguments, int $lineno) + { + parent::__construct(['arguments' => $arguments], ['name' => $name, 'type' => 'function', 'is_defined_test' => false], $lineno); + } + + public function compile(Compiler $compiler) + { + $name = $this->getAttribute('name'); + $function = $compiler->getEnvironment()->getFunction($name); + + $this->setAttribute('needs_charset', $function->needsCharset()); + $this->setAttribute('needs_environment', $function->needsEnvironment()); + $this->setAttribute('needs_context', $function->needsContext()); + $this->setAttribute('arguments', $function->getArguments()); + $callable = $function->getCallable(); + if ('constant' === $name && $this->getAttribute('is_defined_test')) { + $callable = [CoreExtension::class, 'constantIsDefined']; + } + $this->setAttribute('callable', $callable); + $this->setAttribute('is_variadic', $function->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php new file mode 100644 index 0000000..f54f2f0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php @@ -0,0 +1,110 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Extension\SandboxExtension; +use Twig\Template; + +class GetAttrExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $node, AbstractExpression $attribute, ?AbstractExpression $arguments, string $type, int $lineno) + { + $nodes = ['node' => $node, 'attribute' => $attribute]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'optimizable' => true], $lineno); + } + + public function compile(Compiler $compiler): void + { + $env = $compiler->getEnvironment(); + $arrayAccessSandbox = false; + + // optimize array calls + if ( + $this->getAttribute('optimizable') + && (!$env->isStrictVariables() || $this->getAttribute('ignore_strict_check')) + && !$this->getAttribute('is_defined_test') + && Template::ARRAY_CALL === $this->getAttribute('type') + ) { + $var = '$'.$compiler->getVarName(); + $compiler + ->raw('(('.$var.' = ') + ->subcompile($this->getNode('node')) + ->raw(') && is_array(') + ->raw($var); + + if (!$env->hasExtension(SandboxExtension::class)) { + $compiler + ->raw(') || ') + ->raw($var) + ->raw(' instanceof ArrayAccess ? (') + ->raw($var) + ->raw('[') + ->subcompile($this->getNode('attribute')) + ->raw('] ?? null) : null)') + ; + + return; + } + + $arrayAccessSandbox = true; + + $compiler + ->raw(') || ') + ->raw($var) + ->raw(' instanceof ArrayAccess && in_array(') + ->raw('get_class('.$var.')') + ->raw(', CoreExtension::ARRAY_LIKE_CLASSES, true) ? (') + ->raw($var) + ->raw('[') + ->subcompile($this->getNode('attribute')) + ->raw('] ?? null) : ') + ; + } + + $compiler->raw('CoreExtension::getAttribute($this->env, $this->source, '); + + if ($this->getAttribute('ignore_strict_check')) { + $this->getNode('node')->setAttribute('ignore_strict_check', true); + } + + $compiler + ->subcompile($this->getNode('node')) + ->raw(', ') + ->subcompile($this->getNode('attribute')) + ; + + if ($this->hasNode('arguments')) { + $compiler->raw(', ')->subcompile($this->getNode('arguments')); + } else { + $compiler->raw(', []'); + } + + $compiler->raw(', ') + ->repr($this->getAttribute('type')) + ->raw(', ')->repr($this->getAttribute('is_defined_test')) + ->raw(', ')->repr($this->getAttribute('ignore_strict_check')) + ->raw(', ')->repr($env->hasExtension(SandboxExtension::class)) + ->raw(', ')->repr($this->getNode('node')->getTemplateLine()) + ->raw(')') + ; + + if ($arrayAccessSandbox) { + $compiler->raw(')'); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/InlinePrint.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/InlinePrint.php new file mode 100644 index 0000000..0a3c2e4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/InlinePrint.php @@ -0,0 +1,34 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Node; + +/** + * @internal + */ +final class InlinePrint extends AbstractExpression +{ + public function __construct(Node $node, int $lineno) + { + parent::__construct(['node' => $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('yield ') + ->subcompile($this->getNode('node')) + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php new file mode 100644 index 0000000..01806f9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php @@ -0,0 +1,64 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class MethodCallExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $node, string $method, ArrayExpression $arguments, int $lineno) + { + parent::__construct(['node' => $node, 'arguments' => $arguments], ['method' => $method, 'safe' => false, 'is_defined_test' => false], $lineno); + + if ($node instanceof NameExpression) { + $node->setAttribute('always_defined', true); + } + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $compiler + ->raw('method_exists($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(')') + ; + + return; + } + + $compiler + ->raw('CoreExtension::callMacro($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(', [') + ; + $first = true; + /** @var ArrayExpression */ + $args = $this->getNode('arguments'); + foreach ($args->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler->subcompile($pair['value']); + } + $compiler + ->raw('], ') + ->repr($this->getTemplateLine()) + ->raw(', $context, $this->getSourceContext())'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NameExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NameExpression.php new file mode 100644 index 0000000..286aa5a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NameExpression.php @@ -0,0 +1,107 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class NameExpression extends AbstractExpression +{ + private $specialVars = [ + '_self' => '$this->getTemplateName()', + '_context' => '$context', + '_charset' => '$this->env->getCharset()', + ]; + + public function __construct(string $name, int $lineno) + { + parent::__construct([], ['name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false], $lineno); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getAttribute('name'); + + $compiler->addDebugInfo($this); + + if ($this->getAttribute('is_defined_test')) { + if (isset($this->specialVars[$name])) { + $compiler->repr(true); + } elseif (\PHP_VERSION_ID >= 70400) { + $compiler + ->raw('array_key_exists(') + ->string($name) + ->raw(', $context)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context))') + ; + } + } elseif (isset($this->specialVars[$name])) { + $compiler->raw($this->specialVars[$name]); + } elseif ($this->getAttribute('always_defined')) { + $compiler + ->raw('$context[') + ->string($name) + ->raw(']') + ; + } else { + if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) { + $compiler + ->raw('($context[') + ->string($name) + ->raw('] ?? null)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context) ? $context[') + ->string($name) + ->raw('] : (function () { throw new RuntimeError(\'Variable ') + ->string($name) + ->raw(' does not exist.\', ') + ->repr($this->lineno) + ->raw(', $this->source); })()') + ->raw(')') + ; + } + } + } + + /** + * @deprecated since Twig 3.11 (to be removed in 4.0) + */ + public function isSpecial() + { + trigger_deprecation('twig/twig', '3.11', 'The "%s()" method is deprecated and will be removed in Twig 4.0.', __METHOD__); + + return isset($this->specialVars[$this->getAttribute('name')]); + } + + /** + * @deprecated since Twig 3.11 (to be removed in 4.0) + */ + public function isSimple() + { + trigger_deprecation('twig/twig', '3.11', 'The "%s()" method is deprecated and will be removed in Twig 4.0.', __METHOD__); + + return !$this->isSpecial() && !$this->getAttribute('is_defined_test'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php new file mode 100644 index 0000000..a72bc4f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Expression\Binary\AndBinary; +use Twig\Node\Expression\Test\DefinedTest; +use Twig\Node\Expression\Test\NullTest; +use Twig\Node\Expression\Unary\NotUnary; +use Twig\Node\Node; + +class NullCoalesceExpression extends ConditionalExpression +{ + public function __construct(Node $left, Node $right, int $lineno) + { + $test = new DefinedTest(clone $left, 'defined', new Node(), $left->getTemplateLine()); + // for "block()", we don't need the null test as the return value is always a string + if (!$left instanceof BlockReferenceExpression) { + $test = new AndBinary( + $test, + new NotUnary(new NullTest($left, 'null', new Node(), $left->getTemplateLine()), $left->getTemplateLine()), + $left->getTemplateLine() + ); + } + + parent::__construct($test, $left, $right, $lineno); + } + + public function compile(Compiler $compiler): void + { + /* + * This optimizes only one case. PHP 7 also supports more complex expressions + * that can return null. So, for instance, if log is defined, log("foo") ?? "..." works, + * but log($a["foo"]) ?? "..." does not if $a["foo"] is not defined. More advanced + * cases might be implemented as an optimizer node visitor, but has not been done + * as benefits are probably not worth the added complexity. + */ + if ($this->getNode('expr2') instanceof NameExpression) { + $this->getNode('expr2')->setAttribute('always_defined', true); + $compiler + ->raw('((') + ->subcompile($this->getNode('expr2')) + ->raw(') ?? (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } else { + parent::compile($compiler); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ParentExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ParentExpression.php new file mode 100644 index 0000000..59d833a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/ParentExpression.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +/** + * Represents a parent node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class ParentExpression extends AbstractExpression +{ + public function __construct(string $name, int $lineno, ?string $tag = null) + { + parent::__construct([], ['output' => false, 'name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('output')) { + $compiler + ->addDebugInfo($this) + ->write('yield from $this->yieldParentBlock(') + ->string($this->getAttribute('name')) + ->raw(", \$context, \$blocks);\n") + ; + } else { + $compiler + ->raw('$this->renderParentBlock(') + ->string($this->getAttribute('name')) + ->raw(', $context, $blocks)') + ; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TempNameExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TempNameExpression.php new file mode 100644 index 0000000..004c704 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TempNameExpression.php @@ -0,0 +1,31 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class TempNameExpression extends AbstractExpression +{ + public function __construct(string $name, int $lineno) + { + parent::__construct([], ['name' => $name], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('$_') + ->raw($this->getAttribute('name')) + ->raw('_') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php new file mode 100644 index 0000000..867fd09 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php @@ -0,0 +1,49 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks if a variable is the exact same value as a constant. + * + * {% if post.status is constant('Post::PUBLISHED') %} + * the status attribute is exactly the same as Post::PUBLISHED + * {% endif %} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class ConstantTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === constant(') + ; + + if ($this->getNode('arguments')->hasNode('1')) { + $compiler + ->raw('get_class(') + ->subcompile($this->getNode('arguments')->getNode('1')) + ->raw(')."::".') + ; + } + + $compiler + ->subcompile($this->getNode('arguments')->getNode('0')) + ->raw('))') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php new file mode 100644 index 0000000..3953bbb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Error\SyntaxError; +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\BlockReferenceExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\MethodCallExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\TestExpression; +use Twig\Node\Node; + +/** + * Checks if a variable is defined in the current context. + * + * {# defined works with variable names and variable attributes #} + * {% if foo is defined %} + * {# ... #} + * {% endif %} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class DefinedTest extends TestExpression +{ + public function __construct(Node $node, string $name, ?Node $arguments, int $lineno) + { + if ($node instanceof NameExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof GetAttrExpression) { + $node->setAttribute('is_defined_test', true); + $this->changeIgnoreStrictCheck($node); + } elseif ($node instanceof BlockReferenceExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof FunctionExpression && 'constant' === $node->getAttribute('name')) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof ConstantExpression || $node instanceof ArrayExpression) { + $node = new ConstantExpression(true, $node->getTemplateLine()); + } elseif ($node instanceof MethodCallExpression) { + $node->setAttribute('is_defined_test', true); + } else { + throw new SyntaxError('The "defined" test only works with simple variables.', $lineno); + } + + parent::__construct($node, $name, $arguments, $lineno); + } + + private function changeIgnoreStrictCheck(GetAttrExpression $node) + { + $node->setAttribute('optimizable', false); + $node->setAttribute('ignore_strict_check', true); + + if ($node->getNode('node') instanceof GetAttrExpression) { + $this->changeIgnoreStrictCheck($node->getNode('node')); + } + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php new file mode 100644 index 0000000..90d58a4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks if a variable is divisible by a number. + * + * {% if loop.index is divisible by(3) %} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class DivisiblebyTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(0 == ') + ->subcompile($this->getNode('node')) + ->raw(' % ') + ->subcompile($this->getNode('arguments')->getNode('0')) + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php new file mode 100644 index 0000000..a0e3ed6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks if a number is even. + * + * {{ var is even }} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class EvenTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 0') + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/NullTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/NullTest.php new file mode 100644 index 0000000..45b54ae --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/NullTest.php @@ -0,0 +1,34 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks that a variable is null. + * + * {{ var is none }} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class NullTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(null === ') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/OddTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/OddTest.php new file mode 100644 index 0000000..d56c711 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/OddTest.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks if a number is odd. + * + * {{ var is odd }} + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class OddTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 != 0') + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php new file mode 100644 index 0000000..f1e24db --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php @@ -0,0 +1,34 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Test; + +use Twig\Compiler; +use Twig\Node\Expression\TestExpression; + +/** + * Checks if a variable is the same as another one (=== in PHP). + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class SameasTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === ') + ->subcompile($this->getNode('arguments')->getNode('0')) + ->raw(')') + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TestExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TestExpression.php new file mode 100644 index 0000000..29c5a52 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/TestExpression.php @@ -0,0 +1,39 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; +use Twig\Node\Node; + +class TestExpression extends CallExpression +{ + public function __construct(Node $node, string $name, ?Node $arguments, int $lineno) + { + $nodes = ['node' => $node]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['name' => $name, 'type' => 'test'], $lineno); + } + + public function compile(Compiler $compiler): void + { + $test = $compiler->getEnvironment()->getTest($this->getAttribute('name')); + + $this->setAttribute('arguments', $test->getArguments()); + $this->setAttribute('callable', $test->getCallable()); + $this->setAttribute('is_variadic', $test->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php new file mode 100644 index 0000000..e31e3f8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php @@ -0,0 +1,34 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Unary; + +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Node; + +abstract class AbstractUnary extends AbstractExpression +{ + public function __construct(Node $node, int $lineno) + { + parent::__construct(['node' => $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->raw(' '); + $this->operator($compiler); + $compiler->subcompile($this->getNode('node')); + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php new file mode 100644 index 0000000..dc2f235 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Unary; + +use Twig\Compiler; + +class NegUnary extends AbstractUnary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('-'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php new file mode 100644 index 0000000..55c11ba --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Unary; + +use Twig\Compiler; + +class NotUnary extends AbstractUnary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('!'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php new file mode 100644 index 0000000..4b0a062 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression\Unary; + +use Twig\Compiler; + +class PosUnary extends AbstractUnary +{ + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('+'); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/VariadicExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/VariadicExpression.php new file mode 100644 index 0000000..a1bdb48 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Expression/VariadicExpression.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node\Expression; + +use Twig\Compiler; + +class VariadicExpression extends ArrayExpression +{ + public function compile(Compiler $compiler): void + { + $compiler->raw('...'); + + parent::compile($compiler); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/FlushNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/FlushNode.php new file mode 100644 index 0000000..8a3dde6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/FlushNode.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a flush node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class FlushNode extends Node +{ + public function __construct(int $lineno, string $tag) + { + parent::__construct([], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("flush();\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForLoopNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForLoopNode.php new file mode 100644 index 0000000..503687c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForLoopNode.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Internal node used by the for node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class ForLoopNode extends Node +{ + public function __construct(int $lineno, ?string $tag = null) + { + parent::__construct([], ['with_loop' => false, 'ifexpr' => false, 'else' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('else')) { + $compiler->write("\$context['_iterated'] = true;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("++\$context['loop']['index0'];\n") + ->write("++\$context['loop']['index'];\n") + ->write("\$context['loop']['first'] = false;\n") + ->write("if (isset(\$context['loop']['length'])) {\n") + ->indent() + ->write("--\$context['loop']['revindex0'];\n") + ->write("--\$context['loop']['revindex'];\n") + ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") + ->outdent() + ->write("}\n") + ; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForNode.php new file mode 100644 index 0000000..5222cf9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ForNode.php @@ -0,0 +1,109 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\AssignNameExpression; + +/** + * Represents a for node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class ForNode extends Node +{ + private $loop; + + public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, ?Node $ifexpr, Node $body, ?Node $else, int $lineno, ?string $tag = null) + { + $body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]); + + $nodes = ['key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, ['with_loop' => true], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("\$context['_parent'] = \$context;\n") + ->write("\$context['_seq'] = CoreExtension::ensureTraversable(") + ->subcompile($this->getNode('seq')) + ->raw(");\n") + ; + + if ($this->hasNode('else')) { + $compiler->write("\$context['_iterated'] = false;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("\$context['loop'] = [\n") + ->write(" 'parent' => \$context['_parent'],\n") + ->write(" 'index0' => 0,\n") + ->write(" 'index' => 1,\n") + ->write(" 'first' => true,\n") + ->write("];\n") + ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof \Countable)) {\n") + ->indent() + ->write("\$length = count(\$context['_seq']);\n") + ->write("\$context['loop']['revindex0'] = \$length - 1;\n") + ->write("\$context['loop']['revindex'] = \$length;\n") + ->write("\$context['loop']['length'] = \$length;\n") + ->write("\$context['loop']['last'] = 1 === \$length;\n") + ->outdent() + ->write("}\n") + ; + } + + $this->loop->setAttribute('else', $this->hasNode('else')); + $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop')); + + $compiler + ->write("foreach (\$context['_seq'] as ") + ->subcompile($this->getNode('key_target')) + ->raw(' => ') + ->subcompile($this->getNode('value_target')) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n") + ; + + if ($this->hasNode('else')) { + $compiler + ->write("if (!\$context['_iterated']) {\n") + ->indent() + ->subcompile($this->getNode('else')) + ->outdent() + ->write("}\n") + ; + } + + $compiler->write("\$_parent = \$context['_parent'];\n"); + + // remove some "private" loop variables (needed for nested loops) + $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n"); + + // keep the values set in the inner context for variables defined in the outer context + $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n"); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IfNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IfNode.php new file mode 100644 index 0000000..1b88330 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IfNode.php @@ -0,0 +1,75 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents an if node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class IfNode extends Node +{ + public function __construct(Node $tests, ?Node $else, int $lineno, ?string $tag = null) + { + $nodes = ['tests' => $tests]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + for ($i = 0, $count = \count($this->getNode('tests')); $i < $count; $i += 2) { + if ($i > 0) { + $compiler + ->outdent() + ->write('} elseif (') + ; + } else { + $compiler + ->write('if (') + ; + } + + $compiler + ->subcompile($this->getNode('tests')->getNode((string) $i)) + ->raw(") {\n") + ->indent() + ; + // The node might not exists if the content is empty + if ($this->getNode('tests')->hasNode((string) ($i + 1))) { + $compiler->subcompile($this->getNode('tests')->getNode((string) ($i + 1))); + } + } + + if ($this->hasNode('else')) { + $compiler + ->outdent() + ->write("} else {\n") + ->indent() + ->subcompile($this->getNode('else')) + ; + } + + $compiler + ->outdent() + ->write("}\n"); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ImportNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ImportNode.php new file mode 100644 index 0000000..db47bfe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ImportNode.php @@ -0,0 +1,65 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\NameExpression; + +/** + * Represents an import node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class ImportNode extends Node +{ + public function __construct(AbstractExpression $expr, AbstractExpression $var, int $lineno, ?string $tag = null, bool $global = true) + { + parent::__construct(['expr' => $expr, 'var' => $var], ['global' => $global], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('$macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + + if ($this->getAttribute('global')) { + $compiler + ->raw('$this->macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + } + + if ($this->getNode('expr') instanceof NameExpression && '_self' === $this->getNode('expr')->getAttribute('name')) { + $compiler->raw('$this'); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')->unwrap()') + ; + } + + $compiler->raw(";\n"); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IncludeNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IncludeNode.php new file mode 100644 index 0000000..7073fa4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/IncludeNode.php @@ -0,0 +1,110 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; + +/** + * Represents an include node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class IncludeNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, ?AbstractExpression $variables, bool $only, bool $ignoreMissing, int $lineno, ?string $tag = null) + { + $nodes = ['expr' => $expr]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => $only, 'ignore_missing' => $ignoreMissing], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if ($this->getAttribute('ignore_missing')) { + $template = $compiler->getVarName(); + + $compiler + ->write(\sprintf("$%s = null;\n", $template)) + ->write("try {\n") + ->indent() + ->write(\sprintf('$%s = ', $template)) + ; + + $this->addGetTemplate($compiler); + + $compiler + ->raw(";\n") + ->outdent() + ->write("} catch (LoaderError \$e) {\n") + ->indent() + ->write("// ignore missing template\n") + ->outdent() + ->write("}\n") + ->write(\sprintf("if ($%s) {\n", $template)) + ->indent() + ->write(\sprintf('yield from $%s->unwrap()->yield(', $template)) + ; + + $this->addTemplateArguments($compiler); + $compiler + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } else { + $compiler->write('yield from '); + $this->addGetTemplate($compiler); + $compiler->raw('->unwrap()->yield('); + $this->addTemplateArguments($compiler); + $compiler->raw(");\n"); + } + } + + protected function addGetTemplate(Compiler $compiler) + { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + protected function addTemplateArguments(Compiler $compiler) + { + if (!$this->hasNode('variables')) { + $compiler->raw(false === $this->getAttribute('only') ? '$context' : '[]'); + } elseif (false === $this->getAttribute('only')) { + $compiler + ->raw('CoreExtension::merge($context, ') + ->subcompile($this->getNode('variables')) + ->raw(')') + ; + } else { + $compiler->raw('CoreExtension::toArray('); + $compiler->subcompile($this->getNode('variables')); + $compiler->raw(')'); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/MacroNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/MacroNode.php new file mode 100644 index 0000000..a6048de --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/MacroNode.php @@ -0,0 +1,99 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Error\SyntaxError; + +/** + * Represents a macro node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class MacroNode extends Node +{ + public const VARARGS_NAME = 'varargs'; + + public function __construct(string $name, Node $body, Node $arguments, int $lineno, ?string $tag = null) + { + foreach ($arguments as $argumentName => $argument) { + if (self::VARARGS_NAME === $argumentName) { + throw new SyntaxError(\sprintf('The argument "%s" in macro "%s" cannot be defined because the variable "%s" is reserved for arbitrary arguments.', self::VARARGS_NAME, $name, self::VARARGS_NAME), $argument->getTemplateLine(), $argument->getSourceContext()); + } + } + + parent::__construct(['body' => $body, 'arguments' => $arguments], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(\sprintf('public function macro_%s(', $this->getAttribute('name'))) + ; + + $count = \count($this->getNode('arguments')); + $pos = 0; + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->raw('$__'.$name.'__ = ') + ->subcompile($default) + ; + + if (++$pos < $count) { + $compiler->raw(', '); + } + } + + if ($count) { + $compiler->raw(', '); + } + + $compiler + ->raw('...$__varargs__') + ->raw(")\n") + ->write("{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->write("\$context = \$this->env->mergeGlobals([\n") + ->indent() + ; + + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->write('') + ->string($name) + ->raw(' => $__'.$name.'__') + ->raw(",\n") + ; + } + + $node = new CaptureNode($this->getNode('body'), $this->getNode('body')->lineno, $this->getNode('body')->tag); + + $compiler + ->write('') + ->string(self::VARARGS_NAME) + ->raw(' => ') + ->raw("\$__varargs__,\n") + ->outdent() + ->write("]);\n\n") + ->write("\$blocks = [];\n\n") + ->write('return ') + ->subcompile($node) + ->raw("\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ModuleNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ModuleNode.php new file mode 100644 index 0000000..fb85cd8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/ModuleNode.php @@ -0,0 +1,500 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Source; + +/** + * Represents a module node. + * + * Consider this class as being final. If you need to customize the behavior of + * the generated class, consider adding nodes to the following nodes: display_start, + * display_end, constructor_start, constructor_end, and class_end. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +final class ModuleNode extends Node +{ + public function __construct(Node $body, ?AbstractExpression $parent, Node $blocks, Node $macros, Node $traits, $embeddedTemplates, Source $source) + { + $nodes = [ + 'body' => $body, + 'blocks' => $blocks, + 'macros' => $macros, + 'traits' => $traits, + 'display_start' => new Node(), + 'display_end' => new Node(), + 'constructor_start' => new Node(), + 'constructor_end' => new Node(), + 'class_end' => new Node(), + ]; + if (null !== $parent) { + $nodes['parent'] = $parent; + } + + // embedded templates are set as attributes so that they are only visited once by the visitors + parent::__construct($nodes, [ + 'index' => null, + 'embedded_templates' => $embeddedTemplates, + ], 1); + + // populate the template name of all node children + $this->setSourceContext($source); + } + + public function setIndex($index) + { + $this->setAttribute('index', $index); + } + + public function compile(Compiler $compiler): void + { + $this->compileTemplate($compiler); + + foreach ($this->getAttribute('embedded_templates') as $template) { + $compiler->subcompile($template); + } + } + + protected function compileTemplate(Compiler $compiler) + { + if (!$this->getAttribute('index')) { + $compiler->write('<?php'); + } + + $this->compileClassHeader($compiler); + + $this->compileConstructor($compiler); + + $this->compileGetParent($compiler); + + $this->compileDisplay($compiler); + + $compiler->subcompile($this->getNode('blocks')); + + $this->compileMacros($compiler); + + $this->compileGetTemplateName($compiler); + + $this->compileIsTraitable($compiler); + + $this->compileDebugInfo($compiler); + + $this->compileGetSourceContext($compiler); + + $this->compileClassFooter($compiler); + } + + protected function compileGetParent(Compiler $compiler) + { + if (!$this->hasNode('parent')) { + return; + } + $parent = $this->getNode('parent'); + + $compiler + ->write("protected function doGetParent(array \$context)\n", "{\n") + ->indent() + ->addDebugInfo($parent) + ->write('return ') + ; + + if ($parent instanceof ConstantExpression) { + $compiler->subcompile($parent); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(')') + ; + } + + $compiler + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassHeader(Compiler $compiler) + { + $compiler + ->write("\n\n") + ; + if (!$this->getAttribute('index')) { + $compiler + ->write("use Twig\Environment;\n") + ->write("use Twig\Error\LoaderError;\n") + ->write("use Twig\Error\RuntimeError;\n") + ->write("use Twig\Extension\CoreExtension;\n") + ->write("use Twig\Extension\SandboxExtension;\n") + ->write("use Twig\Markup;\n") + ->write("use Twig\Sandbox\SecurityError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedTagError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFilterError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFunctionError;\n") + ->write("use Twig\Source;\n") + ->write("use Twig\Template;\n\n") + ; + } + $compiler + // if the template name contains */, add a blank to avoid a PHP parse error + ->write('/* '.str_replace('*/', '* /', $this->getSourceContext()->getName())." */\n") + ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getSourceContext()->getName(), $this->getAttribute('index'))) + ->raw(" extends Template\n") + ->write("{\n") + ->indent() + ->write("private \$source;\n") + ->write("private \$macros = [];\n\n") + ; + } + + protected function compileConstructor(Compiler $compiler) + { + $compiler + ->write("public function __construct(Environment \$env)\n", "{\n") + ->indent() + ->subcompile($this->getNode('constructor_start')) + ->write("parent::__construct(\$env);\n\n") + ->write("\$this->source = \$this->getSourceContext();\n\n") + ; + + // parent + if (!$this->hasNode('parent')) { + $compiler->write("\$this->parent = false;\n\n"); + } + + $countTraits = \count($this->getNode('traits')); + if ($countTraits) { + // traits + foreach ($this->getNode('traits') as $i => $trait) { + $node = $trait->getNode('template'); + + $compiler + ->addDebugInfo($node) + ->write(\sprintf('$_trait_%s = $this->loadTemplate(', $i)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ->write(\sprintf("if (!\$_trait_%s->unwrap()->isTraitable()) {\n", $i)) + ->indent() + ->write("throw new RuntimeError('Template \"'.") + ->subcompile($trait->getNode('template')) + ->raw(".'\" cannot be used as a trait.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n") + ->write(\sprintf("\$_trait_%s_blocks = \$_trait_%s->unwrap()->getBlocks();\n\n", $i, $i)) + ; + + foreach ($trait->getNode('targets') as $key => $value) { + $compiler + ->write(\sprintf('if (!isset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("])) {\n") + ->indent() + ->write("throw new RuntimeError('Block ") + ->string($key) + ->raw(' is not defined in trait ') + ->subcompile($trait->getNode('template')) + ->raw(".', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n\n") + + ->write(\sprintf('$_trait_%s_blocks[', $i)) + ->subcompile($value) + ->raw(\sprintf('] = $_trait_%s_blocks[', $i)) + ->string($key) + ->raw(\sprintf(']; unset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("]);\n\n") + ; + } + } + + if ($countTraits > 1) { + $compiler + ->write("\$this->traits = array_merge(\n") + ->indent() + ; + + for ($i = 0; $i < $countTraits; ++$i) { + $compiler + ->write(\sprintf('$_trait_%s_blocks'.($i == $countTraits - 1 ? '' : ',')."\n", $i)) + ; + } + + $compiler + ->outdent() + ->write(");\n\n") + ; + } else { + $compiler + ->write("\$this->traits = \$_trait_0_blocks;\n\n") + ; + } + + $compiler + ->write("\$this->blocks = array_merge(\n") + ->indent() + ->write("\$this->traits,\n") + ->write("[\n") + ; + } else { + $compiler + ->write("\$this->blocks = [\n") + ; + } + + // blocks + $compiler + ->indent() + ; + + foreach ($this->getNode('blocks') as $name => $node) { + $compiler + ->write(\sprintf("'%s' => [\$this, 'block_%s'],\n", $name, $name)) + ; + } + + if ($countTraits) { + $compiler + ->outdent() + ->write("]\n") + ->outdent() + ->write(");\n") + ; + } else { + $compiler + ->outdent() + ->write("];\n") + ; + } + + $compiler + ->subcompile($this->getNode('constructor_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDisplay(Compiler $compiler) + { + $compiler + ->write("protected function doDisplay(array \$context, array \$blocks = [])\n", "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->subcompile($this->getNode('display_start')) + ->subcompile($this->getNode('body')) + ; + + if ($this->hasNode('parent')) { + $parent = $this->getNode('parent'); + + $compiler->addDebugInfo($parent); + if ($parent instanceof ConstantExpression) { + $compiler + ->write('$this->parent = $this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(");\n") + ; + } + $compiler->write('yield from '); + + if ($parent instanceof ConstantExpression) { + $compiler->raw('$this->parent'); + } else { + $compiler->raw('$this->getParent($context)'); + } + $compiler->raw("->unwrap()->yield(\$context, array_merge(\$this->blocks, \$blocks));\n"); + } + + $compiler->subcompile($this->getNode('display_end')); + + if (!$this->hasNode('parent')) { + $compiler->write("return; yield '';\n"); // ensure at least one yield call even for templates with no output + } + + $compiler + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassFooter(Compiler $compiler) + { + $compiler + ->subcompile($this->getNode('class_end')) + ->outdent() + ->write("}\n") + ; + } + + protected function compileMacros(Compiler $compiler) + { + $compiler->subcompile($this->getNode('macros')); + } + + protected function compileGetTemplateName(Compiler $compiler) + { + $compiler + ->write("/**\n") + ->write(" * @codeCoverageIgnore\n") + ->write(" */\n") + ->write("public function getTemplateName()\n", "{\n") + ->indent() + ->write('return ') + ->repr($this->getSourceContext()->getName()) + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileIsTraitable(Compiler $compiler) + { + // A template can be used as a trait if: + // * it has no parent + // * it has no macros + // * it has no body + // + // Put another way, a template can be used as a trait if it + // only contains blocks and use statements. + $traitable = !$this->hasNode('parent') && 0 === \count($this->getNode('macros')); + if ($traitable) { + if ($this->getNode('body') instanceof BodyNode) { + $nodes = $this->getNode('body')->getNode('0'); + } else { + $nodes = $this->getNode('body'); + } + + if (!\count($nodes)) { + $nodes = new Node([$nodes]); + } + + foreach ($nodes as $node) { + if (!\count($node)) { + continue; + } + + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if ($node instanceof BlockReferenceNode) { + continue; + } + + $traitable = false; + break; + } + } + + if ($traitable) { + return; + } + + $compiler + ->write("/**\n") + ->write(" * @codeCoverageIgnore\n") + ->write(" */\n") + ->write("public function isTraitable()\n", "{\n") + ->indent() + ->write("return false;\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDebugInfo(Compiler $compiler) + { + $compiler + ->write("/**\n") + ->write(" * @codeCoverageIgnore\n") + ->write(" */\n") + ->write("public function getDebugInfo()\n", "{\n") + ->indent() + ->write(\sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true)))) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileGetSourceContext(Compiler $compiler) + { + $compiler + ->write("public function getSourceContext()\n", "{\n") + ->indent() + ->write('return new Source(') + ->string($compiler->getEnvironment()->isDebug() ? $this->getSourceContext()->getCode() : '') + ->raw(', ') + ->string($this->getSourceContext()->getName()) + ->raw(', ') + ->string($this->getSourceContext()->getPath()) + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } + + protected function compileLoadTemplate(Compiler $compiler, $node, $var) + { + if ($node instanceof ConstantExpression) { + $compiler + ->write(\sprintf('%s = $this->loadTemplate(', $var)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ; + } else { + throw new \LogicException('Trait templates can only be constant nodes.'); + } + } + + private function hasNodeOutputNodes(Node $node): bool + { + if ($node instanceof NodeOutputInterface) { + return true; + } + + foreach ($node as $child) { + if ($this->hasNodeOutputNodes($child)) { + return true; + } + } + + return false; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NameDeprecation.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NameDeprecation.php new file mode 100644 index 0000000..63ab285 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NameDeprecation.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +/** + * Represents a deprecation for a named node or attribute on a Node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class NameDeprecation +{ + private $package; + private $version; + private $newName; + + public function __construct(string $package = '', string $version = '', string $newName = '') + { + $this->package = $package; + $this->version = $version; + $this->newName = $newName; + } + + public function getPackage(): string + { + return $this->package; + } + + public function getVersion(): string + { + return $this->version; + } + + public function getNewName(): string + { + return $this->newName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Node.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Node.php new file mode 100644 index 0000000..5ef661f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/Node.php @@ -0,0 +1,237 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Source; + +/** + * Represents a node in the AST. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class Node implements \Countable, \IteratorAggregate +{ + protected $nodes; + protected $attributes; + protected $lineno; + protected $tag; + + private $sourceContext; + /** @var array<string, NameDeprecation> */ + private $nodeNameDeprecations = []; + /** @var array<string, NameDeprecation> */ + private $attributeNameDeprecations = []; + + /** + * @param array $nodes An array of named nodes + * @param array $attributes An array of attributes (should not be nodes) + * @param int $lineno The line number + * @param string $tag The tag name associated with the Node + */ + public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0, ?string $tag = null) + { + foreach ($nodes as $name => $node) { + if (!$node instanceof self) { + throw new \InvalidArgumentException(\sprintf('Using "%s" for the value of node "%s" of "%s" is not supported. You must pass a \Twig\Node\Node instance.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class)); + } + } + $this->nodes = $nodes; + $this->attributes = $attributes; + $this->lineno = $lineno; + $this->tag = $tag; + } + + public function __toString() + { + $attributes = []; + foreach ($this->attributes as $name => $value) { + $attributes[] = \sprintf('%s: %s', $name, \is_callable($value) ? '\Closure' : str_replace("\n", '', var_export($value, true))); + } + + $repr = [static::class.'('.implode(', ', $attributes)]; + + if (\count($this->nodes)) { + foreach ($this->nodes as $name => $node) { + $len = \strlen($name) + 4; + $noderepr = []; + foreach (explode("\n", (string) $node) as $line) { + $noderepr[] = str_repeat(' ', $len).$line; + } + + $repr[] = \sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); + } + + $repr[] = ')'; + } else { + $repr[0] .= ')'; + } + + return implode("\n", $repr); + } + + /** + * @return void + */ + public function compile(Compiler $compiler) + { + foreach ($this->nodes as $node) { + $compiler->subcompile($node); + } + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function getNodeTag(): ?string + { + return $this->tag; + } + + public function hasAttribute(string $name): bool + { + return \array_key_exists($name, $this->attributes); + } + + public function getAttribute(string $name) + { + if (!\array_key_exists($name, $this->attributes)) { + throw new \LogicException(\sprintf('Attribute "%s" does not exist for Node "%s".', $name, static::class)); + } + + $triggerDeprecation = \func_num_args() > 1 ? func_get_arg(1) : true; + if ($triggerDeprecation && isset($this->attributeNameDeprecations[$name])) { + $dep = $this->attributeNameDeprecations[$name]; + if ($dep->getNewName()) { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Getting attribute "%s" on a "%s" class is deprecated, get the "%s" attribute instead.', $name, static::class, $dep->getNewName()); + } else { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Getting attribute "%s" on a "%s" class is deprecated.', $name, static::class); + } + } + + return $this->attributes[$name]; + } + + public function setAttribute(string $name, $value): void + { + $triggerDeprecation = \func_num_args() > 2 ? func_get_arg(2) : true; + if ($triggerDeprecation && isset($this->attributeNameDeprecations[$name])) { + $dep = $this->attributeNameDeprecations[$name]; + if ($dep->getNewName()) { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Setting attribute "%s" on a "%s" class is deprecated, set the "%s" attribute instead.', $name, static::class, $dep->getNewName()); + } else { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Setting attribute "%s" on a "%s" class is deprecated.', $name, static::class); + } + } + + $this->attributes[$name] = $value; + } + + public function deprecateAttribute(string $name, NameDeprecation $dep): void + { + $this->attributeNameDeprecations[$name] = $dep; + } + + public function removeAttribute(string $name): void + { + unset($this->attributes[$name]); + } + + public function hasNode(string $name): bool + { + return isset($this->nodes[$name]); + } + + public function getNode(string $name): self + { + if (!isset($this->nodes[$name])) { + throw new \LogicException(\sprintf('Node "%s" does not exist for Node "%s".', $name, static::class)); + } + + $triggerDeprecation = \func_num_args() > 1 ? func_get_arg(1) : true; + if ($triggerDeprecation && isset($this->nodeNameDeprecations[$name])) { + $dep = $this->nodeNameDeprecations[$name]; + if ($dep->getNewName()) { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Getting node "%s" on a "%s" class is deprecated, get the "%s" node instead.', $name, static::class, $dep->getNewName()); + } else { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Getting node "%s" on a "%s" class is deprecated.', $name, static::class); + } + } + + return $this->nodes[$name]; + } + + public function setNode(string $name, self $node): void + { + $triggerDeprecation = \func_num_args() > 2 ? func_get_arg(2) : true; + if ($triggerDeprecation && isset($this->nodeNameDeprecations[$name])) { + $dep = $this->nodeNameDeprecations[$name]; + if ($dep->getNewName()) { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Setting node "%s" on a "%s" class is deprecated, set the "%s" node instead.', $name, static::class, $dep->getNewName()); + } else { + trigger_deprecation($dep->getPackage(), $dep->getVersion(), 'Setting node "%s" on a "%s" class is deprecated.', $name, static::class); + } + } + + if (null !== $this->sourceContext) { + $node->setSourceContext($this->sourceContext); + } + $this->nodes[$name] = $node; + } + + public function removeNode(string $name): void + { + unset($this->nodes[$name]); + } + + public function deprecateNode(string $name, NameDeprecation $dep): void + { + $this->nodeNameDeprecations[$name] = $dep; + } + + /** + * @return int + */ + #[\ReturnTypeWillChange] + public function count() + { + return \count($this->nodes); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->nodes); + } + + public function getTemplateName(): ?string + { + return $this->sourceContext ? $this->sourceContext->getName() : null; + } + + public function setSourceContext(Source $source): void + { + $this->sourceContext = $source; + foreach ($this->nodes as $node) { + $node->setSourceContext($source); + } + } + + public function getSourceContext(): ?Source + { + return $this->sourceContext; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeCaptureInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeCaptureInterface.php new file mode 100644 index 0000000..9fb6a0c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeCaptureInterface.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +/** + * Represents a node that captures any nested displayable nodes. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface NodeCaptureInterface +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeOutputInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeOutputInterface.php new file mode 100644 index 0000000..5e35b40 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/NodeOutputInterface.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +/** + * Represents a displayable node in the AST. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface NodeOutputInterface +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/PrintNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/PrintNode.php new file mode 100644 index 0000000..da442d8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/PrintNode.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\AbstractExpression; + +/** + * Represents a node that outputs an expression. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class PrintNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, int $lineno, ?string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + /** @var AbstractExpression */ + $expr = $this->getNode('expr'); + + $compiler + ->addDebugInfo($this) + ->write($expr->isGenerator() ? 'yield from ' : 'yield ') + ->subcompile($expr) + ->raw(";\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SandboxNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SandboxNode.php new file mode 100644 index 0000000..80aecbd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SandboxNode.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a sandbox node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class SandboxNode extends Node +{ + public function __construct(Node $body, int $lineno, ?string $tag = null) + { + parent::__construct(['body' => $body], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("if (!\$alreadySandboxed = \$this->sandbox->isSandboxed()) {\n") + ->indent() + ->write("\$this->sandbox->enableSandbox();\n") + ->outdent() + ->write("}\n") + ->write("try {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("} finally {\n") + ->indent() + ->write("if (!\$alreadySandboxed) {\n") + ->indent() + ->write("\$this->sandbox->disableSandbox();\n") + ->outdent() + ->write("}\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SetNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SetNode.php new file mode 100644 index 0000000..0900f15 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/SetNode.php @@ -0,0 +1,96 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Expression\ConstantExpression; + +/** + * Represents a set node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class SetNode extends Node implements NodeCaptureInterface +{ + public function __construct(bool $capture, Node $names, Node $values, int $lineno, ?string $tag = null) + { + /* + * Optimizes the node when capture is used for a large block of text. + * + * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig\Markup("foo"); + */ + $safe = false; + if ($capture) { + $safe = true; + if ($values instanceof TextNode) { + $values = new ConstantExpression($values->getAttribute('data'), $values->getTemplateLine()); + $capture = false; + } else { + $values = new CaptureNode($values, $values->getTemplateLine()); + } + } + + parent::__construct(['names' => $names, 'values' => $values], ['capture' => $capture, 'safe' => $safe], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if (\count($this->getNode('names')) > 1) { + $compiler->write('['); + foreach ($this->getNode('names') as $idx => $node) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($node); + } + $compiler->raw(']'); + } else { + $compiler->subcompile($this->getNode('names'), false); + } + $compiler->raw(' = '); + + if ($this->getAttribute('capture')) { + $compiler->subcompile($this->getNode('values')); + } else { + if (\count($this->getNode('names')) > 1) { + $compiler->write('['); + foreach ($this->getNode('values') as $idx => $value) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($value); + } + $compiler->raw(']'); + } else { + if ($this->getAttribute('safe')) { + $compiler + ->raw("('' === \$tmp = ") + ->subcompile($this->getNode('values')) + ->raw(") ? '' : new Markup(\$tmp, \$this->env->getCharset())") + ; + } else { + $compiler->subcompile($this->getNode('values')); + } + } + + $compiler->raw(';'); + } + + $compiler->raw("\n"); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/TextNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/TextNode.php new file mode 100644 index 0000000..fae65fb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/TextNode.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a text node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class TextNode extends Node implements NodeOutputInterface +{ + public function __construct(string $data, int $lineno) + { + parent::__construct([], ['data' => $data], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $compiler + ->write('yield ') + ->string($this->getAttribute('data')) + ->raw(";\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/WithNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/WithNode.php new file mode 100644 index 0000000..a7b7e70 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Node/WithNode.php @@ -0,0 +1,72 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; + +/** + * Represents a nested "with" scope. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class WithNode extends Node +{ + public function __construct(Node $body, ?Node $variables, bool $only, int $lineno, ?string $tag = null) + { + $nodes = ['body' => $body]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => $only], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $parentContextName = $compiler->getVarName(); + + $compiler->write(\sprintf("\$%s = \$context;\n", $parentContextName)); + + if ($this->hasNode('variables')) { + $node = $this->getNode('variables'); + $varsName = $compiler->getVarName(); + $compiler + ->write(\sprintf('$%s = ', $varsName)) + ->subcompile($node) + ->raw(";\n") + ->write(\sprintf("if (!is_iterable(\$%s)) {\n", $varsName)) + ->indent() + ->write("throw new RuntimeError('Variables passed to the \"with\" tag must be a mapping.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->getSourceContext());\n") + ->outdent() + ->write("}\n") + ->write(\sprintf("\$%s = CoreExtension::toArray(\$%s);\n", $varsName, $varsName)) + ; + + if ($this->getAttribute('only')) { + $compiler->write("\$context = [];\n"); + } + + $compiler->write(\sprintf("\$context = \$this->env->mergeGlobals(array_merge(\$context, \$%s));\n", $varsName)); + } + + $compiler + ->subcompile($this->getNode('body')) + ->write(\sprintf("\$context = \$%s;\n", $parentContextName)) + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeTraverser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeTraverser.php new file mode 100644 index 0000000..47a2d5c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeTraverser.php @@ -0,0 +1,76 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Node\Node; +use Twig\NodeVisitor\NodeVisitorInterface; + +/** + * A node traverser. + * + * It visits all nodes and their children and calls the given visitor for each. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class NodeTraverser +{ + private $env; + private $visitors = []; + + /** + * @param NodeVisitorInterface[] $visitors + */ + public function __construct(Environment $env, array $visitors = []) + { + $this->env = $env; + foreach ($visitors as $visitor) { + $this->addVisitor($visitor); + } + } + + public function addVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[$visitor->getPriority()][] = $visitor; + } + + /** + * Traverses a node and calls the registered visitors. + */ + public function traverse(Node $node): Node + { + ksort($this->visitors); + foreach ($this->visitors as $visitors) { + foreach ($visitors as $visitor) { + $node = $this->traverseForVisitor($visitor, $node); + } + } + + return $node; + } + + private function traverseForVisitor(NodeVisitorInterface $visitor, Node $node): ?Node + { + $node = $visitor->enterNode($node, $this->env); + + foreach ($node as $k => $n) { + if (null !== $m = $this->traverseForVisitor($visitor, $n)) { + if ($m !== $n) { + $node->setNode($k, $m); + } + } else { + $node->removeNode($k); + } + } + + return $visitor->leaveNode($node, $this->env); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php new file mode 100644 index 0000000..5de35fd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php @@ -0,0 +1,49 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\Node; + +/** + * Used to make node visitors compatible with Twig 1.x and 2.x. + * + * @author Fabien Potencier <fabien@symfony.com> + * + * @deprecated since 3.9 (to be removed in 4.0) + */ +abstract class AbstractNodeVisitor implements NodeVisitorInterface +{ + final public function enterNode(Node $node, Environment $env): Node + { + return $this->doEnterNode($node, $env); + } + + final public function leaveNode(Node $node, Environment $env): ?Node + { + return $this->doLeaveNode($node, $env); + } + + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + abstract protected function doEnterNode(Node $node, Environment $env); + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + abstract protected function doLeaveNode(Node $node, Environment $env); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php new file mode 100644 index 0000000..91e2ea8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php @@ -0,0 +1,204 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Extension\EscaperExtension; +use Twig\Node\AutoEscapeNode; +use Twig\Node\BlockNode; +use Twig\Node\BlockReferenceNode; +use Twig\Node\DoNode; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Expression\InlinePrint; +use Twig\Node\ImportNode; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\NodeTraverser; + +/** + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class EscaperNodeVisitor implements NodeVisitorInterface +{ + private $statusStack = []; + private $blocks = []; + private $safeAnalysis; + private $traverser; + private $defaultStrategy = false; + private $safeVars = []; + + public function __construct() + { + $this->safeAnalysis = new SafeAnalysisNodeVisitor(); + } + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + if ($env->hasExtension(EscaperExtension::class) && $defaultStrategy = $env->getExtension(EscaperExtension::class)->getDefaultStrategy($node->getTemplateName())) { + $this->defaultStrategy = $defaultStrategy; + } + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof AutoEscapeNode) { + $this->statusStack[] = $node->getAttribute('value'); + } elseif ($node instanceof BlockNode) { + $this->statusStack[] = $this->blocks[$node->getAttribute('name')] ?? $this->needEscaping(); + } elseif ($node instanceof ImportNode) { + $this->safeVars[] = $node->getNode('var')->getAttribute('name'); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->defaultStrategy = false; + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof FilterExpression) { + return $this->preEscapeFilterNode($node, $env); + } elseif ($node instanceof PrintNode && false !== $type = $this->needEscaping()) { + $expression = $node->getNode('expr'); + if ($expression instanceof ConditionalExpression && $this->shouldUnwrapConditional($expression, $env, $type)) { + return new DoNode($this->unwrapConditional($expression, $env, $type), $expression->getTemplateLine()); + } + + return $this->escapePrintNode($node, $env, $type); + } + + if ($node instanceof AutoEscapeNode || $node instanceof BlockNode) { + array_pop($this->statusStack); + } elseif ($node instanceof BlockReferenceNode) { + $this->blocks[$node->getAttribute('name')] = $this->needEscaping(); + } + + return $node; + } + + private function shouldUnwrapConditional(ConditionalExpression $expression, Environment $env, string $type): bool + { + $expr2Safe = $this->isSafeFor($type, $expression->getNode('expr2'), $env); + $expr3Safe = $this->isSafeFor($type, $expression->getNode('expr3'), $env); + + return $expr2Safe !== $expr3Safe; + } + + private function unwrapConditional(ConditionalExpression $expression, Environment $env, string $type): ConditionalExpression + { + // convert "echo a ? b : c" to "a ? echo b : echo c" recursively + $expr2 = $expression->getNode('expr2'); + if ($expr2 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr2, $env, $type)) { + $expr2 = $this->unwrapConditional($expr2, $env, $type); + } else { + $expr2 = $this->escapeInlinePrintNode(new InlinePrint($expr2, $expr2->getTemplateLine()), $env, $type); + } + $expr3 = $expression->getNode('expr3'); + if ($expr3 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr3, $env, $type)) { + $expr3 = $this->unwrapConditional($expr3, $env, $type); + } else { + $expr3 = $this->escapeInlinePrintNode(new InlinePrint($expr3, $expr3->getTemplateLine()), $env, $type); + } + + return new ConditionalExpression($expression->getNode('expr1'), $expr2, $expr3, $expression->getTemplateLine()); + } + + private function escapeInlinePrintNode(InlinePrint $node, Environment $env, string $type): Node + { + $expression = $node->getNode('node'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + return new InlinePrint($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function escapePrintNode(PrintNode $node, Environment $env, string $type): Node + { + $expression = $node->getNode('expr'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + $class = \get_class($node); + + return new $class($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function preEscapeFilterNode(FilterExpression $filter, Environment $env): FilterExpression + { + $name = $filter->getNode('filter')->getAttribute('value'); + + $type = $env->getFilter($name)->getPreEscape(); + if (null === $type) { + return $filter; + } + + $node = $filter->getNode('node'); + if ($this->isSafeFor($type, $node, $env)) { + return $filter; + } + + $filter->setNode('node', $this->getEscaperFilter($type, $node)); + + return $filter; + } + + private function isSafeFor(string $type, Node $expression, Environment $env): bool + { + $safe = $this->safeAnalysis->getSafe($expression); + + if (null === $safe) { + if (null === $this->traverser) { + $this->traverser = new NodeTraverser($env, [$this->safeAnalysis]); + } + + $this->safeAnalysis->setSafeVars($this->safeVars); + + $this->traverser->traverse($expression); + $safe = $this->safeAnalysis->getSafe($expression); + } + + return \in_array($type, $safe) || \in_array('all', $safe); + } + + private function needEscaping() + { + if (\count($this->statusStack)) { + return $this->statusStack[\count($this->statusStack) - 1]; + } + + return $this->defaultStrategy ?: false; + } + + private function getEscaperFilter(string $type, Node $node): FilterExpression + { + $line = $node->getTemplateLine(); + $name = new ConstantExpression('escape', $line); + $args = new Node([new ConstantExpression($type, $line), new ConstantExpression(null, $line), new ConstantExpression(true, $line)]); + + return new FilterExpression($node, $name, $args, $line); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php new file mode 100644 index 0000000..d6a7781 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\Expression\AssignNameExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\MethodCallExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\ImportNode; +use Twig\Node\ModuleNode; +use Twig\Node\Node; + +/** + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class MacroAutoImportNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + private $hasMacroCalls = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->hasMacroCalls = false; + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + if ($this->hasMacroCalls) { + $node->getNode('constructor_end')->setNode('_auto_macro_import', new ImportNode(new NameExpression('_self', 0), new AssignNameExpression('_self', 0), 0, 'import', true)); + } + } elseif ($this->inAModule) { + if ( + $node instanceof GetAttrExpression + && $node->getNode('node') instanceof NameExpression + && '_self' === $node->getNode('node')->getAttribute('name') + && $node->getNode('attribute') instanceof ConstantExpression + ) { + $this->hasMacroCalls = true; + + $name = $node->getNode('attribute')->getAttribute('value'); + $node = new MethodCallExpression($node->getNode('node'), 'macro_'.$name, $node->getNode('arguments'), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + } + + return $node; + } + + public function getPriority(): int + { + // we must be ran before auto-escaping + return -10; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php new file mode 100644 index 0000000..59e836d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\Node; + +/** + * Interface for node visitor classes. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface NodeVisitorInterface +{ + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + public function enterNode(Node $node, Environment $env): Node; + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + public function leaveNode(Node $node, Environment $env): ?Node; + + /** + * Returns the priority for this visitor. + * + * Priority should be between -10 and 10 (0 is the default). + * + * @return int The priority level + */ + public function getPriority(); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php new file mode 100644 index 0000000..55f5d6e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php @@ -0,0 +1,247 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\BlockReferenceNode; +use Twig\Node\Expression\BlockReferenceExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\ParentExpression; +use Twig\Node\ForNode; +use Twig\Node\IncludeNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Node\TextNode; + +/** + * Tries to optimize the AST. + * + * This visitor is always the last registered one. + * + * You can configure which optimizations you want to activate via the + * optimizer mode. + * + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class OptimizerNodeVisitor implements NodeVisitorInterface +{ + public const OPTIMIZE_ALL = -1; + public const OPTIMIZE_NONE = 0; + public const OPTIMIZE_FOR = 2; + public const OPTIMIZE_RAW_FILTER = 4; + public const OPTIMIZE_TEXT_NODES = 8; + + private $loops = []; + private $loopsTargets = []; + private $optimizers; + + /** + * @param int $optimizers The optimizer mode + */ + public function __construct(int $optimizers = -1) + { + if ($optimizers > (self::OPTIMIZE_FOR | self::OPTIMIZE_RAW_FILTER | self::OPTIMIZE_TEXT_NODES)) { + throw new \InvalidArgumentException(\sprintf('Optimizer mode "%s" is not valid.', $optimizers)); + } + + if (-1 !== $optimizers && self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $optimizers)) { + trigger_deprecation('twig/twig', '3.11', 'The "Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_RAW_FILTER" option is deprecated and does nothing.'); + } + + $this->optimizers = $optimizers; + } + + public function enterNode(Node $node, Environment $env): Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->enterOptimizeFor($node); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->leaveOptimizeFor($node); + } + + $node = $this->optimizePrintNode($node); + + if (self::OPTIMIZE_TEXT_NODES === (self::OPTIMIZE_TEXT_NODES & $this->optimizers)) { + $node = $this->mergeTextNodeCalls($node); + } + + return $node; + } + + private function mergeTextNodeCalls(Node $node): Node + { + $text = ''; + $names = []; + foreach ($node as $k => $n) { + if (!$n instanceof TextNode) { + return $node; + } + + $text .= $n->getAttribute('data'); + $names[] = $k; + } + + if (!$text) { + return $node; + } + + if (Node::class === \get_class($node)) { + return new TextNode($text, $node->getTemplateLine()); + } + + foreach ($names as $i => $name) { + if (0 === $i) { + $node->setNode($name, new TextNode($text, $node->getTemplateLine())); + } else { + $node->removeNode($name); + } + } + + return $node; + } + + /** + * Optimizes print nodes. + * + * It replaces: + * + * * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()" + */ + private function optimizePrintNode(Node $node): Node + { + if (!$node instanceof PrintNode) { + return $node; + } + + $exprNode = $node->getNode('expr'); + + if ($exprNode instanceof ConstantExpression && \is_string($exprNode->getAttribute('value'))) { + return new TextNode($exprNode->getAttribute('value'), $exprNode->getTemplateLine()); + } + + if ( + $exprNode instanceof BlockReferenceExpression + || $exprNode instanceof ParentExpression + ) { + $exprNode->setAttribute('output', true); + + return $exprNode; + } + + return $node; + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function enterOptimizeFor(Node $node): void + { + if ($node instanceof ForNode) { + // disable the loop variable by default + $node->setAttribute('with_loop', false); + array_unshift($this->loops, $node); + array_unshift($this->loopsTargets, $node->getNode('value_target')->getAttribute('name')); + array_unshift($this->loopsTargets, $node->getNode('key_target')->getAttribute('name')); + } elseif (!$this->loops) { + // we are outside a loop + return; + } + + // when do we need to add the loop variable back? + + // the loop variable is referenced for the current loop + elseif ($node instanceof NameExpression && 'loop' === $node->getAttribute('name')) { + $node->setAttribute('always_defined', true); + $this->addLoopToCurrent(); + } + + // optimize access to loop targets + elseif ($node instanceof NameExpression && \in_array($node->getAttribute('name'), $this->loopsTargets)) { + $node->setAttribute('always_defined', true); + } + + // block reference + elseif ($node instanceof BlockReferenceNode || $node instanceof BlockReferenceExpression) { + $this->addLoopToCurrent(); + } + + // include without the only attribute + elseif ($node instanceof IncludeNode && !$node->getAttribute('only')) { + $this->addLoopToAll(); + } + + // include function without the with_context=false parameter + elseif ($node instanceof FunctionExpression + && 'include' === $node->getAttribute('name') + && (!$node->getNode('arguments')->hasNode('with_context') + || false !== $node->getNode('arguments')->getNode('with_context')->getAttribute('value') + ) + ) { + $this->addLoopToAll(); + } + + // the loop variable is referenced via an attribute + elseif ($node instanceof GetAttrExpression + && (!$node->getNode('attribute') instanceof ConstantExpression + || 'parent' === $node->getNode('attribute')->getAttribute('value') + ) + && (true === $this->loops[0]->getAttribute('with_loop') + || ($node->getNode('node') instanceof NameExpression + && 'loop' === $node->getNode('node')->getAttribute('name') + ) + ) + ) { + $this->addLoopToAll(); + } + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function leaveOptimizeFor(Node $node): void + { + if ($node instanceof ForNode) { + array_shift($this->loops); + array_shift($this->loopsTargets); + array_shift($this->loopsTargets); + } + } + + private function addLoopToCurrent(): void + { + $this->loops[0]->setAttribute('with_loop', true); + } + + private function addLoopToAll(): void + { + foreach ($this->loops as $loop) { + $loop->setAttribute('with_loop', true); + } + } + + public function getPriority(): int + { + return 255; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php new file mode 100644 index 0000000..6df046e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php @@ -0,0 +1,160 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\Expression\BlockReferenceExpression; +use Twig\Node\Expression\ConditionalExpression; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\MethodCallExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\ParentExpression; +use Twig\Node\Node; + +/** + * @internal + */ +final class SafeAnalysisNodeVisitor implements NodeVisitorInterface +{ + private $data = []; + private $safeVars = []; + + public function setSafeVars(array $safeVars): void + { + $this->safeVars = $safeVars; + } + + public function getSafe(Node $node) + { + $hash = spl_object_hash($node); + if (!isset($this->data[$hash])) { + return; + } + + foreach ($this->data[$hash] as $bucket) { + if ($bucket['key'] !== $node) { + continue; + } + + if (\in_array('html_attr', $bucket['value'])) { + $bucket['value'][] = 'html'; + } + + return $bucket['value']; + } + } + + private function setSafe(Node $node, array $safe): void + { + $hash = spl_object_hash($node); + if (isset($this->data[$hash])) { + foreach ($this->data[$hash] as &$bucket) { + if ($bucket['key'] === $node) { + $bucket['value'] = $safe; + + return; + } + } + } + $this->data[$hash][] = [ + 'key' => $node, + 'value' => $safe, + ]; + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ConstantExpression) { + // constants are marked safe for all + $this->setSafe($node, ['all']); + } elseif ($node instanceof BlockReferenceExpression) { + // blocks are safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ParentExpression) { + // parent block is safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ConditionalExpression) { + // intersect safeness of both operands + $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3'))); + $this->setSafe($node, $safe); + } elseif ($node instanceof FilterExpression) { + // filter expression is safe when the filter is safe + $name = $node->getNode('filter')->getAttribute('value'); + $args = $node->getNode('arguments'); + if ($filter = $env->getFilter($name)) { + $safe = $filter->getSafe($args); + if (null === $safe) { + $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety()); + } + $this->setSafe($node, $safe); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof FunctionExpression) { + // function expression is safe when the function is safe + $name = $node->getAttribute('name'); + $args = $node->getNode('arguments'); + if ($function = $env->getFunction($name)) { + $this->setSafe($node, $function->getSafe($args)); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof MethodCallExpression) { + if ($node->getAttribute('safe')) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof GetAttrExpression && $node->getNode('node') instanceof NameExpression) { + $name = $node->getNode('node')->getAttribute('name'); + if (\in_array($name, $this->safeVars)) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } else { + $this->setSafe($node, []); + } + + return $node; + } + + private function intersectSafe(?array $a = null, ?array $b = null): array + { + if (null === $a || null === $b) { + return []; + } + + if (\in_array('all', $a)) { + return $b; + } + + if (\in_array('all', $b)) { + return $a; + } + + return array_intersect($a, $b); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php new file mode 100644 index 0000000..7cc1c2e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php @@ -0,0 +1,152 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Environment; +use Twig\Node\CheckSecurityCallNode; +use Twig\Node\CheckSecurityNode; +use Twig\Node\CheckToStringNode; +use Twig\Node\Expression\ArrayExpression; +use Twig\Node\Expression\Binary\ConcatBinary; +use Twig\Node\Expression\Binary\RangeBinary; +use Twig\Node\Expression\FilterExpression; +use Twig\Node\Expression\FunctionExpression; +use Twig\Node\Expression\GetAttrExpression; +use Twig\Node\Expression\NameExpression; +use Twig\Node\Expression\Unary\SpreadUnary; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Node\SetNode; + +/** + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +final class SandboxNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + /** @var array<string, int> */ + private $tags; + /** @var array<string, int> */ + private $filters; + /** @var array<string, int> */ + private $functions; + private $needsToStringWrap = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->tags = []; + $this->filters = []; + $this->functions = []; + + return $node; + } elseif ($this->inAModule) { + // look for tags + if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) { + $this->tags[$node->getNodeTag()] = $node->getTemplateLine(); + } + + // look for filters + if ($node instanceof FilterExpression && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) { + $this->filters[$node->getNode('filter')->getAttribute('value')] = $node->getTemplateLine(); + } + + // look for functions + if ($node instanceof FunctionExpression && !isset($this->functions[$node->getAttribute('name')])) { + $this->functions[$node->getAttribute('name')] = $node->getTemplateLine(); + } + + // the .. operator is equivalent to the range() function + if ($node instanceof RangeBinary && !isset($this->functions['range'])) { + $this->functions['range'] = $node->getTemplateLine(); + } + + if ($node instanceof PrintNode) { + $this->needsToStringWrap = true; + $this->wrapNode($node, 'expr'); + } + + if ($node instanceof SetNode && !$node->getAttribute('capture')) { + $this->needsToStringWrap = true; + } + + // wrap outer nodes that can implicitly call __toString() + if ($this->needsToStringWrap) { + if ($node instanceof ConcatBinary) { + $this->wrapNode($node, 'left'); + $this->wrapNode($node, 'right'); + } + if ($node instanceof FilterExpression) { + $this->wrapNode($node, 'node'); + $this->wrapArrayNode($node, 'arguments'); + } + if ($node instanceof FunctionExpression) { + $this->wrapArrayNode($node, 'arguments'); + } + } + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + + $node->setNode('constructor_end', new Node([new CheckSecurityCallNode(), $node->getNode('constructor_end')])); + $node->setNode('class_end', new Node([new CheckSecurityNode($this->filters, $this->tags, $this->functions), $node->getNode('class_end')])); + } elseif ($this->inAModule) { + if ($node instanceof PrintNode || $node instanceof SetNode) { + $this->needsToStringWrap = false; + } + } + + return $node; + } + + private function wrapNode(Node $node, string $name): void + { + $expr = $node->getNode($name); + if (($expr instanceof NameExpression || $expr instanceof GetAttrExpression) && !$expr->isGenerator()) { + // Simplify in 4.0 as the spread attribute has been removed there + $new = new CheckToStringNode($expr); + if ($expr->hasAttribute('spread')) { + $new->setAttribute('spread', $expr->getAttribute('spread')); + } + $node->setNode($name, $new); + } elseif ($expr instanceof SpreadUnary) { + $this->wrapNode($expr, 'node'); + } elseif ($expr instanceof ArrayExpression) { + foreach ($expr as $name => $_) { + $this->wrapNode($expr, $name); + } + } + } + + private function wrapArrayNode(Node $node, string $name): void + { + $args = $node->getNode($name); + foreach ($args as $name => $_) { + $this->wrapNode($args, $name); + } + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php new file mode 100644 index 0000000..6470bda --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\NodeVisitor; + +use Twig\Attribute\YieldReady; +use Twig\Environment; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\Node; + +/** + * @internal to be removed in Twig 4 + */ +final class YieldNotReadyNodeVisitor implements NodeVisitorInterface +{ + private $useYield; + private $yieldReadyNodes = []; + + public function __construct(bool $useYield) + { + $this->useYield = $useYield; + } + + public function enterNode(Node $node, Environment $env): Node + { + $class = \get_class($node); + + if ($node instanceof AbstractExpression || isset($this->yieldReadyNodes[$class])) { + return $node; + } + + if (!$this->yieldReadyNodes[$class] = (bool) (new \ReflectionClass($class))->getAttributes(YieldReady::class)) { + if ($this->useYield) { + throw new \LogicException(\sprintf('You cannot enable the "use_yield" option of Twig as node "%s" is not marked as ready for it; please make it ready and then flag it with the #[YieldReady] attribute.', $class)); + } + + trigger_deprecation('twig/twig', '3.9', 'Twig node "%s" is not marked as ready for using "yield" instead of "echo"; please make it ready and then flag it with the #[YieldReady] attribute.', $class); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + return $node; + } + + public function getPriority(): int + { + return 255; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Parser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Parser.php new file mode 100644 index 0000000..7cfc205 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Parser.php @@ -0,0 +1,352 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Error\SyntaxError; +use Twig\Node\BlockNode; +use Twig\Node\BlockReferenceNode; +use Twig\Node\BodyNode; +use Twig\Node\Expression\AbstractExpression; +use Twig\Node\MacroNode; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\Node\NodeCaptureInterface; +use Twig\Node\NodeOutputInterface; +use Twig\Node\PrintNode; +use Twig\Node\TextNode; +use Twig\TokenParser\TokenParserInterface; +use Twig\Util\ReflectionCallable; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +class Parser +{ + private $stack = []; + private $stream; + private $parent; + private $visitors; + private $expressionParser; + private $blocks; + private $blockStack; + private $macros; + private $env; + private $importedSymbols; + private $traits; + private $embeddedTemplates = []; + private $varNameSalt = 0; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getVarName(): string + { + return \sprintf('__internal_parse_%d', $this->varNameSalt++); + } + + public function parse(TokenStream $stream, $test = null, bool $dropNeedle = false): ModuleNode + { + $vars = get_object_vars($this); + unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames'], $vars['varNameSalt']); + $this->stack[] = $vars; + + // node visitors + if (null === $this->visitors) { + $this->visitors = $this->env->getNodeVisitors(); + } + + if (null === $this->expressionParser) { + $this->expressionParser = new ExpressionParser($this, $this->env); + } + + $this->stream = $stream; + $this->parent = null; + $this->blocks = []; + $this->macros = []; + $this->traits = []; + $this->blockStack = []; + $this->importedSymbols = [[]]; + $this->embeddedTemplates = []; + + try { + $body = $this->subparse($test, $dropNeedle); + + if (null !== $this->parent && null === $body = $this->filterBodyNodes($body)) { + $body = new Node(); + } + } catch (SyntaxError $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->stream->getSourceContext()); + } + + if (!$e->getTemplateLine()) { + $e->setTemplateLine($this->stream->getCurrent()->getLine()); + } + + throw $e; + } + + $node = new ModuleNode(new BodyNode([$body]), $this->parent, new Node($this->blocks), new Node($this->macros), new Node($this->traits), $this->embeddedTemplates, $stream->getSourceContext()); + + $traverser = new NodeTraverser($this->env, $this->visitors); + + /** + * @var ModuleNode $node + */ + $node = $traverser->traverse($node); + + // restore previous stack so previous parse() call can resume working + foreach (array_pop($this->stack) as $key => $val) { + $this->$key = $val; + } + + return $node; + } + + public function subparse($test, bool $dropNeedle = false): Node + { + $lineno = $this->getCurrentToken()->getLine(); + $rv = []; + while (!$this->stream->isEOF()) { + switch ($this->getCurrentToken()->getType()) { + case /* Token::TEXT_TYPE */ 0: + $token = $this->stream->next(); + $rv[] = new TextNode($token->getValue(), $token->getLine()); + break; + + case /* Token::VAR_START_TYPE */ 2: + $token = $this->stream->next(); + $expr = $this->expressionParser->parseExpression(); + $this->stream->expect(/* Token::VAR_END_TYPE */ 4); + $rv[] = new PrintNode($expr, $token->getLine()); + break; + + case /* Token::BLOCK_START_TYPE */ 1: + $this->stream->next(); + $token = $this->getCurrentToken(); + + if (/* Token::NAME_TYPE */ 5 !== $token->getType()) { + throw new SyntaxError('A block must start with a tag name.', $token->getLine(), $this->stream->getSourceContext()); + } + + if (null !== $test && $test($token)) { + if ($dropNeedle) { + $this->stream->next(); + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + if (!$subparser = $this->env->getTokenParser($token->getValue())) { + if (null !== $test) { + $e = new SyntaxError(\sprintf('Unexpected "%s" tag', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + + $callable = (new ReflectionCallable($test))->getCallable(); + if (\is_array($callable) && $callable[0] instanceof TokenParserInterface) { + $e->appendMessage(\sprintf(' (expecting closing tag for the "%s" tag defined near line %s).', $callable[0]->getTag(), $lineno)); + } + } else { + $e = new SyntaxError(\sprintf('Unknown "%s" tag.', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + $e->addSuggestions($token->getValue(), array_keys($this->env->getTokenParsers())); + } + + throw $e; + } + + $this->stream->next(); + + $subparser->setParser($this); + $node = $subparser->parse($token); + if (null !== $node) { + $rv[] = $node; + } + break; + + default: + throw new SyntaxError('Lexer or parser ended up in unsupported state.', $this->getCurrentToken()->getLine(), $this->stream->getSourceContext()); + } + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + public function getBlockStack(): array + { + return $this->blockStack; + } + + public function peekBlockStack() + { + return $this->blockStack[\count($this->blockStack) - 1] ?? null; + } + + public function popBlockStack(): void + { + array_pop($this->blockStack); + } + + public function pushBlockStack($name): void + { + $this->blockStack[] = $name; + } + + public function hasBlock(string $name): bool + { + return isset($this->blocks[$name]); + } + + public function getBlock(string $name): Node + { + return $this->blocks[$name]; + } + + public function setBlock(string $name, BlockNode $value): void + { + $this->blocks[$name] = new BodyNode([$value], [], $value->getTemplateLine()); + } + + public function hasMacro(string $name): bool + { + return isset($this->macros[$name]); + } + + public function setMacro(string $name, MacroNode $node): void + { + $this->macros[$name] = $node; + } + + public function addTrait($trait): void + { + $this->traits[] = $trait; + } + + public function hasTraits(): bool + { + return \count($this->traits) > 0; + } + + public function embedTemplate(ModuleNode $template) + { + $template->setIndex(mt_rand()); + + $this->embeddedTemplates[] = $template; + } + + public function addImportedSymbol(string $type, string $alias, ?string $name = null, ?AbstractExpression $node = null): void + { + $this->importedSymbols[0][$type][$alias] = ['name' => $name, 'node' => $node]; + } + + public function getImportedSymbol(string $type, string $alias) + { + // if the symbol does not exist in the current scope (0), try in the main/global scope (last index) + return $this->importedSymbols[0][$type][$alias] ?? ($this->importedSymbols[\count($this->importedSymbols) - 1][$type][$alias] ?? null); + } + + public function isMainScope(): bool + { + return 1 === \count($this->importedSymbols); + } + + public function pushLocalScope(): void + { + array_unshift($this->importedSymbols, []); + } + + public function popLocalScope(): void + { + array_shift($this->importedSymbols); + } + + public function getExpressionParser(): ExpressionParser + { + return $this->expressionParser; + } + + public function getParent(): ?Node + { + return $this->parent; + } + + public function setParent(?Node $parent): void + { + $this->parent = $parent; + } + + public function getStream(): TokenStream + { + return $this->stream; + } + + public function getCurrentToken(): Token + { + return $this->stream->getCurrent(); + } + + private function filterBodyNodes(Node $node, bool $nested = false): ?Node + { + // check that the body does not contain non-empty output nodes + if ( + ($node instanceof TextNode && !ctype_space($node->getAttribute('data'))) + || (!$node instanceof TextNode && !$node instanceof BlockReferenceNode && $node instanceof NodeOutputInterface) + ) { + if (str_contains((string) $node, \chr(0xEF).\chr(0xBB).\chr(0xBF))) { + $t = substr($node->getAttribute('data'), 3); + if ('' === $t || ctype_space($t)) { + // bypass empty nodes starting with a BOM + return null; + } + } + + throw new SyntaxError('A template that extends another one cannot include content outside Twig blocks. Did you forget to put the content inside a {% block %} tag?', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + // bypass nodes that "capture" the output + if ($node instanceof NodeCaptureInterface) { + // a "block" tag in such a node will serve as a block definition AND be displayed in place as well + return $node; + } + + // "block" tags that are not captured (see above) are only used for defining + // the content of the block. In such a case, nesting it does not work as + // expected as the definition is not part of the default template code flow. + if ($nested && $node instanceof BlockReferenceNode) { + throw new SyntaxError('A block definition cannot be nested under non-capturing nodes.', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + if ($node instanceof NodeOutputInterface) { + return null; + } + + // here, $nested means "being at the root level of a child template" + // we need to discard the wrapping "Node" for the "body" node + $nested = $nested || Node::class !== \get_class($node); + foreach ($node as $k => $n) { + if (null !== $n && null === $this->filterBodyNodes($n, $nested)) { + $node->removeNode($k); + } + } + + return $node; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php new file mode 100644 index 0000000..267718c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php @@ -0,0 +1,63 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Dumper; + +use Twig\Profiler\Profile; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +abstract class BaseDumper +{ + private $root; + + public function dump(Profile $profile): string + { + return $this->dumpProfile($profile); + } + + abstract protected function formatTemplate(Profile $profile, $prefix): string; + + abstract protected function formatNonTemplate(Profile $profile, $prefix): string; + + abstract protected function formatTime(Profile $profile, $percent): string; + + private function dumpProfile(Profile $profile, $prefix = '', $sibling = false): string + { + if ($profile->isRoot()) { + $this->root = $profile->getDuration(); + $start = $profile->getName(); + } else { + if ($profile->isTemplate()) { + $start = $this->formatTemplate($profile, $prefix); + } else { + $start = $this->formatNonTemplate($profile, $prefix); + } + $prefix .= $sibling ? '│ ' : ' '; + } + + $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0; + + if ($profile->getDuration() * 1000 < 1) { + $str = $start."\n"; + } else { + $str = \sprintf("%s %s\n", $start, $this->formatTime($profile, $percent)); + } + + $nCount = \count($profile->getProfiles()); + foreach ($profile as $i => $p) { + $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount); + } + + return $str; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php new file mode 100644 index 0000000..bb3fbb5 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php @@ -0,0 +1,72 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Dumper; + +use Twig\Profiler\Profile; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class BlackfireDumper +{ + public function dump(Profile $profile): string + { + $data = []; + $this->dumpProfile('main()', $profile, $data); + $this->dumpChildren('main()', $profile, $data); + + $start = \sprintf('%f', microtime(true)); + $str = <<<EOF +file-format: BlackfireProbe +cost-dimensions: wt mu pmu +request-start: $start + + +EOF; + + foreach ($data as $name => $values) { + $str .= "$name//{$values['ct']} {$values['wt']} {$values['mu']} {$values['pmu']}\n"; + } + + return $str; + } + + private function dumpChildren(string $parent, Profile $profile, &$data) + { + foreach ($profile as $p) { + if ($p->isTemplate()) { + $name = $p->getTemplate(); + } else { + $name = \sprintf('%s::%s(%s)', $p->getTemplate(), $p->getType(), $p->getName()); + } + $this->dumpProfile(\sprintf('%s==>%s', $parent, $name), $p, $data); + $this->dumpChildren($name, $p, $data); + } + } + + private function dumpProfile(string $edge, Profile $profile, &$data) + { + if (isset($data[$edge])) { + ++$data[$edge]['ct']; + $data[$edge]['wt'] += floor($profile->getDuration() * 1000000); + $data[$edge]['mu'] += $profile->getMemoryUsage(); + $data[$edge]['pmu'] += $profile->getPeakMemoryUsage(); + } else { + $data[$edge] = [ + 'ct' => 1, + 'wt' => floor($profile->getDuration() * 1000000), + 'mu' => $profile->getMemoryUsage(), + 'pmu' => $profile->getPeakMemoryUsage(), + ]; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php new file mode 100644 index 0000000..cdab2de --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php @@ -0,0 +1,47 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Dumper; + +use Twig\Profiler\Profile; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class HtmlDumper extends BaseDumper +{ + private static $colors = [ + 'block' => '#dfd', + 'macro' => '#ddf', + 'template' => '#ffd', + 'big' => '#d44', + ]; + + public function dump(Profile $profile): string + { + return '<pre>'.parent::dump($profile).'</pre>'; + } + + protected function formatTemplate(Profile $profile, $prefix): string + { + return \sprintf('%s└ <span style="background-color: %s">%s</span>', $prefix, self::$colors['template'], $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return \sprintf('%s└ %s::%s(<span style="background-color: %s">%s</span>)', $prefix, $profile->getTemplate(), $profile->getType(), self::$colors[$profile->getType()] ?? 'auto', $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return \sprintf('<span style="color: %s">%.2fms/%.0f%%</span>', $percent > 20 ? self::$colors['big'] : 'auto', $profile->getDuration() * 1000, $percent); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php new file mode 100644 index 0000000..1c1f77e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Dumper; + +use Twig\Profiler\Profile; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class TextDumper extends BaseDumper +{ + protected function formatTemplate(Profile $profile, $prefix): string + { + return \sprintf('%s└ %s', $prefix, $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return \sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return \sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php new file mode 100644 index 0000000..4d8e504 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Node; + +/** + * Represents a profile enter node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class EnterProfileNode extends Node +{ + public function __construct(string $extensionName, string $type, string $name, string $varName) + { + parent::__construct([], ['extension_name' => $extensionName, 'name' => $name, 'type' => $type, 'var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write(\sprintf('$%s = $this->extensions[', $this->getAttribute('var_name'))) + ->repr($this->getAttribute('extension_name')) + ->raw("];\n") + ->write(\sprintf('$%s->enter($%s = new \Twig\Profiler\Profile($this->getTemplateName(), ', $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ->repr($this->getAttribute('type')) + ->raw(', ') + ->repr($this->getAttribute('name')) + ->raw("));\n\n") + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php new file mode 100644 index 0000000..bd9227e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php @@ -0,0 +1,38 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\Node; + +use Twig\Attribute\YieldReady; +use Twig\Compiler; +use Twig\Node\Node; + +/** + * Represents a profile leave node. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +#[YieldReady] +class LeaveProfileNode extends Node +{ + public function __construct(string $varName) + { + parent::__construct([], ['var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write("\n") + ->write(\sprintf("\$%s->leave(\$%s);\n\n", $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php new file mode 100644 index 0000000..4d2a581 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php @@ -0,0 +1,70 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler\NodeVisitor; + +use Twig\Environment; +use Twig\Node\BlockNode; +use Twig\Node\BodyNode; +use Twig\Node\MacroNode; +use Twig\Node\ModuleNode; +use Twig\Node\Node; +use Twig\NodeVisitor\NodeVisitorInterface; +use Twig\Profiler\Node\EnterProfileNode; +use Twig\Profiler\Node\LeaveProfileNode; +use Twig\Profiler\Profile; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class ProfilerNodeVisitor implements NodeVisitorInterface +{ + private $extensionName; + private $varName; + + public function __construct(string $extensionName) + { + $this->extensionName = $extensionName; + $this->varName = \sprintf('__internal_%s', hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $extensionName)); + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $node->setNode('display_start', new Node([new EnterProfileNode($this->extensionName, Profile::TEMPLATE, $node->getTemplateName(), $this->varName), $node->getNode('display_start')])); + $node->setNode('display_end', new Node([new LeaveProfileNode($this->varName), $node->getNode('display_end')])); + } elseif ($node instanceof BlockNode) { + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::BLOCK, $node->getAttribute('name'), $this->varName), + $node->getNode('body'), + new LeaveProfileNode($this->varName), + ])); + } elseif ($node instanceof MacroNode) { + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::MACRO, $node->getAttribute('name'), $this->varName), + $node->getNode('body'), + new LeaveProfileNode($this->varName), + ])); + } + + return $node; + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Profile.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Profile.php new file mode 100644 index 0000000..72506b7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Profiler/Profile.php @@ -0,0 +1,181 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Profiler; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class Profile implements \IteratorAggregate, \Serializable +{ + public const ROOT = 'ROOT'; + public const BLOCK = 'block'; + public const TEMPLATE = 'template'; + public const MACRO = 'macro'; + + private $template; + private $name; + private $type; + private $starts = []; + private $ends = []; + private $profiles = []; + + public function __construct(string $template = 'main', string $type = self::ROOT, string $name = 'main') + { + $this->template = $template; + $this->type = $type; + $this->name = str_starts_with($name, '__internal_') ? 'INTERNAL' : $name; + $this->enter(); + } + + public function getTemplate(): string + { + return $this->template; + } + + public function getType(): string + { + return $this->type; + } + + public function getName(): string + { + return $this->name; + } + + public function isRoot(): bool + { + return self::ROOT === $this->type; + } + + public function isTemplate(): bool + { + return self::TEMPLATE === $this->type; + } + + public function isBlock(): bool + { + return self::BLOCK === $this->type; + } + + public function isMacro(): bool + { + return self::MACRO === $this->type; + } + + /** + * @return Profile[] + */ + public function getProfiles(): array + { + return $this->profiles; + } + + public function addProfile(self $profile): void + { + $this->profiles[] = $profile; + } + + /** + * Returns the duration in microseconds. + */ + public function getDuration(): float + { + if ($this->isRoot() && $this->profiles) { + // for the root node with children, duration is the sum of all child durations + $duration = 0; + foreach ($this->profiles as $profile) { + $duration += $profile->getDuration(); + } + + return $duration; + } + + return isset($this->ends['wt']) && isset($this->starts['wt']) ? $this->ends['wt'] - $this->starts['wt'] : 0; + } + + /** + * Returns the memory usage in bytes. + */ + public function getMemoryUsage(): int + { + return isset($this->ends['mu']) && isset($this->starts['mu']) ? $this->ends['mu'] - $this->starts['mu'] : 0; + } + + /** + * Returns the peak memory usage in bytes. + */ + public function getPeakMemoryUsage(): int + { + return isset($this->ends['pmu']) && isset($this->starts['pmu']) ? $this->ends['pmu'] - $this->starts['pmu'] : 0; + } + + /** + * Starts the profiling. + */ + public function enter(): void + { + $this->starts = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + /** + * Stops the profiling. + */ + public function leave(): void + { + $this->ends = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + public function reset(): void + { + $this->starts = $this->ends = $this->profiles = []; + $this->enter(); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->profiles); + } + + public function serialize(): string + { + return serialize($this->__serialize()); + } + + public function unserialize($data): void + { + $this->__unserialize(unserialize($data)); + } + + /** + * @internal + */ + public function __serialize(): array + { + return [$this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles]; + } + + /** + * @internal + */ + public function __unserialize(array $data): void + { + [$this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles] = $data; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/core.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/core.php new file mode 100644 index 0000000..e5372cd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/core.php @@ -0,0 +1,541 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\CoreExtension; + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_cycle($values, $position) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::cycle($values, $position); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_random(Environment $env, $values = null, $max = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::random($env->getCharset(), $values, $max); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_date_format_filter(Environment $env, $date, $format = null, $timezone = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $env->getExtension(CoreExtension::class)->formatDate($date, $format, $timezone); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_date_modify_filter(Environment $env, $date, $modifier) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $env->getExtension(CoreExtension::class)->modifyDate($date, $modifier); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_sprintf($format, ...$values) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::sprintf($format, ...$values); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_date_converter(Environment $env, $date = null, $timezone = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $env->getExtension(CoreExtension::class)->convertDate($date, $timezone); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_replace_filter($str, $from) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::replace($str, $from); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_round($value, $precision = 0, $method = 'common') +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::round($value, $precision, $method); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_number_format_filter(Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $env->getExtension(CoreExtension::class)->formatNumber($number, $decimal, $decimalPoint, $thousandSep); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_urlencode_filter($url) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::urlencode($url); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_merge(...$arrays) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::merge(...$arrays); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_slice(Environment $env, $item, $start, $length = null, $preserveKeys = false) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::slice($env->getCharset(), $item, $start, $length, $preserveKeys); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_first(Environment $env, $item) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::first($env->getCharset(), $item); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_last(Environment $env, $item) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::last($env->getCharset(), $item); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_join_filter($value, $glue = '', $and = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::join($value, $glue, $and); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_split_filter(Environment $env, $value, $delimiter, $limit = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::split($env->getCharset(), $value, $delimiter, $limit); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_get_array_keys_filter($array) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::keys($array); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_reverse_filter(Environment $env, $item, $preserveKeys = false) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::reverse($env->getCharset(), $item, $preserveKeys); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_sort_filter(Environment $env, $array, $arrow = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::sort($env, $array, $arrow); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_matches(string $regexp, ?string $str) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::matches($regexp, $str); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_trim_filter($string, $characterMask = null, $side = 'both') +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::trim($string, $characterMask, $side); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_nl2br($string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::nl2br($string); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_spaceless($content) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::spaceless($content); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_convert_encoding($string, $to, $from) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::convertEncoding($string, $to, $from); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_length_filter(Environment $env, $thing) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::length($env->getCharset(), $thing); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_upper_filter(Environment $env, $string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::upper($env->getCharset(), $string); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_lower_filter(Environment $env, $string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::lower($env->getCharset(), $string); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_striptags($string, $allowable_tags = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::striptags($string, $allowable_tags); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_title_string_filter(Environment $env, $string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::titleCase($env->getCharset(), $string); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_capitalize_string_filter(Environment $env, $string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::capitalize($env->getCharset(), $string); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_test_empty($value) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::testEmpty($value); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_test_iterable($value) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return is_iterable($value); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::include($env, $context, $template, $variables, $withContext, $ignoreMissing, $sandboxed); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_source(Environment $env, $name, $ignoreMissing = false) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::source($env, $name, $ignoreMissing); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_constant($constant, $object = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::constant($constant, $object); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_constant_is_defined($constant, $object = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::constantIsDefined($constant, $object); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_batch($items, $size, $fill = null, $preserveKeys = true) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::batch($items, $size, $fill, $preserveKeys); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_column($array, $name, $index = null): array +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::column($array, $name, $index); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_filter(Environment $env, $array, $arrow) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::filter($env, $array, $arrow); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_map(Environment $env, $array, $arrow) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::map($env, $array, $arrow); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_reduce(Environment $env, $array, $arrow, $initial = null) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::reduce($env, $array, $arrow, $initial); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_some(Environment $env, $array, $arrow) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::arraySome($env, $array, $arrow); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_array_every(Environment $env, $array, $arrow) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::arrayEvery($env, $array, $arrow); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_check_arrow_in_sandbox(Environment $env, $arrow, $thing, $type) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return CoreExtension::checkArrowInSandbox($env, $arrow, $thing, $type); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/debug.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/debug.php new file mode 100644 index 0000000..104b4f4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/debug.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\DebugExtension; + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_var_dump(Environment $env, $context, ...$vars) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + DebugExtension::dump($env, $context, ...$vars); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/escaper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/escaper.php new file mode 100644 index 0000000..a2ee8e7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/escaper.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\EscaperExtension; +use Twig\Node\Node; +use Twig\Runtime\EscaperRuntime; + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_raw_filter($string) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $string; +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_escape_filter(Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return $env->getRuntime(EscaperRuntime::class)->escape($string, $strategy, $charset, $autoescape); +} + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_escape_filter_is_safe(Node $filterArgs) +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return EscaperExtension::escapeFilterIsSafe($filterArgs); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/string_loader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/string_loader.php new file mode 100644 index 0000000..8f0e649 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Resources/string_loader.php @@ -0,0 +1,26 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Twig\Environment; +use Twig\Extension\StringLoaderExtension; +use Twig\TemplateWrapper; + +/** + * @internal + * + * @deprecated since Twig 3.9 + */ +function twig_template_from_string(Environment $env, $template, ?string $name = null): TemplateWrapper +{ + trigger_deprecation('twig/twig', '3.9', 'Using the internal "%s" function is deprecated.', __FUNCTION__); + + return StringLoaderExtension::templateFromString($env, $template, $name); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Runtime/EscaperRuntime.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Runtime/EscaperRuntime.php new file mode 100644 index 0000000..b1dac96 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Runtime/EscaperRuntime.php @@ -0,0 +1,329 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Runtime; + +use Twig\Error\RuntimeError; +use Twig\Extension\RuntimeExtensionInterface; +use Twig\Markup; + +final class EscaperRuntime implements RuntimeExtensionInterface +{ + /** @var array<string, callable(string $string, string $charset): string> */ + private $escapers = []; + + /** @internal */ + public $safeClasses = []; + + /** @internal */ + public $safeLookup = []; + + private $charset; + + public function __construct($charset = 'UTF-8') + { + $this->charset = $charset; + } + + /** + * Defines a new escaper to be used via the escape filter. + * + * @param string $strategy The strategy name that should be used as a strategy in the escape call + * @param callable(string $string, string $charset): string $callable A valid PHP callable + */ + public function setEscaper($strategy, callable $callable) + { + $this->escapers[$strategy] = $callable; + } + + /** + * Gets all defined escapers. + * + * @return array<string, callable(string $string, string $charset): string> An array of escapers + */ + public function getEscapers() + { + return $this->escapers; + } + + public function setSafeClasses(array $safeClasses = []) + { + $this->safeClasses = []; + $this->safeLookup = []; + foreach ($safeClasses as $class => $strategies) { + $this->addSafeClass($class, $strategies); + } + } + + public function addSafeClass(string $class, array $strategies) + { + $class = ltrim($class, '\\'); + if (!isset($this->safeClasses[$class])) { + $this->safeClasses[$class] = []; + } + $this->safeClasses[$class] = array_merge($this->safeClasses[$class], $strategies); + + foreach ($strategies as $strategy) { + $this->safeLookup[$strategy][$class] = true; + } + } + + /** + * Escapes a string. + * + * @param mixed $string The value to be escaped + * @param string $strategy The escaping strategy + * @param string|null $charset The charset + * @param bool $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false) + * + * @throws RuntimeError + */ + public function escape($string, string $strategy = 'html', ?string $charset = null, bool $autoescape = false) + { + if ($autoescape && $string instanceof Markup) { + return $string; + } + + if (!\is_string($string)) { + if (\is_object($string) && method_exists($string, '__toString')) { + if ($autoescape) { + $c = \get_class($string); + if (!isset($this->safeClasses[$c])) { + $this->safeClasses[$c] = []; + foreach (class_parents($string) + class_implements($string) as $class) { + if (isset($this->safeClasses[$class])) { + $this->safeClasses[$c] = array_unique(array_merge($this->safeClasses[$c], $this->safeClasses[$class])); + foreach ($this->safeClasses[$class] as $s) { + $this->safeLookup[$s][$c] = true; + } + } + } + } + if (isset($this->safeLookup[$strategy][$c]) || isset($this->safeLookup['all'][$c])) { + return (string) $string; + } + } + + $string = (string) $string; + } elseif (\in_array($strategy, ['html', 'js', 'css', 'html_attr', 'url'])) { + // we return the input as is (which can be of any type) + return $string; + } + } + + if ('' === $string) { + return ''; + } + + $charset = $charset ?: $this->charset; + + switch ($strategy) { + case 'html': + // see https://www.php.net/htmlspecialchars + + // Using a static variable to avoid initializing the array + // each time the function is called. Moving the declaration on the + // top of the function slow downs other escaping strategies. + static $htmlspecialcharsCharsets = [ + 'ISO-8859-1' => true, 'ISO8859-1' => true, + 'ISO-8859-15' => true, 'ISO8859-15' => true, + 'utf-8' => true, 'UTF-8' => true, + 'CP866' => true, 'IBM866' => true, '866' => true, + 'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true, + '1251' => true, + 'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true, + 'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true, + 'BIG5' => true, '950' => true, + 'GB2312' => true, '936' => true, + 'BIG5-HKSCS' => true, + 'SHIFT_JIS' => true, 'SJIS' => true, '932' => true, + 'EUC-JP' => true, 'EUCJP' => true, + 'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true, + ]; + + if (isset($htmlspecialcharsCharsets[$charset])) { + return htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, $charset); + } + + if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) { + // cache the lowercase variant for future iterations + $htmlspecialcharsCharsets[$charset] = true; + + return htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, $charset); + } + + $string = $this->convertEncoding($string, 'UTF-8', $charset); + $string = htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, 'UTF-8'); + + return iconv('UTF-8', $charset, $string); + + case 'js': + // escape all non-alphanumeric characters + // into their \x or \uHHHH representations + if ('UTF-8' !== $charset) { + $string = $this->convertEncoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', function ($matches) { + $char = $matches[0]; + + /* + * A few characters have short escape sequences in JSON and JavaScript. + * Escape sequences supported only by JavaScript, not JSON, are omitted. + * \" is also supported but omitted, because the resulting string is not HTML safe. + */ + static $shortMap = [ + '\\' => '\\\\', + '/' => '\\/', + "\x08" => '\b', + "\x0C" => '\f', + "\x0A" => '\n', + "\x0D" => '\r', + "\x09" => '\t', + ]; + + if (isset($shortMap[$char])) { + return $shortMap[$char]; + } + + $codepoint = mb_ord($char, 'UTF-8'); + if (0x10000 > $codepoint) { + return \sprintf('\u%04X', $codepoint); + } + + // Split characters outside the BMP into surrogate pairs + // https://tools.ietf.org/html/rfc2781.html#section-2.1 + $u = $codepoint - 0x10000; + $high = 0xD800 | ($u >> 10); + $low = 0xDC00 | ($u & 0x3FF); + + return \sprintf('\u%04X\u%04X', $high, $low); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'css': + if ('UTF-8' !== $charset) { + $string = $this->convertEncoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', function ($matches) { + $char = $matches[0]; + + return \sprintf('\\%X ', 1 === \strlen($char) ? \ord($char) : mb_ord($char, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'html_attr': + if ('UTF-8' !== $charset) { + $string = $this->convertEncoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', function ($matches) { + /** + * This function is adapted from code coming from Zend Framework. + * + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (https://www.zend.com) + * @license https://framework.zend.com/license/new-bsd New BSD License + */ + $chr = $matches[0]; + $ord = \ord($chr); + + /* + * The following replaces characters undefined in HTML with the + * hex entity for the Unicode replacement character. + */ + if (($ord <= 0x1F && "\t" != $chr && "\n" != $chr && "\r" != $chr) || ($ord >= 0x7F && $ord <= 0x9F)) { + return '�'; + } + + /* + * Check if the current character to escape has a name entity we should + * replace it with while grabbing the hex value of the character. + */ + if (1 === \strlen($chr)) { + /* + * While HTML supports far more named entities, the lowest common denominator + * has become HTML5's XML Serialisation which is restricted to the those named + * entities that XML supports. Using HTML entities would result in this error: + * XML Parsing Error: undefined entity + */ + static $entityMap = [ + 34 => '"', /* quotation mark */ + 38 => '&', /* ampersand */ + 60 => '<', /* less-than sign */ + 62 => '>', /* greater-than sign */ + ]; + + if (isset($entityMap[$ord])) { + return $entityMap[$ord]; + } + + return \sprintf('&#x%02X;', $ord); + } + + /* + * Per OWASP recommendations, we'll use hex entities for any other + * characters where a named entity does not exist. + */ + return \sprintf('&#x%04X;', mb_ord($chr, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'url': + return rawurlencode($string); + + default: + if (\array_key_exists($strategy, $this->escapers)) { + return $this->escapers[$strategy]($string, $charset); + } + + $validStrategies = implode('", "', array_merge(['html', 'js', 'url', 'css', 'html_attr'], array_keys($this->escapers))); + + throw new RuntimeError(\sprintf('Invalid escaping strategy "%s" (valid ones: "%s").', $strategy, $validStrategies)); + } + } + + private function convertEncoding(string $string, string $to, string $from) + { + if (!\function_exists('iconv')) { + throw new RuntimeError('Unable to convert encoding: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); + } + + return iconv($from, $to, $string); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php new file mode 100644 index 0000000..b360d7b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\RuntimeLoader; + +use Psr\Container\ContainerInterface; + +/** + * Lazily loads Twig runtime implementations from a PSR-11 container. + * + * Note that the runtime services MUST use their class names as identifiers. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Robin Chalas <robin.chalas@gmail.com> + */ +class ContainerRuntimeLoader implements RuntimeLoaderInterface +{ + private $container; + + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function load(string $class) + { + return $this->container->has($class) ? $this->container->get($class) : null; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php new file mode 100644 index 0000000..1306483 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\RuntimeLoader; + +/** + * Lazy loads the runtime implementations for a Twig element. + * + * @author Robin Chalas <robin.chalas@gmail.com> + */ +class FactoryRuntimeLoader implements RuntimeLoaderInterface +{ + private $map; + + /** + * @param array $map An array where keys are class names and values factory callables + */ + public function __construct(array $map = []) + { + $this->map = $map; + } + + public function load(string $class) + { + if (!isset($this->map[$class])) { + return null; + } + + $runtimeFactory = $this->map[$class]; + + return $runtimeFactory(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php new file mode 100644 index 0000000..9e5b204 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\RuntimeLoader; + +/** + * Creates runtime implementations for Twig elements (filters/functions/tests). + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface RuntimeLoaderInterface +{ + /** + * Creates the runtime implementation of a Twig element (filter/function/test). + * + * @return object|null The runtime instance or null if the loader does not know how to create the runtime for this class + */ + public function load(string $class); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityError.php new file mode 100644 index 0000000..30a404f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityError.php @@ -0,0 +1,23 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +use Twig\Error\Error; + +/** + * Exception thrown when a security error occurs at runtime. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +class SecurityError extends Error +{ +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php new file mode 100644 index 0000000..02d3063 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Exception thrown when a not allowed filter is used in a template. + * + * @author Martin Hasoň <martin.hason@gmail.com> + */ +final class SecurityNotAllowedFilterError extends SecurityError +{ + private $filterName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->filterName = $functionName; + } + + public function getFilterName(): string + { + return $this->filterName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php new file mode 100644 index 0000000..4f76dc6 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Exception thrown when a not allowed function is used in a template. + * + * @author Martin Hasoň <martin.hason@gmail.com> + */ +final class SecurityNotAllowedFunctionError extends SecurityError +{ + private $functionName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->functionName = $functionName; + } + + public function getFunctionName(): string + { + return $this->functionName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php new file mode 100644 index 0000000..8df9d0b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Exception thrown when a not allowed class method is used in a template. + * + * @author Kit Burton-Senior <mail@kitbs.com> + */ +final class SecurityNotAllowedMethodError extends SecurityError +{ + private $className; + private $methodName; + + public function __construct(string $message, string $className, string $methodName) + { + parent::__construct($message); + $this->className = $className; + $this->methodName = $methodName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getMethodName() + { + return $this->methodName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php new file mode 100644 index 0000000..42ec4f3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php @@ -0,0 +1,40 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Exception thrown when a not allowed class property is used in a template. + * + * @author Kit Burton-Senior <mail@kitbs.com> + */ +final class SecurityNotAllowedPropertyError extends SecurityError +{ + private $className; + private $propertyName; + + public function __construct(string $message, string $className, string $propertyName) + { + parent::__construct($message); + $this->className = $className; + $this->propertyName = $propertyName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getPropertyName() + { + return $this->propertyName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php new file mode 100644 index 0000000..4522150 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Exception thrown when a not allowed tag is used in a template. + * + * @author Martin Hasoň <martin.hason@gmail.com> + */ +final class SecurityNotAllowedTagError extends SecurityError +{ + private $tagName; + + public function __construct(string $message, string $tagName) + { + parent::__construct($message); + $this->tagName = $tagName; + } + + public function getTagName(): string + { + return $this->tagName; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicy.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicy.php new file mode 100644 index 0000000..417d38a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicy.php @@ -0,0 +1,124 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +use Twig\Markup; +use Twig\Template; + +/** + * Represents a security policy which need to be enforced when sandbox mode is enabled. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class SecurityPolicy implements SecurityPolicyInterface +{ + private $allowedTags; + private $allowedFilters; + private $allowedMethods; + private $allowedProperties; + private $allowedFunctions; + + public function __construct(array $allowedTags = [], array $allowedFilters = [], array $allowedMethods = [], array $allowedProperties = [], array $allowedFunctions = []) + { + $this->allowedTags = $allowedTags; + $this->allowedFilters = $allowedFilters; + $this->setAllowedMethods($allowedMethods); + $this->allowedProperties = $allowedProperties; + $this->allowedFunctions = $allowedFunctions; + } + + public function setAllowedTags(array $tags): void + { + $this->allowedTags = $tags; + } + + public function setAllowedFilters(array $filters): void + { + $this->allowedFilters = $filters; + } + + public function setAllowedMethods(array $methods): void + { + $this->allowedMethods = []; + foreach ($methods as $class => $m) { + $this->allowedMethods[$class] = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, \is_array($m) ? $m : [$m]); + } + } + + public function setAllowedProperties(array $properties): void + { + $this->allowedProperties = $properties; + } + + public function setAllowedFunctions(array $functions): void + { + $this->allowedFunctions = $functions; + } + + public function checkSecurity($tags, $filters, $functions): void + { + foreach ($tags as $tag) { + if (!\in_array($tag, $this->allowedTags)) { + throw new SecurityNotAllowedTagError(\sprintf('Tag "%s" is not allowed.', $tag), $tag); + } + } + + foreach ($filters as $filter) { + if (!\in_array($filter, $this->allowedFilters)) { + throw new SecurityNotAllowedFilterError(\sprintf('Filter "%s" is not allowed.', $filter), $filter); + } + } + + foreach ($functions as $function) { + if (!\in_array($function, $this->allowedFunctions)) { + throw new SecurityNotAllowedFunctionError(\sprintf('Function "%s" is not allowed.', $function), $function); + } + } + } + + public function checkMethodAllowed($obj, $method): void + { + if ($obj instanceof Template || $obj instanceof Markup) { + return; + } + + $allowed = false; + $method = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + foreach ($this->allowedMethods as $class => $methods) { + if ($obj instanceof $class && \in_array($method, $methods)) { + $allowed = true; + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedMethodError(\sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, $class), $class, $method); + } + } + + public function checkPropertyAllowed($obj, $property): void + { + $allowed = false; + foreach ($this->allowedProperties as $class => $properties) { + if ($obj instanceof $class && \in_array($property, \is_array($properties) ? $properties : [$properties])) { + $allowed = true; + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedPropertyError(\sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, $class), $class, $property); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php new file mode 100644 index 0000000..36471c5 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php @@ -0,0 +1,45 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +/** + * Interface that all security policy classes must implements. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +interface SecurityPolicyInterface +{ + /** + * @param string[] $tags + * @param string[] $filters + * @param string[] $functions + * + * @throws SecurityError + */ + public function checkSecurity($tags, $filters, $functions): void; + + /** + * @param object $obj + * @param string $method + * + * @throws SecurityNotAllowedMethodError + */ + public function checkMethodAllowed($obj, $method): void; + + /** + * @param object $obj + * @param string $property + * + * @throws SecurityNotAllowedPropertyError + */ + public function checkPropertyAllowed($obj, $property): void; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php new file mode 100644 index 0000000..b952f1e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php @@ -0,0 +1,24 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Sandbox; + +use Twig\Source; + +/** + * Interface for a class that can optionally enable the sandbox mode based on a template's Twig\Source. + * + * @author Yaakov Saxon + */ +interface SourcePolicyInterface +{ + public function enableSandbox(Source $source): bool; +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Source.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Source.php new file mode 100644 index 0000000..3cb0240 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Source.php @@ -0,0 +1,51 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +/** + * Holds information about a non-compiled Twig template. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class Source +{ + private $code; + private $name; + private $path; + + /** + * @param string $code The template source code + * @param string $name The template logical name + * @param string $path The filesystem path of the template if any + */ + public function __construct(string $code, string $name, string $path = '') + { + $this->code = $code; + $this->name = $name; + $this->path = $path; + } + + public function getCode(): string + { + return $this->code; + } + + public function getName(): string + { + return $this->name; + } + + public function getPath(): string + { + return $this->path; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Template.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Template.php new file mode 100644 index 0000000..04c530c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Template.php @@ -0,0 +1,505 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +use Twig\Error\Error; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; + +/** + * Default base class for compiled templates. + * + * This class is an implementation detail of how template compilation currently + * works, which might change. It should never be used directly. Use $twig->load() + * instead, which returns an instance of \Twig\TemplateWrapper. + * + * @author Fabien Potencier <fabien@symfony.com> + * + * @internal + */ +abstract class Template +{ + public const ANY_CALL = 'any'; + public const ARRAY_CALL = 'array'; + public const METHOD_CALL = 'method'; + + protected $parent; + protected $parents = []; + protected $env; + protected $blocks = []; + protected $traits = []; + protected $extensions = []; + protected $sandbox; + + private $useYield; + + public function __construct(Environment $env) + { + $this->env = $env; + $this->useYield = $env->useYield(); + $this->extensions = $env->getExtensions(); + } + + /** + * Returns the template name. + * + * @return string The template name + */ + abstract public function getTemplateName(); + + /** + * Returns debug information about the template. + * + * @return array Debug information + */ + abstract public function getDebugInfo(); + + /** + * Returns information about the original template source code. + * + * @return Source + */ + abstract public function getSourceContext(); + + /** + * Returns the parent template. + * + * This method is for internal use only and should never be called + * directly. + * + * @return self|TemplateWrapper|false The parent template or false if there is no parent + */ + public function getParent(array $context) + { + if (null !== $this->parent) { + return $this->parent; + } + + try { + if (!$parent = $this->doGetParent($context)) { + return false; + } + + if ($parent instanceof self || $parent instanceof TemplateWrapper) { + return $this->parents[$parent->getSourceContext()->getName()] = $parent; + } + + if (!isset($this->parents[$parent])) { + $this->parents[$parent] = $this->loadTemplate($parent); + } + } catch (LoaderError $e) { + $e->setSourceContext(null); + $e->guess(); + + throw $e; + } + + return $this->parents[$parent]; + } + + protected function doGetParent(array $context) + { + return false; + } + + public function isTraitable() + { + return true; + } + + /** + * Displays a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + */ + public function displayParentBlock($name, array $context, array $blocks = []) + { + foreach ($this->yieldParentBlock($name, $context, $blocks) as $data) { + echo $data; + } + } + + /** + * Displays a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + */ + public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null) + { + foreach ($this->yieldBlock($name, $context, $blocks, $useBlocks, $templateContext) as $data) { + echo $data; + } + } + + /** + * Renders a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return string The rendered block + */ + public function renderParentBlock($name, array $context, array $blocks = []) + { + $content = ''; + foreach ($this->yieldParentBlock($name, $context, $blocks) as $data) { + $content .= $data; + } + + return $content; + } + + /** + * Renders a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + * + * @return string The rendered block + */ + public function renderBlock($name, array $context, array $blocks = [], $useBlocks = true) + { + $content = ''; + foreach ($this->yieldBlock($name, $context, $blocks, $useBlocks) as $data) { + $content .= $data; + } + + return $content; + } + + /** + * Returns whether a block exists or not in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param string $name The block name + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return bool true if the block exists, false otherwise + */ + public function hasBlock($name, array $context, array $blocks = []) + { + if (isset($blocks[$name])) { + return $blocks[$name][0] instanceof self; + } + + if (isset($this->blocks[$name])) { + return true; + } + + if ($parent = $this->getParent($context)) { + return $parent->hasBlock($name, $context); + } + + return false; + } + + /** + * Returns all block names in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return array An array of block names + */ + public function getBlockNames(array $context, array $blocks = []) + { + $names = array_merge(array_keys($blocks), array_keys($this->blocks)); + + if ($parent = $this->getParent($context)) { + $names = array_merge($names, $parent->getBlockNames($context)); + } + + return array_unique($names); + } + + /** + * @param string|TemplateWrapper|array<string|TemplateWrapper> $template + * + * @return self|TemplateWrapper + */ + protected function loadTemplate($template, $templateName = null, $line = null, $index = null) + { + try { + if (\is_array($template)) { + return $this->env->resolveTemplate($template); + } + + if ($template instanceof TemplateWrapper) { + return $template; + } + + if ($template instanceof self) { + trigger_deprecation('twig/twig', '3.9', 'Passing a "%s" instance to "%s" is deprecated.', self::class, __METHOD__); + + return $template; + } + + if ($template === $this->getTemplateName()) { + $class = static::class; + if (false !== $pos = strrpos($class, '___', -1)) { + $class = substr($class, 0, $pos); + } + } else { + $class = $this->env->getTemplateClass($template); + } + + return $this->env->loadTemplate($class, $template, $index); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($templateName ? new Source('', $templateName) : $this->getSourceContext()); + } + + if ($e->getTemplateLine() > 0) { + throw $e; + } + + if (!$line) { + $e->guess(); + } else { + $e->setTemplateLine($line); + } + + throw $e; + } + } + + /** + * @internal + * + * @return self + */ + public function unwrap() + { + return $this; + } + + /** + * Returns all blocks. + * + * This method is for internal use only and should never be called + * directly. + * + * @return array An array of blocks + */ + public function getBlocks() + { + return $this->blocks; + } + + public function display(array $context, array $blocks = []): void + { + foreach ($this->yield($context, $blocks) as $data) { + echo $data; + } + } + + public function render(array $context): string + { + $content = ''; + foreach ($this->yield($context) as $data) { + $content .= $data; + } + + return $content; + } + + /** + * @return iterable<string> + */ + public function yield(array $context, array $blocks = []): iterable + { + $context = $this->env->mergeGlobals($context); + $blocks = array_merge($this->blocks, $blocks); + + try { + if ($this->useYield) { + yield from $this->doDisplay($context, $blocks); + + return; + } + + $level = ob_get_level(); + ob_start(); + + foreach ($this->doDisplay($context, $blocks) as $data) { + if (ob_get_length()) { + $data = ob_get_clean().$data; + ob_start(); + } + + yield $data; + } + + if (ob_get_length()) { + yield ob_get_clean(); + } + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Throwable $e) { + $e = new RuntimeError(\sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e); + $e->guess(); + + throw $e; + } finally { + if (!$this->useYield) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + } + } + } + + /** + * @return iterable<string> + */ + public function yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null) + { + if ($useBlocks && isset($blocks[$name])) { + $template = $blocks[$name][0]; + $block = $blocks[$name][1]; + } elseif (isset($this->blocks[$name])) { + $template = $this->blocks[$name][0]; + $block = $this->blocks[$name][1]; + } else { + $template = null; + $block = null; + } + + // avoid RCEs when sandbox is enabled + if (null !== $template && !$template instanceof self) { + throw new \LogicException('A block must be a method on a \Twig\Template instance.'); + } + + if (null !== $template) { + try { + if ($this->useYield) { + yield from $template->$block($context, $blocks); + + return; + } + + $level = ob_get_level(); + ob_start(); + + foreach ($template->$block($context, $blocks) as $data) { + if (ob_get_length()) { + $data = ob_get_clean().$data; + ob_start(); + } + + yield $data; + } + + if (ob_get_length()) { + yield ob_get_clean(); + } + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($template->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Throwable $e) { + $e = new RuntimeError(\sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e); + $e->guess(); + + throw $e; + } finally { + if (!$this->useYield) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + } + } + } elseif ($parent = $this->getParent($context)) { + yield from $parent->unwrap()->yieldBlock($name, $context, array_merge($this->blocks, $blocks), false, $templateContext ?? $this); + } elseif (isset($blocks[$name])) { + throw new RuntimeError(\sprintf('Block "%s" should not call parent() in "%s" as the block does not exist in the parent template "%s".', $name, $blocks[$name][0]->getTemplateName(), $this->getTemplateName()), -1, $blocks[$name][0]->getSourceContext()); + } else { + throw new RuntimeError(\sprintf('Block "%s" on template "%s" does not exist.', $name, $this->getTemplateName()), -1, ($templateContext ?? $this)->getSourceContext()); + } + } + + /** + * Yields a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return iterable<string> + */ + public function yieldParentBlock($name, array $context, array $blocks = []) + { + if (isset($this->traits[$name])) { + yield from $this->traits[$name][0]->yieldBlock($name, $context, $blocks, false); + } elseif ($parent = $this->getParent($context)) { + yield from $parent->unwrap()->yieldBlock($name, $context, $blocks, false); + } else { + throw new RuntimeError(\sprintf('The template has no parent and no traits defining the "%s" block.', $name), -1, $this->getSourceContext()); + } + } + + /** + * Auto-generated method to display the template with the given context. + * + * @param array $context An array of parameters to pass to the template + * @param array $blocks An array of blocks to pass to the template + */ + abstract protected function doDisplay(array $context, array $blocks = []); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TemplateWrapper.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TemplateWrapper.php new file mode 100644 index 0000000..fcfb070 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TemplateWrapper.php @@ -0,0 +1,93 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +/** + * Exposes a template to userland. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +final class TemplateWrapper +{ + private $env; + private $template; + + /** + * This method is for internal use only and should never be called + * directly (use Twig\Environment::load() instead). + * + * @internal + */ + public function __construct(Environment $env, Template $template) + { + $this->env = $env; + $this->template = $template; + } + + public function render(array $context = []): string + { + return $this->template->render($context); + } + + public function display(array $context = []) + { + // using func_get_args() allows to not expose the blocks argument + // as it should only be used by internal code + $this->template->display($context, \func_get_args()[1] ?? []); + } + + public function hasBlock(string $name, array $context = []): bool + { + return $this->template->hasBlock($name, $context); + } + + /** + * @return string[] An array of defined template block names + */ + public function getBlockNames(array $context = []): array + { + return $this->template->getBlockNames($context); + } + + public function renderBlock(string $name, array $context = []): string + { + return $this->template->renderBlock($name, $this->env->mergeGlobals($context)); + } + + public function displayBlock(string $name, array $context = []) + { + $context = $this->env->mergeGlobals($context); + foreach ($this->template->yieldBlock($name, $context) as $data) { + echo $data; + } + } + + public function getSourceContext(): Source + { + return $this->template->getSourceContext(); + } + + public function getTemplateName(): string + { + return $this->template->getTemplateName(); + } + + /** + * @internal + * + * @return Template + */ + public function unwrap() + { + return $this->template; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/IntegrationTestCase.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/IntegrationTestCase.php new file mode 100644 index 0000000..5519dd0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/IntegrationTestCase.php @@ -0,0 +1,262 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Test; + +use PHPUnit\Framework\TestCase; +use Twig\Environment; +use Twig\Error\Error; +use Twig\Extension\ExtensionInterface; +use Twig\Loader\ArrayLoader; +use Twig\RuntimeLoader\RuntimeLoaderInterface; +use Twig\TwigFilter; +use Twig\TwigFunction; +use Twig\TwigTest; + +/** + * Integration test helper. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Karma Dordrak <drak@zikula.org> + */ +abstract class IntegrationTestCase extends TestCase +{ + /** + * @return string + */ + abstract protected function getFixturesDir(); + + /** + * @return RuntimeLoaderInterface[] + */ + protected function getRuntimeLoaders() + { + return []; + } + + /** + * @return ExtensionInterface[] + */ + protected function getExtensions() + { + return []; + } + + /** + * @return TwigFilter[] + */ + protected function getTwigFilters() + { + return []; + } + + /** + * @return TwigFunction[] + */ + protected function getTwigFunctions() + { + return []; + } + + /** + * @return TwigTest[] + */ + protected function getTwigTests() + { + return []; + } + + /** + * @dataProvider getTests + */ + public function testIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + /** + * @dataProvider getLegacyTests + * + * @group legacy + */ + public function testLegacyIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + public function getTests($name, $legacyTests = false) + { + $fixturesDir = realpath($this->getFixturesDir()); + $tests = []; + + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { + if (!preg_match('/\.test$/', $file)) { + continue; + } + + if ($legacyTests xor str_contains($file->getRealpath(), '.legacy.test')) { + continue; + } + + $test = file_get_contents($file->getRealpath()); + + if (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = $match[6]; + $outputs = [[null, $match[5], null, '']]; + } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = false; + preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, \PREG_SET_ORDER); + } else { + throw new \InvalidArgumentException(\sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file))); + } + + $tests[] = [str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs, $deprecation]; + } + + if ($legacyTests && empty($tests)) { + // add a dummy test to avoid a PHPUnit message + return [['not', '-', '', [], '', []]]; + } + + return $tests; + } + + public function getLegacyTests() + { + return $this->getTests('testLegacyIntegration', true); + } + + protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + if (!$outputs) { + $this->markTestSkipped('no tests to run'); + } + + if ($condition) { + $ret = ''; + eval('$ret = '.$condition.';'); + if (!$ret) { + $this->markTestSkipped($condition); + } + } + + $loader = new ArrayLoader($templates); + + foreach ($outputs as $i => $match) { + $config = array_merge([ + 'cache' => false, + 'strict_variables' => true, + ], $match[2] ? eval($match[2].';') : []); + $twig = new Environment($loader, $config); + $twig->addGlobal('global', 'global'); + foreach ($this->getRuntimeLoaders() as $runtimeLoader) { + $twig->addRuntimeLoader($runtimeLoader); + } + + foreach ($this->getExtensions() as $extension) { + $twig->addExtension($extension); + } + + foreach ($this->getTwigFilters() as $filter) { + $twig->addFilter($filter); + } + + foreach ($this->getTwigTests() as $test) { + $twig->addTest($test); + } + + foreach ($this->getTwigFunctions() as $function) { + $twig->addFunction($function); + } + + $deprecations = []; + try { + $prevHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$deprecations, &$prevHandler) { + if (\E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + + return true; + } + + return $prevHandler ? $prevHandler($type, $msg, $file, $line, $context) : false; + }); + + $template = $twig->load('index.twig'); + } catch (\Exception $e) { + if (false !== $exception) { + $message = $e->getMessage(); + $this->assertSame(trim($exception), trim(\sprintf('%s: %s', \get_class($e), $message))); + $last = substr($message, \strlen($message) - 1); + $this->assertTrue('.' === $last || '?' === $last, 'Exception message must end with a dot or a question mark.'); + + return; + } + + throw new Error(\sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + } finally { + restore_error_handler(); + } + + $this->assertSame($deprecation, implode("\n", $deprecations)); + + try { + $output = trim($template->render(eval($match[1].';')), "\n "); + } catch (\Exception $e) { + if (false !== $exception) { + $this->assertSame(trim($exception), trim(\sprintf('%s: %s', \get_class($e), $e->getMessage()))); + + return; + } + + $e = new Error(\sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + + $output = trim(\sprintf('%s: %s', \get_class($e), $e->getMessage())); + } + + if (false !== $exception) { + [$class] = explode(':', $exception); + $constraintClass = class_exists('PHPUnit\Framework\Constraint\Exception') ? 'PHPUnit\Framework\Constraint\Exception' : 'PHPUnit_Framework_Constraint_Exception'; + $this->assertThat(null, new $constraintClass($class)); + } + + $expected = trim($match[3], "\n "); + + if ($expected !== $output) { + printf("Compiled templates that failed on case %d:\n", $i + 1); + + foreach (array_keys($templates) as $name) { + echo "Template: $name\n"; + echo $twig->compile($twig->parse($twig->tokenize($twig->getLoader()->getSourceContext($name)))); + } + } + $this->assertEquals($expected, $output, $message.' (in '.$file.')'); + } + } + + protected static function parseTemplates($test) + { + $templates = []; + preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, \PREG_SET_ORDER); + foreach ($matches as $match) { + $templates[$match[1] ?: 'index.twig'] = $match[2]; + } + + return $templates; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/NodeTestCase.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/NodeTestCase.php new file mode 100644 index 0000000..4046f08 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Test/NodeTestCase.php @@ -0,0 +1,74 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\Test; + +use PHPUnit\Framework\TestCase; +use Twig\Compiler; +use Twig\Environment; +use Twig\Loader\ArrayLoader; +use Twig\Node\Node; + +abstract class NodeTestCase extends TestCase +{ + /** + * @var Environment + */ + private $currentEnv; + + abstract public function getTests(); + + /** + * @dataProvider getTests + */ + public function testCompile($node, $source, $environment = null, $isPattern = false) + { + $this->assertNodeCompilation($source, $node, $environment, $isPattern); + } + + public function assertNodeCompilation($source, Node $node, ?Environment $environment = null, $isPattern = false) + { + $compiler = $this->getCompiler($environment); + $compiler->compile($node); + + if ($isPattern) { + $this->assertStringMatchesFormat($source, trim($compiler->getSource())); + } else { + $this->assertEquals($source, trim($compiler->getSource())); + } + } + + protected function getCompiler(?Environment $environment = null) + { + return new Compiler($environment ?? $this->getEnvironment()); + } + + protected function getEnvironment() + { + if (!$this->currentEnv) { + $this->currentEnv = new Environment(new ArrayLoader()); + } + + return $this->currentEnv; + } + + protected function getVariableGetter($name, $line = false) + { + $line = $line > 0 ? "// line $line\n" : ''; + + return \sprintf('%s($context["%s"] ?? null)', $line, $name); + } + + protected function getAttributeGetter() + { + return 'CoreExtension::getAttribute($this->env, $this->source, '; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Token.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Token.php new file mode 100644 index 0000000..5be39bd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Token.php @@ -0,0 +1,184 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig; + +/** + * @author Fabien Potencier <fabien@symfony.com> + */ +final class Token +{ + private $value; + private $type; + private $lineno; + + public const EOF_TYPE = -1; + public const TEXT_TYPE = 0; + public const BLOCK_START_TYPE = 1; + public const VAR_START_TYPE = 2; + public const BLOCK_END_TYPE = 3; + public const VAR_END_TYPE = 4; + public const NAME_TYPE = 5; + public const NUMBER_TYPE = 6; + public const STRING_TYPE = 7; + public const OPERATOR_TYPE = 8; + public const PUNCTUATION_TYPE = 9; + public const INTERPOLATION_START_TYPE = 10; + public const INTERPOLATION_END_TYPE = 11; + public const ARROW_TYPE = 12; + public const SPREAD_TYPE = 13; + + public function __construct(int $type, $value, int $lineno) + { + $this->type = $type; + $this->value = $value; + $this->lineno = $lineno; + } + + public function __toString() + { + return \sprintf('%s(%s)', self::typeToString($this->type, true), $this->value); + } + + /** + * Tests the current token for a type and/or a value. + * + * Parameters may be: + * * just type + * * type and value (or array of possible values) + * * just value (or array of possible values) (NAME_TYPE is used as type) + * + * @param array|string|int $type The type to test + * @param array|string|null $values The token value + */ + public function test($type, $values = null): bool + { + if (null === $values && !\is_int($type)) { + $values = $type; + $type = self::NAME_TYPE; + } + + return ($this->type === $type) && ( + null === $values + || (\is_array($values) && \in_array($this->value, $values)) + || $this->value == $values + ); + } + + public function getLine(): int + { + return $this->lineno; + } + + public function getType(): int + { + return $this->type; + } + + public function getValue() + { + return $this->value; + } + + public static function typeToString(int $type, bool $short = false): string + { + switch ($type) { + case self::EOF_TYPE: + $name = 'EOF_TYPE'; + break; + case self::TEXT_TYPE: + $name = 'TEXT_TYPE'; + break; + case self::BLOCK_START_TYPE: + $name = 'BLOCK_START_TYPE'; + break; + case self::VAR_START_TYPE: + $name = 'VAR_START_TYPE'; + break; + case self::BLOCK_END_TYPE: + $name = 'BLOCK_END_TYPE'; + break; + case self::VAR_END_TYPE: + $name = 'VAR_END_TYPE'; + break; + case self::NAME_TYPE: + $name = 'NAME_TYPE'; + break; + case self::NUMBER_TYPE: + $name = 'NUMBER_TYPE'; + break; + case self::STRING_TYPE: + $name = 'STRING_TYPE'; + break; + case self::OPERATOR_TYPE: + $name = 'OPERATOR_TYPE'; + break; + case self::PUNCTUATION_TYPE: + $name = 'PUNCTUATION_TYPE'; + break; + case self::INTERPOLATION_START_TYPE: + $name = 'INTERPOLATION_START_TYPE'; + break; + case self::INTERPOLATION_END_TYPE: + $name = 'INTERPOLATION_END_TYPE'; + break; + case self::ARROW_TYPE: + $name = 'ARROW_TYPE'; + break; + case self::SPREAD_TYPE: + $name = 'SPREAD_TYPE'; + break; + default: + throw new \LogicException(\sprintf('Token of type "%s" does not exist.', $type)); + } + + return $short ? $name : 'Twig\Token::'.$name; + } + + public static function typeToEnglish(int $type): string + { + switch ($type) { + case self::EOF_TYPE: + return 'end of template'; + case self::TEXT_TYPE: + return 'text'; + case self::BLOCK_START_TYPE: + return 'begin of statement block'; + case self::VAR_START_TYPE: + return 'begin of print statement'; + case self::BLOCK_END_TYPE: + return 'end of statement block'; + case self::VAR_END_TYPE: + return 'end of print statement'; + case self::NAME_TYPE: + return 'name'; + case self::NUMBER_TYPE: + return 'number'; + case self::STRING_TYPE: + return 'string'; + case self::OPERATOR_TYPE: + return 'operator'; + case self::PUNCTUATION_TYPE: + return 'punctuation'; + case self::INTERPOLATION_START_TYPE: + return 'begin of string interpolation'; + case self::INTERPOLATION_END_TYPE: + return 'end of string interpolation'; + case self::ARROW_TYPE: + return 'arrow function'; + case self::SPREAD_TYPE: + return 'spread operator'; + default: + throw new \LogicException(\sprintf('Token of type "%s" does not exist.', $type)); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php new file mode 100644 index 0000000..720ea67 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php @@ -0,0 +1,32 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\TokenParser; + +use Twig\Parser; + +/** + * Base class for all token parsers. + * + * @author Fabien Potencier <fabien@symfony.com> + */ +abstract class AbstractTokenParser implements TokenParserInterface +{ + /** + * @var Parser + */ + protected $parser; + + public function setParser(Parser $parser): void + { + $this->parser = $parser; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php new file mode 100644 index 0000000..4dbf304 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php @@ -0,0 +1,60 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\TokenParser; + +use Twig\Node\Expression\TempNameExpression; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Node\SetNode; +use Twig\Token; + +/** + * Applies filters on a section of a template. + * + * {% apply upper %} + * This text becomes uppercase + * {% endapply %} + * + * @internal + */ +final class ApplyTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $name = $this->parser->getVarName(); + + $ref = new TempNameExpression($name, $lineno); + $ref->setAttribute('always_defined', true); + + $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + $body = $this->parser->subparse([$this, 'decideApplyEnd'], true); + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new Node([ + new SetNode(true, $ref, $body, $lineno, $this->getTag()), + new PrintNode($filter, $lineno, $this->getTag()), + ]); + } + + public function decideApplyEnd(Token $token): bool + { + return $token->test('endapply'); + } + + public function getTag(): string + { + return 'apply'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php new file mode 100644 index 0000000..b674bea --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php @@ -0,0 +1,58 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\TokenParser; + +use Twig\Error\SyntaxError; +use Twig\Node\AutoEscapeNode; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Node; +use Twig\Token; + +/** + * Marks a section of a template to be escaped or not. + * + * @internal + */ +final class AutoEscapeTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + + if ($stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $value = 'html'; + } else { + $expr = $this->parser->getExpressionParser()->parseExpression(); + if (!$expr instanceof ConstantExpression) { + throw new SyntaxError('An escaping strategy must be a string or false.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $value = $expr->getAttribute('value'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new AutoEscapeNode($value, $body, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endautoescape'); + } + + public function getTag(): string + { + return 'autoescape'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/BlockTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/BlockTokenParser.php new file mode 100644 index 0000000..c654d31 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/BlockTokenParser.php @@ -0,0 +1,78 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) Fabien Potencier + * (c) Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Twig\TokenParser; + +use Twig\Error\SyntaxError; +use Twig\Node\BlockNode; +use Twig\Node\BlockReferenceNode; +use Twig\Node\Node; +use Twig\Node\PrintNode; +use Twig\Token; + +/** + * Marks a section of a template as being reusable. + * + * {% block head %} + * <link rel="stylesheet" href="style.css" /> + * <title>{% block title %}{% endblock %} - My Webpage + * {% endblock %} + * + * @internal + */ +final class BlockTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + if ($this->parser->hasBlock($name)) { + throw new SyntaxError(\sprintf("The block '%s' has already been defined line %d.", $name, $this->parser->getBlock($name)->getTemplateLine()), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $this->parser->setBlock($name, $block = new BlockNode($name, new Node([]), $lineno)); + $this->parser->pushLocalScope(); + $this->parser->pushBlockStack($name); + + if ($stream->nextIf(/* Token::BLOCK_END_TYPE */ 3)) { + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(\sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + } else { + $body = new Node([ + new PrintNode($this->parser->getExpressionParser()->parseExpression(), $lineno), + ]); + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $block->setNode('body', $body); + $this->parser->popBlockStack(); + $this->parser->popLocalScope(); + + return new BlockReferenceNode($name, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endblock'); + } + + public function getTag(): string + { + return 'block'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php new file mode 100644 index 0000000..c17c4aa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php @@ -0,0 +1,66 @@ + + * + * @internal + */ +final class DeprecatedTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $stream = $this->parser->getStream(); + $expressionParser = $this->parser->getExpressionParser(); + $expr = $expressionParser->parseExpression(); + $node = new DeprecatedNode($expr, $token->getLine(), $this->getTag()); + + while ($stream->test(Token::NAME_TYPE)) { + $k = $stream->getCurrent()->getValue(); + $stream->next(); + $stream->expect(Token::OPERATOR_TYPE, '='); + + switch ($k) { + case 'package': + $node->setNode('package', $expressionParser->parseExpression()); + break; + case 'version': + $node->setNode('version', $expressionParser->parseExpression()); + break; + default: + throw new SyntaxError(\sprintf('Unknown "%s" option.', $k), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + + $stream->expect(Token::BLOCK_END_TYPE); + + return $node; + } + + public function getTag(): string + { + return 'deprecated'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DoTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DoTokenParser.php new file mode 100644 index 0000000..32c8f12 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/DoTokenParser.php @@ -0,0 +1,38 @@ +parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new DoNode($expr, $token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'do'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php new file mode 100644 index 0000000..adf683c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php @@ -0,0 +1,73 @@ +parser->getStream(); + + $parent = $this->parser->getExpressionParser()->parseExpression(); + + [$variables, $only, $ignoreMissing] = $this->parseArguments(); + + $parentToken = $fakeParentToken = new Token(/* Token::STRING_TYPE */ 7, '__parent__', $token->getLine()); + if ($parent instanceof ConstantExpression) { + $parentToken = new Token(/* Token::STRING_TYPE */ 7, $parent->getAttribute('value'), $token->getLine()); + } elseif ($parent instanceof NameExpression) { + $parentToken = new Token(/* Token::NAME_TYPE */ 5, $parent->getAttribute('name'), $token->getLine()); + } + + // inject a fake parent to make the parent() function work + $stream->injectTokens([ + new Token(/* Token::BLOCK_START_TYPE */ 1, '', $token->getLine()), + new Token(/* Token::NAME_TYPE */ 5, 'extends', $token->getLine()), + $parentToken, + new Token(/* Token::BLOCK_END_TYPE */ 3, '', $token->getLine()), + ]); + + $module = $this->parser->parse($stream, [$this, 'decideBlockEnd'], true); + + // override the parent with the correct one + if ($fakeParentToken === $parentToken) { + $module->setNode('parent', $parent); + } + + $this->parser->embedTemplate($module); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new EmbedNode($module->getTemplateName(), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endembed'); + } + + public function getTag(): string + { + return 'embed'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php new file mode 100644 index 0000000..0ca46dd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php @@ -0,0 +1,52 @@ +parser->getStream(); + + if ($this->parser->peekBlockStack()) { + throw new SyntaxError('Cannot use "extend" in a block.', $token->getLine(), $stream->getSourceContext()); + } elseif (!$this->parser->isMainScope()) { + throw new SyntaxError('Cannot use "extend" in a macro.', $token->getLine(), $stream->getSourceContext()); + } + + if (null !== $this->parser->getParent()) { + throw new SyntaxError('Multiple extends tags are forbidden.', $token->getLine(), $stream->getSourceContext()); + } + $this->parser->setParent($this->parser->getExpressionParser()->parseExpression()); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new Node(); + } + + public function getTag(): string + { + return 'extends'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FlushTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FlushTokenParser.php new file mode 100644 index 0000000..02c74aa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FlushTokenParser.php @@ -0,0 +1,38 @@ +parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new FlushNode($token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'flush'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ForTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ForTokenParser.php new file mode 100644 index 0000000..1af6da8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ForTokenParser.php @@ -0,0 +1,78 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + * + * @internal + */ +final class ForTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $targets = $this->parser->getExpressionParser()->parseAssignmentExpression(); + $stream->expect(/* Token::OPERATOR_TYPE */ 8, 'in'); + $seq = $this->parser->getExpressionParser()->parseExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideForFork']); + if ('else' == $stream->next()->getValue()) { + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideForEnd'], true); + } else { + $else = null; + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($targets) > 1) { + $keyTarget = $targets->getNode('0'); + $keyTarget = new AssignNameExpression($keyTarget->getAttribute('name'), $keyTarget->getTemplateLine()); + $valueTarget = $targets->getNode('1'); + } else { + $keyTarget = new AssignNameExpression('_key', $lineno); + $valueTarget = $targets->getNode('0'); + } + $valueTarget = new AssignNameExpression($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine()); + + return new ForNode($keyTarget, $valueTarget, $seq, null, $body, $else, $lineno, $this->getTag()); + } + + public function decideForFork(Token $token): bool + { + return $token->test(['else', 'endfor']); + } + + public function decideForEnd(Token $token): bool + { + return $token->test('endfor'); + } + + public function getTag(): string + { + return 'for'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FromTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FromTokenParser.php new file mode 100644 index 0000000..31b6cde --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/FromTokenParser.php @@ -0,0 +1,66 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::NAME_TYPE */ 5, 'import'); + + $targets = []; + while (true) { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = $alias; + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $var = new AssignNameExpression($this->parser->getVarName(), $token->getLine()); + $node = new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + + foreach ($targets as $name => $alias) { + $this->parser->addImportedSymbol('function', $alias, 'macro_'.$name, $var); + } + + return $node; + } + + public function getTag(): string + { + return 'from'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IfTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IfTokenParser.php new file mode 100644 index 0000000..569ccfa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IfTokenParser.php @@ -0,0 +1,89 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + * {% endif %} + * + * @internal + */ +final class IfTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests = [$expr, $body]; + $else = null; + + $end = false; + while (!$end) { + switch ($stream->next()->getValue()) { + case 'else': + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideIfEnd']); + break; + + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests[] = $expr; + $tests[] = $body; + break; + + case 'endif': + $end = true; + break; + + default: + throw new SyntaxError(\sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); + } + + public function decideIfFork(Token $token): bool + { + return $token->test(['elseif', 'else', 'endif']); + } + + public function decideIfEnd(Token $token): bool + { + return $token->test(['endif']); + } + + public function getTag(): string + { + return 'if'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ImportTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ImportTokenParser.php new file mode 100644 index 0000000..44cb4da --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/ImportTokenParser.php @@ -0,0 +1,44 @@ +parser->getExpressionParser()->parseExpression(); + $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5, 'as'); + $var = new AssignNameExpression($this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5)->getValue(), $token->getLine()); + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addImportedSymbol('template', $var->getAttribute('name')); + + return new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + } + + public function getTag(): string + { + return 'import'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php new file mode 100644 index 0000000..fda5bfd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php @@ -0,0 +1,69 @@ +parser->getExpressionParser()->parseExpression(); + + [$variables, $only, $ignoreMissing] = $this->parseArguments(); + + return new IncludeNode($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + protected function parseArguments() + { + $stream = $this->parser->getStream(); + + $ignoreMissing = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'ignore')) { + $stream->expect(/* Token::NAME_TYPE */ 5, 'missing'); + + $ignoreMissing = true; + } + + $variables = null; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'with')) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + } + + $only = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'only')) { + $only = true; + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return [$variables, $only, $ignoreMissing]; + } + + public function getTag(): string + { + return 'include'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/MacroTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/MacroTokenParser.php new file mode 100644 index 0000000..1f0e3e9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/MacroTokenParser.php @@ -0,0 +1,66 @@ + + * {% endmacro %} + * + * @internal + */ +final class MacroTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $this->parser->pushLocalScope(); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(\sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + $this->parser->popLocalScope(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag())); + + return new Node(); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endmacro'); + } + + public function getTag(): string + { + return 'macro'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php new file mode 100644 index 0000000..c919556 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php @@ -0,0 +1,66 @@ +parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + // in a sandbox tag, only include tags are allowed + if (!$body instanceof IncludeNode) { + foreach ($body as $node) { + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if (!$node instanceof IncludeNode) { + throw new SyntaxError('Only "include" tags are allowed within a "sandbox" section.', $node->getTemplateLine(), $stream->getSourceContext()); + } + } + } + + return new SandboxNode($body, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endsandbox'); + } + + public function getTag(): string + { + return 'sandbox'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SetTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SetTokenParser.php new file mode 100644 index 0000000..2fbdfe0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/SetTokenParser.php @@ -0,0 +1,73 @@ +getLine(); + $stream = $this->parser->getStream(); + $names = $this->parser->getExpressionParser()->parseAssignmentExpression(); + + $capture = false; + if ($stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + $values = $this->parser->getExpressionParser()->parseMultitargetExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($names) !== \count($values)) { + throw new SyntaxError('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } else { + $capture = true; + + if (\count($names) > 1) { + throw new SyntaxError('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $values = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + } + + return new SetNode($capture, $names, $values, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endset'); + } + + public function getTag(): string + { + return 'set'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/TokenParserInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/TokenParserInterface.php new file mode 100644 index 0000000..bb8db3e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/TokenParserInterface.php @@ -0,0 +1,46 @@ + + */ +interface TokenParserInterface +{ + /** + * Sets the parser associated with this token parser. + */ + public function setParser(Parser $parser): void; + + /** + * Parses a token and returns a node. + * + * @return Node + * + * @throws SyntaxError + */ + public function parse(Token $token); + + /** + * Gets the tag name associated with this token parser. + * + * @return string + */ + public function getTag(); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/UseTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/UseTokenParser.php new file mode 100644 index 0000000..3cdbb98 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/UseTokenParser.php @@ -0,0 +1,73 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + + if (!$template instanceof ConstantExpression) { + throw new SyntaxError('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $targets = []; + if ($stream->nextIf('with')) { + while (true) { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = new ConstantExpression($alias, -1); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addTrait(new Node(['template' => $template, 'targets' => new Node($targets)])); + + return new Node(); + } + + public function getTag(): string + { + return 'use'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/WithTokenParser.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/WithTokenParser.php new file mode 100644 index 0000000..7d8cbe2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenParser/WithTokenParser.php @@ -0,0 +1,56 @@ + + * + * @internal + */ +final class WithTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $stream = $this->parser->getStream(); + + $variables = null; + $only = false; + if (!$stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + $only = (bool) $stream->nextIf(/* Token::NAME_TYPE */ 5, 'only'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $body = $this->parser->subparse([$this, 'decideWithEnd'], true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new WithNode($body, $variables, $only, $token->getLine(), $this->getTag()); + } + + public function decideWithEnd(Token $token): bool + { + return $token->test('endwith'); + } + + public function getTag(): string + { + return 'with'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenStream.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenStream.php new file mode 100644 index 0000000..9921f78 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TokenStream.php @@ -0,0 +1,130 @@ + + */ +final class TokenStream +{ + private $tokens; + private $current = 0; + private $source; + + public function __construct(array $tokens, ?Source $source = null) + { + $this->tokens = $tokens; + $this->source = $source ?: new Source('', ''); + } + + public function __toString() + { + return implode("\n", $this->tokens); + } + + public function injectTokens(array $tokens) + { + $this->tokens = array_merge(\array_slice($this->tokens, 0, $this->current), $tokens, \array_slice($this->tokens, $this->current)); + } + + /** + * Sets the pointer to the next token and returns the old one. + */ + public function next(): Token + { + if (!isset($this->tokens[++$this->current])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current - 1]; + } + + /** + * Tests a token, sets the pointer to the next one and returns it or throws a syntax error. + * + * @return Token|null The next token if the condition is true, null otherwise + */ + public function nextIf($primary, $secondary = null) + { + return $this->tokens[$this->current]->test($primary, $secondary) ? $this->next() : null; + } + + /** + * Tests a token and returns it or throws a syntax error. + */ + public function expect($type, $value = null, ?string $message = null): Token + { + $token = $this->tokens[$this->current]; + if (!$token->test($type, $value)) { + $line = $token->getLine(); + throw new SyntaxError(\sprintf('%sUnexpected token "%s"%s ("%s" expected%s).', + $message ? $message.'. ' : '', + Token::typeToEnglish($token->getType()), + $token->getValue() ? \sprintf(' of value "%s"', $token->getValue()) : '', + Token::typeToEnglish($type), $value ? \sprintf(' with value "%s"', $value) : ''), + $line, + $this->source + ); + } + $this->next(); + + return $token; + } + + /** + * Looks at the next token. + */ + public function look(int $number = 1): Token + { + if (!isset($this->tokens[$this->current + $number])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current + $number]; + } + + /** + * Tests the current token. + */ + public function test($primary, $secondary = null): bool + { + return $this->tokens[$this->current]->test($primary, $secondary); + } + + /** + * Checks if end of stream was reached. + */ + public function isEOF(): bool + { + return /* Token::EOF_TYPE */ -1 === $this->tokens[$this->current]->getType(); + } + + public function getCurrent(): Token + { + return $this->tokens[$this->current]; + } + + /** + * Gets the source associated with this stream. + * + * @internal + */ + public function getSourceContext(): Source + { + return $this->source; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFilter.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFilter.php new file mode 100644 index 0000000..2b80df9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFilter.php @@ -0,0 +1,146 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#filters + */ +final class TwigFilter +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the filter. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'needs_charset' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'pre_escape' => null, + 'preserves_safety' => null, + 'node_class' => FilterExpression::class, + 'deprecated' => false, + 'deprecating_package' => '', + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this filter. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsCharset(): bool + { + return $this->options['needs_charset']; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $filterArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($filterArgs); + } + + return null; + } + + public function getPreservesSafety(): ?array + { + return $this->options['preserves_safety']; + } + + public function getPreEscape(): ?string + { + return $this->options['pre_escape']; + } + + public function isVariadic(): bool + { + return $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatingPackage(): string + { + return $this->options['deprecating_package']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFunction.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFunction.php new file mode 100644 index 0000000..bfee7eb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigFunction.php @@ -0,0 +1,134 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#functions + */ +final class TwigFunction +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the function. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'needs_charset' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'node_class' => FunctionExpression::class, + 'deprecated' => false, + 'deprecating_package' => '', + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this function. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsCharset(): bool + { + return $this->options['needs_charset']; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $functionArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($functionArgs); + } + + return []; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatingPackage(): string + { + return $this->options['deprecating_package']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigTest.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigTest.php new file mode 100644 index 0000000..0b43a28 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/TwigTest.php @@ -0,0 +1,106 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#test-operator + */ +final class TwigTest +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the test. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'is_variadic' => false, + 'node_class' => TestExpression::class, + 'deprecated' => false, + 'deprecating_package' => '', + 'alternative' => null, + 'one_mandatory_argument' => false, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this test. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatingPackage(): string + { + return $this->options['deprecating_package']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } + + public function hasOneMandatoryArgument(): bool + { + return (bool) $this->options['one_mandatory_argument']; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/DeprecationCollector.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/DeprecationCollector.php new file mode 100644 index 0000000..ad53106 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/DeprecationCollector.php @@ -0,0 +1,79 @@ + + */ +final class DeprecationCollector +{ + private $twig; + + public function __construct(Environment $twig) + { + $this->twig = $twig; + } + + /** + * Returns deprecations for templates contained in a directory. + * + * @param string $dir A directory where templates are stored + * @param string $ext Limit the loaded templates by extension + * + * @return array An array of deprecations + */ + public function collectDir(string $dir, string $ext = '.twig'): array + { + $iterator = new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir), \RecursiveIteratorIterator::LEAVES_ONLY + ), '{'.preg_quote($ext).'$}' + ); + + return $this->collect(new TemplateDirIterator($iterator)); + } + + /** + * Returns deprecations for passed templates. + * + * @param \Traversable $iterator An iterator of templates (where keys are template names and values the contents of the template) + * + * @return array An array of deprecations + */ + public function collect(\Traversable $iterator): array + { + $deprecations = []; + set_error_handler(function ($type, $msg) use (&$deprecations) { + if (\E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + } + + return false; + }); + + foreach ($iterator as $name => $contents) { + try { + $this->twig->parse($this->twig->tokenize(new Source($contents, $name))); + } catch (SyntaxError $e) { + // ignore templates containing syntax errors + } + } + + restore_error_handler(); + + return $deprecations; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/ReflectionCallable.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/ReflectionCallable.php new file mode 100644 index 0000000..54384e1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/ReflectionCallable.php @@ -0,0 +1,88 @@ + + * + * @internal + */ +final class ReflectionCallable +{ + private $reflector; + private $callable = null; + private $name; + + public function __construct($callable, string $debugType = 'unknown', string $debugName = 'unknown') + { + if (\is_string($callable) && false !== $pos = strpos($callable, '::')) { + $callable = [substr($callable, 0, $pos), substr($callable, 2 + $pos)]; + } + + if (\is_array($callable) && method_exists($callable[0], $callable[1])) { + $this->reflector = $r = new \ReflectionMethod($callable[0], $callable[1]); + $this->callable = $callable; + $this->name = $r->class.'::'.$r->name; + + return; + } + + $checkVisibility = $callable instanceof \Closure; + try { + $closure = \Closure::fromCallable($callable); + } catch (\TypeError $e) { + throw new \LogicException(\sprintf('Callback for %s "%s" is not callable in the current scope.', $debugType, $debugName), 0, $e); + } + $this->reflector = $r = new \ReflectionFunction($closure); + + if (str_contains($r->name, '{closure')) { + $this->callable = $callable; + $this->name = 'Closure'; + + return; + } + + if ($object = $r->getClosureThis()) { + $callable = [$object, $r->name]; + $this->name = get_debug_type($object).'::'.$r->name; + } elseif (\PHP_VERSION_ID >= 80111 && $class = $r->getClosureCalledClass()) { + $callable = [$class->name, $r->name]; + $this->name = $class->name.'::'.$r->name; + } elseif (\PHP_VERSION_ID < 80111 && $class = $r->getClosureScopeClass()) { + $callable = [\is_array($callable) ? $callable[0] : $class->name, $r->name]; + $this->name = (\is_array($callable) ? $callable[0] : $class->name).'::'.$r->name; + } else { + $callable = $this->name = $r->name; + } + + if ($checkVisibility && \is_array($callable) && method_exists(...$callable) && !(new \ReflectionMethod(...$callable))->isPublic()) { + $callable = $r->getClosure(); + } + + $this->callable = $callable; + } + + public function getReflector(): \ReflectionFunctionAbstract + { + return $this->reflector; + } + + public function getCallable() + { + return $this->callable; + } + + public function getName(): string + { + return $this->name; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/TemplateDirIterator.php b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/TemplateDirIterator.php new file mode 100644 index 0000000..3bef14b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/twig/twig/src/Util/TemplateDirIterator.php @@ -0,0 +1,36 @@ + + */ +class TemplateDirIterator extends \IteratorIterator +{ + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function current() + { + return file_get_contents(parent::current()); + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function key() + { + return (string) parent::key(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/action-scheduler.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/action-scheduler.php new file mode 100644 index 0000000..1343a89 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/action-scheduler.php @@ -0,0 +1,70 @@ +. + * + * @package ActionScheduler + */ + +if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION. + + if ( ! class_exists( 'ActionScheduler_Versions', false ) ) { + require_once __DIR__ . '/classes/ActionScheduler_Versions.php'; + add_action( 'plugins_loaded', array( 'ActionScheduler_Versions', 'initialize_latest_version' ), 1, 0 ); + } + + add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_3', 0, 0 ); // WRCS: DEFINED_VERSION. + + // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace + /** + * Registers this version of Action Scheduler. + */ + function action_scheduler_register_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION. + $versions = ActionScheduler_Versions::instance(); + $versions->register( '3.9.3', 'action_scheduler_initialize_3_dot_9_dot_3' ); // WRCS: DEFINED_VERSION. + } + + // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace + /** + * Initializes this version of Action Scheduler. + */ + function action_scheduler_initialize_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION. + // A final safety check is required even here, because historic versions of Action Scheduler + // followed a different pattern (in some unusual cases, we could reach this point and the + // ActionScheduler class is already defined—so we need to guard against that). + if ( ! class_exists( 'ActionScheduler', false ) ) { + require_once __DIR__ . '/classes/abstracts/ActionScheduler.php'; + ActionScheduler::init( __FILE__ ); + } + } + + // Support usage in themes - load this version if no plugin has loaded a version yet. + if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) { + action_scheduler_initialize_3_dot_9_dot_3(); // WRCS: DEFINED_VERSION. + do_action( 'action_scheduler_pre_theme_init' ); + ActionScheduler_Versions::initialize_latest_version(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/changelog.txt b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/changelog.txt new file mode 100644 index 0000000..326bef2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/changelog.txt @@ -0,0 +1,200 @@ +*** Changelog *** + += 3.9.3 - 2025-07-15 = +* Add hook 'action_scheduler_ensure_recurring_actions' specifically for scheduling recurring actions. +* Assume an action is valid until proven otherwise. +* Implement SKIP LOCKED during action claiming. +* Import `get_flag_value()` from `WP_CLI\Utils` before using. +* Make `$unique` available to all pre-creation/short-circuit hooks. +* Make version/source information available via new class. +* Only release claims on pending actions. +* Tweak - WP 6.8 compatibility. +* Update minimum supported php and phpunit versions. +* Update readme.txt. +* WP CLI get action command: correct parentheses/nesting of conditional checks. + += 3.9.2 - 2025-02-03 = +* Fixed fatal errors by moving version info methods to a new class and deprecating conflicting ones in ActionScheduler_Versions + += 3.9.1 - 2025-01-21 = +* A number of new WP CLI commands have been added, making it easier to manage actions in the terminal and from scripts. +* New wp action-scheduler source command to help determine how Action Scheduler is being loaded. +* Additional information about the active instance of Action Scheduler is now available in the Help pull-down drawer. +* Make some other nullable parameters explicitly nullable. +* Set option value to `no` rather than deleting. + += 3.9.0 - 2024-11-14 = +* Minimum required version of PHP is now 7.1. +* Performance improvements for the `as_pending_actions_due()` function. +* Existing filter hook `action_scheduler_claim_actions_order_by` enhanced to provide callbacks with additional information. +* Improved compatibility with PHP 8.4, specifically by making implicitly nullable parameters explicitly nullable. +* A large number of coding standards-enhancements, to help reduce friction when submitting plugins to marketplaces and plugin directories. Special props @crstauf for this effort. +* Minor documentation tweaks and improvements. + += 3.8.2 - 2024-09-12 = +* Add missing parameter to the `pre_as_enqueue_async_action` hook. +* Bump minimum PHP version to 7.0. +* Bump minimum WordPress version to 6.4. +* Make the batch size adjustable during processing. + += 3.8.1 - 2024-06-20 = +* Fix typos. +* Improve the messaging in our unidentified action exceptions. + += 3.8.0 - 2024-05-22 = +* Documentation - Fixed typos in perf.md. +* Update - We now require WordPress 6.3 or higher. +* Update - We now require PHP 7.0 or higher. + += 3.7.4 - 2024-04-05 = +* Give a clear description of how the $unique parameter works. +* Preserve the tab field if set. +* Tweak - WP 6.5 compatibility. + += 3.7.3 - 2024-03-20 = +* Do not iterate over all of GET when building form in list table. +* Fix a few issues reported by PCP (Plugin Check Plugin). +* Try to save actions as unique even when the store doesn't support it. +* Tweak - WP 6.4 compatibility. +* Update "Tested up to" tag to WordPress 6.5. +* update version in package-lock.json. + += 3.7.2 - 2024-02-14 = +* No longer user variables in `_n()` translation function. + += 3.7.1 - 2023-12-13 = +* update semver to 5.7.2 because of a security vulnerability in 5.7.1. + += 3.7.0 - 2023-11-20 = +* Important: starting with this release, Action Scheduler follows an L-2 version policy (WordPress, and consequently PHP). +* Add extended indexes for hook_status_scheduled_date_gmt and status_scheduled_date_gmt. +* Catch and log exceptions thrown when actions can't be created, e.g. under a corrupt database schema. +* Tweak - WP 6.4 compatibility. +* Update unit tests for upcoming dependency version policy. +* make sure hook action_scheduler_failed_execution can access original exception object. +* mention dependency version policy in usage.md. + += 3.6.4 - 2023-10-11 = +* Performance improvements when bulk cancelling actions. +* Dev-related fixes. + += 3.6.3 - 2023-09-13 = +* Use `_doing_it_wrong` in initialization check. + += 3.6.2 - 2023-08-09 = +* Add guidance about passing arguments. +* Atomic option locking. +* Improve bulk delete handling. +* Include database error in the exception message. +* Tweak - WP 6.3 compatibility. + += 3.6.1 - 2023-06-14 = +* Document new optional `$priority` arg for various API functions. +* Document the new `--exclude-groups` WP CLI option. +* Document the new `action_scheduler_init` hook. +* Ensure actions within each claim are executed in the expected order. +* Fix incorrect text domain. +* Remove SHOW TABLES usage when checking if tables exist. + += 3.6.0 - 2023-05-10 = +* Add $unique parameter to function signatures. +* Add a cast-to-int for extra safety before forming new DateTime object. +* Add a hook allowing exceptions for consistently failing recurring actions. +* Add action priorities. +* Add init hook. +* Always raise the time limit. +* Bump minimatch from 3.0.4 to 3.0.8. +* Bump yaml from 2.2.1 to 2.2.2. +* Defensive coding relating to gaps in declared schedule types. +* Do not process an action if it cannot be set to `in-progress`. +* Filter view labels (status names) should be translatable | #919. +* Fix WPCLI progress messages. +* Improve data-store initialization flow. +* Improve error handling across all supported PHP versions. +* Improve logic for flushing the runtime cache. +* Support exclusion of multiple groups. +* Update lint-staged and Node/NPM requirements. +* add CLI clean command. +* add CLI exclude-group filter. +* exclude past-due from list table all filter count. +* throwing an exception if as_schedule_recurring_action interval param is not of type integer. + += 3.5.4 - 2023-01-17 = +* Add pre filters during action registration. +* Async scheduling. +* Calculate timeouts based on total actions. +* Correctly order the parameters for `ActionScheduler_ActionFactory`'s calls to `single_unique`. +* Fetch action in memory first before releasing claim to avoid deadlock. +* PHP 8.2: declare property to fix creation of dynamic property warning. +* PHP 8.2: fix "Using ${var} in strings is deprecated, use {$var} instead". +* Prevent `undefined variable` warning for `$num_pastdue_actions`. + += 3.5.3 - 2022-11-09 = +* Query actions with partial match. + += 3.5.2 - 2022-09-16 = +* Fix - erroneous 3.5.1 release. + += 3.5.1 - 2022-09-13 = +* Maintenance on A/S docs. +* fix: PHP 8.2 deprecated notice. + += 3.5.0 - 2022-08-25 = +* Add - The active view link within the "Tools > Scheduled Actions" screen is now clickable. +* Add - A warning when there are past-due actions. +* Enhancement - Added the ability to schedule unique actions via an atomic operation. +* Enhancement - Improvements to cache invalidation when processing batches (when running on WordPress 6.0+). +* Enhancement - If a recurring action is found to be consistently failing, it will stop being rescheduled. +* Enhancement - Adds a new "Past Due" view to the scheduled actions list table. + += 3.4.2 - 2022-06-08 = +* Fix - Change the include for better linting. +* Fix - update: Added Action scheduler completed action hook. + += 3.4.1 - 2022-05-24 = +* Fix - Change the include for better linting. +* Fix - Fix the documented return type. + += 3.4.0 - 2021-10-29 = +* Enhancement - Number of items per page can now be set for the Scheduled Actions view (props @ovidiul). #771 +* Fix - Do not lower the max_execution_time if it is already set to 0 (unlimited) (props @barryhughes). #755 +* Fix - Avoid triggering autoloaders during the version resolution process (props @olegabr). #731 & #776 +* Dev - ActionScheduler_wcSystemStatus PHPCS fixes (props @ovidiul). #761 +* Dev - ActionScheduler_DBLogger.php PHPCS fixes (props @ovidiul). #768 +* Dev - Fixed phpcs for ActionScheduler_Schedule_Deprecated (props @ovidiul). #762 +* Dev - Improve actions table indices (props @glagonikas). #774 & #777 +* Dev - PHPCS fixes for ActionScheduler_DBStore.php (props @ovidiul). #769 & #778 +* Dev - PHPCS Fixes for ActionScheduler_Abstract_ListTable (props @ovidiul). #763 & #779 +* Dev - Adds new filter action_scheduler_claim_actions_order_by to allow tuning of the claim query (props @glagonikas). #773 +* Dev - PHPCS fixes for ActionScheduler_WpPostStore class (props @ovidiul). #780 + += 3.3.0 - 2021-09-15 = +* Enhancement - Adds as_has_scheduled_action() to provide a performant way to test for existing actions. #645 +* Fix - Improves compatibility with environments where NO_ZERO_DATE is enabled. #519 +* Fix - Adds safety checks to guard against errors when our database tables cannot be created. #645 +* Dev - Now supports queries that use multiple statuses. #649 +* Dev - Minimum requirements for WordPress and PHP bumped (to 5.2 and 5.6 respectively). #723 + += 3.2.1 - 2021-06-21 = +* Fix - Add extra safety/account for different versions of AS and different loading patterns. #714 +* Fix - Handle hidden columns (Tools → Scheduled Actions) | #600. + += 3.2.0 - 2021-06-03 = +* Fix - Add "no ordering" option to as_next_scheduled_action(). +* Fix - Add secondary scheduled date checks when claiming actions (DBStore) | #634. +* Fix - Add secondary scheduled date checks when claiming actions (wpPostStore) | #634. +* Fix - Adds a new index to the action table, reducing the potential for deadlocks (props: @glagonikas). +* Fix - Fix unit tests infrastructure and adapt tests to PHP 8. +* Fix - Identify in-use data store. +* Fix - Improve test_migration_is_scheduled. +* Fix - PHP notice on list table. +* Fix - Speed up clean up and batch selects. +* Fix - Update pending dependencies. +* Fix - [PHP 8.0] Only pass action arg values through to do_action_ref_array(). +* Fix - [PHP 8] Set the PHP version to 7.1 in composer.json for PHP 8 compatibility. +* Fix - add is_initialized() to docs. +* Fix - fix file permissions. +* Fix - fixes #664 by replacing __ with esc_html__. + += 3.1.6 - 2020-05-12 = +* Change log starts. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.php new file mode 100644 index 0000000..8eb01ea --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.php @@ -0,0 +1,45 @@ +id = $id; + $this->action_ids = $action_ids; + } + + /** + * Get claim ID. + */ + public function get_id() { + return $this->id; + } + + /** + * Get IDs of claimed actions. + */ + public function get_actions() { + return $this->action_ids; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.php new file mode 100644 index 0000000..ea60d60 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.php @@ -0,0 +1,378 @@ += 6 ? (int) func_get_arg( 5 ) : 10; + + switch ( $status ) { + case ActionScheduler_Store::STATUS_PENDING: + $action_class = 'ActionScheduler_Action'; + break; + case ActionScheduler_Store::STATUS_CANCELED: + $action_class = 'ActionScheduler_CanceledAction'; + if ( ! is_null( $schedule ) && ! is_a( $schedule, 'ActionScheduler_CanceledSchedule' ) && ! is_a( $schedule, 'ActionScheduler_NullSchedule' ) ) { + $schedule = new ActionScheduler_CanceledSchedule( $schedule->get_date() ); + } + break; + default: + $action_class = 'ActionScheduler_FinishedAction'; + break; + } + + $action_class = apply_filters( 'action_scheduler_stored_action_class', $action_class, $status, $hook, $args, $schedule, $group ); + + $action = new $action_class( $hook, $args, $schedule, $group ); + $action->set_priority( $priority ); + + /** + * Allow 3rd party code to change the instantiated action for a given hook, args, schedule and group. + * + * @param ActionScheduler_Action $action The instantiated action. + * @param string $hook The instantiated action's hook. + * @param array $args The instantiated action's args. + * @param ActionScheduler_Schedule $schedule The instantiated action's schedule. + * @param string $group The instantiated action's group. + * @param int $priority The action priority. + */ + return apply_filters( 'action_scheduler_stored_action_instance', $action, $hook, $args, $schedule, $group, $priority ); + } + + /** + * Enqueue an action to run one time, as soon as possible (rather a specific scheduled time). + * + * This method creates a new action using the NullSchedule. In practice, this results in an action scheduled to + * execute "now". Therefore, it will generally run as soon as possible but is not prioritized ahead of other actions + * that are already past-due. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param string $group A group to put the action in. + * + * @return int The ID of the stored action. + */ + public function async( $hook, $args = array(), $group = '' ) { + return $this->async_unique( $hook, $args, $group, false ); + } + + /** + * Same as async, but also supports $unique param. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param string $group A group to put the action in. + * @param bool $unique Whether to ensure the action is unique. + * + * @return int The ID of the stored action. + */ + public function async_unique( $hook, $args = array(), $group = '', $unique = true ) { + $schedule = new ActionScheduler_NullSchedule(); + $action = new ActionScheduler_Action( $hook, $args, $schedule, $group ); + return $unique ? $this->store_unique_action( $action, $unique ) : $this->store( $action ); + } + + /** + * Create single action. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $when Unix timestamp when the action will run. + * @param string $group A group to put the action in. + * + * @return int The ID of the stored action. + */ + public function single( $hook, $args = array(), $when = null, $group = '' ) { + return $this->single_unique( $hook, $args, $when, $group, false ); + } + + /** + * Create single action only if there is no pending or running action with same name and params. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $when Unix timestamp when the action will run. + * @param string $group A group to put the action in. + * @param bool $unique Whether action scheduled should be unique. + * + * @return int The ID of the stored action. + */ + public function single_unique( $hook, $args = array(), $when = null, $group = '', $unique = true ) { + $date = as_get_datetime_object( $when ); + $schedule = new ActionScheduler_SimpleSchedule( $date ); + $action = new ActionScheduler_Action( $hook, $args, $schedule, $group ); + return $unique ? $this->store_unique_action( $action ) : $this->store( $action ); + } + + /** + * Create the first instance of an action recurring on a given interval. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $first Unix timestamp for the first run. + * @param int $interval Seconds between runs. + * @param string $group A group to put the action in. + * + * @return int The ID of the stored action. + */ + public function recurring( $hook, $args = array(), $first = null, $interval = null, $group = '' ) { + return $this->recurring_unique( $hook, $args, $first, $interval, $group, false ); + } + + /** + * Create the first instance of an action recurring on a given interval only if there is no pending or running action with same name and params. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $first Unix timestamp for the first run. + * @param int $interval Seconds between runs. + * @param string $group A group to put the action in. + * @param bool $unique Whether action scheduled should be unique. + * + * @return int The ID of the stored action. + */ + public function recurring_unique( $hook, $args = array(), $first = null, $interval = null, $group = '', $unique = true ) { + if ( empty( $interval ) ) { + return $this->single_unique( $hook, $args, $first, $group, $unique ); + } + $date = as_get_datetime_object( $first ); + $schedule = new ActionScheduler_IntervalSchedule( $date, $interval ); + $action = new ActionScheduler_Action( $hook, $args, $schedule, $group ); + return $unique ? $this->store_unique_action( $action ) : $this->store( $action ); + } + + /** + * Create the first instance of an action recurring on a Cron schedule. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $base_timestamp The first instance of the action will be scheduled + * to run at a time calculated after this timestamp matching the cron + * expression. This can be used to delay the first instance of the action. + * @param int $schedule A cron definition string. + * @param string $group A group to put the action in. + * + * @return int The ID of the stored action. + */ + public function cron( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '' ) { + return $this->cron_unique( $hook, $args, $base_timestamp, $schedule, $group, false ); + } + + + /** + * Create the first instance of an action recurring on a Cron schedule only if there is no pending or running action with same name and params. + * + * @param string $hook The hook to trigger when this action runs. + * @param array $args Args to pass when the hook is triggered. + * @param int $base_timestamp The first instance of the action will be scheduled + * to run at a time calculated after this timestamp matching the cron + * expression. This can be used to delay the first instance of the action. + * @param int $schedule A cron definition string. + * @param string $group A group to put the action in. + * @param bool $unique Whether action scheduled should be unique. + * + * @return int The ID of the stored action. + **/ + public function cron_unique( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '', $unique = true ) { + if ( empty( $schedule ) ) { + return $this->single_unique( $hook, $args, $base_timestamp, $group, $unique ); + } + $date = as_get_datetime_object( $base_timestamp ); + $cron = CronExpression::factory( $schedule ); + $schedule = new ActionScheduler_CronSchedule( $date, $cron ); + $action = new ActionScheduler_Action( $hook, $args, $schedule, $group ); + return $unique ? $this->store_unique_action( $action ) : $this->store( $action ); + } + + /** + * Create a successive instance of a recurring or cron action. + * + * Importantly, the action will be rescheduled to run based on the current date/time. + * That means when the action is scheduled to run in the past, the next scheduled date + * will be pushed forward. For example, if a recurring action set to run every hour + * was scheduled to run 5 seconds ago, it will be next scheduled for 1 hour in the + * future, which is 1 hour and 5 seconds from when it was last scheduled to run. + * + * Alternatively, if the action is scheduled to run in the future, and is run early, + * likely via manual intervention, then its schedule will change based on the time now. + * For example, if a recurring action set to run every day, and is run 12 hours early, + * it will run again in 24 hours, not 36 hours. + * + * This slippage is less of an issue with Cron actions, as the specific run time can + * be set for them to run, e.g. 1am each day. In those cases, and entire period would + * need to be missed before there was any change is scheduled, e.g. in the case of an + * action scheduled for 1am each day, the action would need to run an entire day late. + * + * @param ActionScheduler_Action $action The existing action. + * + * @return string The ID of the stored action + * @throws InvalidArgumentException If $action is not a recurring action. + */ + public function repeat( $action ) { + $schedule = $action->get_schedule(); + $next = $schedule->get_next( as_get_datetime_object() ); + + if ( is_null( $next ) || ! $schedule->is_recurring() ) { + throw new InvalidArgumentException( __( 'Invalid action - must be a recurring action.', 'action-scheduler' ) ); + } + + $schedule_class = get_class( $schedule ); + $new_schedule = new $schedule( $next, $schedule->get_recurrence(), $schedule->get_first_date() ); + $new_action = new ActionScheduler_Action( $action->get_hook(), $action->get_args(), $new_schedule, $action->get_group() ); + $new_action->set_priority( $action->get_priority() ); + return $this->store( $new_action ); + } + + /** + * Creates a scheduled action. + * + * This general purpose method can be used in place of specific methods such as async(), + * async_unique(), single() or single_unique(), etc. + * + * @internal Not intended for public use, should not be overridden by subclasses. + * + * @param array $options { + * Describes the action we wish to schedule. + * + * @type string $type Must be one of 'async', 'cron', 'recurring', or 'single'. + * @type string $hook The hook to be executed. + * @type array $arguments Arguments to be passed to the callback. + * @type string $group The action group. + * @type bool $unique If the action should be unique. + * @type int $when Timestamp. Indicates when the action, or first instance of the action in the case + * of recurring or cron actions, becomes due. + * @type int|string $pattern Recurrence pattern. This is either an interval in seconds for recurring actions + * or a cron expression for cron actions. + * @type int $priority Lower values means higher priority. Should be in the range 0-255. + * } + * + * @return int The action ID. Zero if there was an error scheduling the action. + */ + public function create( array $options = array() ) { + $defaults = array( + 'type' => 'single', + 'hook' => '', + 'arguments' => array(), + 'group' => '', + 'unique' => false, + 'when' => time(), + 'pattern' => null, + 'priority' => 10, + ); + + $options = array_merge( $defaults, $options ); + + // Cron/recurring actions without a pattern are treated as single actions (this gives calling code the ability + // to use functions like as_schedule_recurring_action() to schedule recurring as well as single actions). + if ( ( 'cron' === $options['type'] || 'recurring' === $options['type'] ) && empty( $options['pattern'] ) ) { + $options['type'] = 'single'; + } + + switch ( $options['type'] ) { + case 'async': + $schedule = new ActionScheduler_NullSchedule(); + break; + + case 'cron': + $date = as_get_datetime_object( $options['when'] ); + $cron = CronExpression::factory( $options['pattern'] ); + $schedule = new ActionScheduler_CronSchedule( $date, $cron ); + break; + + case 'recurring': + $date = as_get_datetime_object( $options['when'] ); + $schedule = new ActionScheduler_IntervalSchedule( $date, $options['pattern'] ); + break; + + case 'single': + $date = as_get_datetime_object( $options['when'] ); + $schedule = new ActionScheduler_SimpleSchedule( $date ); + break; + + default: + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + error_log( "Unknown action type '{$options['type']}' specified when trying to create an action for '{$options['hook']}'." ); + return 0; + } + + $action = new ActionScheduler_Action( $options['hook'], $options['arguments'], $schedule, $options['group'] ); + $action->set_priority( $options['priority'] ); + + $action_id = 0; + try { + $action_id = $options['unique'] ? $this->store_unique_action( $action ) : $this->store( $action ); + } catch ( Exception $e ) { + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + error_log( + sprintf( + /* translators: %1$s is the name of the hook to be enqueued, %2$s is the exception message. */ + __( 'Caught exception while enqueuing action "%1$s": %2$s', 'action-scheduler' ), + $options['hook'], + $e->getMessage() + ) + ); + } + return $action_id; + } + + /** + * Save action to database. + * + * @param ActionScheduler_Action $action Action object to save. + * + * @return int The ID of the stored action + */ + protected function store( ActionScheduler_Action $action ) { + $store = ActionScheduler_Store::instance(); + return $store->save_action( $action ); + } + + /** + * Store action if it's unique. + * + * @param ActionScheduler_Action $action Action object to store. + * + * @return int ID of the created action. Will be 0 if action was not created. + */ + protected function store_unique_action( ActionScheduler_Action $action ) { + $store = ActionScheduler_Store::instance(); + if ( method_exists( $store, 'save_unique_action' ) ) { + return $store->save_unique_action( $action ); + } else { + /** + * Fallback to non-unique action if the store doesn't support unique actions. + * We try to save the action as unique, accepting that there might be a race condition. + * This is likely still better than giving up on unique actions entirely. + */ + $existing_action_id = (int) $store->find_action( + $action->get_hook(), + array( + 'args' => $action->get_args(), + 'status' => ActionScheduler_Store::STATUS_PENDING, + 'group' => $action->get_group(), + ) + ); + if ( $existing_action_id > 0 ) { + return 0; + } + return $store->save_action( $action ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.php new file mode 100644 index 0000000..1c8306e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.php @@ -0,0 +1,311 @@ +render(); + } + + /** + * Registers action-scheduler into WooCommerce > System status. + * + * @param array $tabs An associative array of tab key => label. + * @return array $tabs An associative array of tab key => label, including Action Scheduler's tabs + */ + public function register_system_status_tab( array $tabs ) { + $tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' ); + + return $tabs; + } + + /** + * Include Action Scheduler's administration under the Tools menu. + * + * A menu under the Tools menu is important for backward compatibility (as that's + * where it started), and also provides more convenient access than the WooCommerce + * System Status page, and for sites where WooCommerce isn't active. + */ + public function register_menu() { + $hook_suffix = add_submenu_page( + 'tools.php', + __( 'Scheduled Actions', 'action-scheduler' ), + __( 'Scheduled Actions', 'action-scheduler' ), + 'manage_options', + 'action-scheduler', + array( $this, 'render_admin_ui' ) + ); + add_action( 'load-' . $hook_suffix, array( $this, 'process_admin_ui' ) ); + } + + /** + * Triggers processing of any pending actions. + */ + public function process_admin_ui() { + $this->get_list_table(); + } + + /** + * Renders the Admin UI + */ + public function render_admin_ui() { + $table = $this->get_list_table(); + $table->display_page(); + } + + /** + * Get the admin UI object and process any requested actions. + * + * @return ActionScheduler_ListTable + */ + protected function get_list_table() { + if ( null === $this->list_table ) { + $this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() ); + $this->list_table->process_actions(); + } + + return $this->list_table; + } + + /** + * Action: admin_notices + * + * Maybe check past-due actions, and print notice. + * + * @uses $this->check_pastdue_actions() + */ + public function maybe_check_pastdue_actions() { + + // Filter to prevent checking actions (ex: inappropriate user). + if ( ! apply_filters( 'action_scheduler_check_pastdue_actions', current_user_can( 'manage_options' ) ) ) { + return; + } + + // Get last check transient. + $last_check = get_transient( 'action_scheduler_last_pastdue_actions_check' ); + + // If transient exists, we're within interval, so bail. + if ( ! empty( $last_check ) ) { + return; + } + + // Perform the check. + $this->check_pastdue_actions(); + } + + /** + * Check past-due actions, and print notice. + */ + protected function check_pastdue_actions() { + + // Set thresholds. + $threshold_seconds = (int) apply_filters( 'action_scheduler_pastdue_actions_seconds', DAY_IN_SECONDS ); + $threshold_min = (int) apply_filters( 'action_scheduler_pastdue_actions_min', 1 ); + + // Set fallback value for past-due actions count. + $num_pastdue_actions = 0; + + // Allow third-parties to preempt the default check logic. + $check = apply_filters( 'action_scheduler_pastdue_actions_check_pre', null ); + + // If no third-party preempted and there are no past-due actions, return early. + if ( ! is_null( $check ) ) { + return; + } + + // Scheduled actions query arguments. + $query_args = array( + 'date' => as_get_datetime_object( time() - $threshold_seconds ), + 'status' => ActionScheduler_Store::STATUS_PENDING, + 'per_page' => $threshold_min, + ); + + // If no third-party preempted, run default check. + if ( is_null( $check ) ) { + $store = ActionScheduler_Store::instance(); + $num_pastdue_actions = (int) $store->query_actions( $query_args, 'count' ); + + // Check if past-due actions count is greater than or equal to threshold. + $check = ( $num_pastdue_actions >= $threshold_min ); + $check = (bool) apply_filters( 'action_scheduler_pastdue_actions_check', $check, $num_pastdue_actions, $threshold_seconds, $threshold_min ); + } + + // If check failed, set transient and abort. + if ( ! boolval( $check ) ) { + $interval = apply_filters( 'action_scheduler_pastdue_actions_check_interval', round( $threshold_seconds / 4 ), $threshold_seconds ); + set_transient( 'action_scheduler_last_pastdue_actions_check', time(), $interval ); + + return; + } + + $actions_url = add_query_arg( + array( + 'page' => 'action-scheduler', + 'status' => 'past-due', + 'order' => 'asc', + ), + admin_url( 'tools.php' ) + ); + + // Print notice. + echo '

    '; + printf( + wp_kses( + // translators: 1) is the number of affected actions, 2) is a link to an admin screen. + _n( + 'Action Scheduler: %1$d past-due action found; something may be wrong. Read documentation »', + 'Action Scheduler: %1$d past-due actions found; something may be wrong. Read documentation »', + $num_pastdue_actions, + 'action-scheduler' + ), + array( + 'strong' => array(), + 'a' => array( + 'href' => true, + 'target' => true, + ), + ) + ), + absint( $num_pastdue_actions ), + esc_attr( esc_url( $actions_url ) ) + ); + echo '

    '; + + // Facilitate third-parties to evaluate and print notices. + do_action( 'action_scheduler_pastdue_actions_extra_notices', $query_args ); + } + + /** + * Provide more information about the screen and its data in the help tab. + */ + public function add_help_tabs() { + $screen = get_current_screen(); + + if ( ! $screen || self::$screen_id !== $screen->id ) { + return; + } + + $as_version = ActionScheduler_Versions::instance()->latest_version(); + $as_source = ActionScheduler_SystemInformation::active_source(); + $as_source_path = ActionScheduler_SystemInformation::active_source_path(); + $as_source_markup = sprintf( '%s', esc_html( $as_source_path ) ); + + if ( ! empty( $as_source ) ) { + $as_source_markup = sprintf( + '%s: %s', + ucfirst( $as_source['type'] ), + esc_attr( $as_source_path ), + esc_html( $as_source['name'] ) + ); + } + + $screen->add_help_tab( + array( + 'id' => 'action_scheduler_about', + 'title' => __( 'About', 'action-scheduler' ), + 'content' => + // translators: %s is the Action Scheduler version. + '

    ' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '

    ' . + '

    ' . + __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) . + '

    ' . + '

    ' . esc_html__( 'Source', 'action-scheduler' ) . '

    ' . + '

    ' . + esc_html__( 'Action Scheduler is currently being loaded from the following location. This can be useful when debugging, or if requested by the support team.', 'action-scheduler' ) . + '

    ' . + '

    ' . $as_source_markup . '

    ' . + '

    ' . esc_html__( 'WP CLI', 'action-scheduler' ) . '

    ' . + '

    ' . + sprintf( + /* translators: %1$s is WP CLI command (not translatable) */ + esc_html__( 'WP CLI commands are available: execute %1$s for a list of available commands.', 'action-scheduler' ), + 'wp help action-scheduler' + ) . + '

    ', + ) + ); + + $screen->add_help_tab( + array( + 'id' => 'action_scheduler_columns', + 'title' => __( 'Columns', 'action-scheduler' ), + 'content' => + '

    ' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '

    ' . + '
      ' . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) . + sprintf( '
    • %1$s: %2$s
    • ', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) . + '
    ', + ) + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php new file mode 100644 index 0000000..2eaf86d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php @@ -0,0 +1,93 @@ +store = $store; + } + + /** + * Handle async requests + * + * Run a queue, and maybe dispatch another async request to run another queue + * if there are still pending actions after completing a queue in this request. + */ + protected function handle() { + do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context. + + $sleep_seconds = $this->get_sleep_seconds(); + + if ( $sleep_seconds ) { + sleep( $sleep_seconds ); + } + + $this->maybe_dispatch(); + } + + /** + * If the async request runner is needed and allowed to run, dispatch a request. + */ + public function maybe_dispatch() { + if ( ! $this->allow() ) { + return; + } + + $this->dispatch(); + ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request(); + } + + /** + * Only allow async requests when needed. + * + * Also allow 3rd party code to disable running actions via async requests. + */ + protected function allow() { + + if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) { + $allow = false; + } else { + $allow = true; + } + + return apply_filters( 'action_scheduler_allow_async_request_runner', $allow ); + } + + /** + * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that. + */ + protected function get_sleep_seconds() { + return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php new file mode 100644 index 0000000..ede48aa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php @@ -0,0 +1,111 @@ + $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) { + if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) { + return $filtered_limit; + } else { + return false; + } + } elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) { + if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) { + return $wp_max_limit; + } else { + return false; + } + } + + // phpcs:enable + + return false; + } + + /** + * Attempts to raise the PHP timeout for time intensive processes. + * + * Only allows raising the existing limit and prevents lowering it. Wrapper for wc_set_time_limit(), when available. + * + * @param int $limit The time limit in seconds. + */ + public static function raise_time_limit( $limit = 0 ) { + $limit = (int) $limit; + $max_execution_time = (int) ini_get( 'max_execution_time' ); + + // If the max execution time is already set to zero (unlimited), there is no reason to make a further change. + if ( 0 === $max_execution_time ) { + return; + } + + // Whichever of $max_execution_time or $limit is higher is the amount by which we raise the time limit. + $raise_by = 0 === $limit || $limit > $max_execution_time ? $limit : $max_execution_time; + + if ( function_exists( 'wc_set_time_limit' ) ) { + wc_set_time_limit( $raise_by ); + } elseif ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.safe_modeDeprecatedRemoved + @set_time_limit( $raise_by ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php new file mode 100644 index 0000000..89ca4a0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php @@ -0,0 +1,210 @@ +=' ); + return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true ); + } + + /** + * Get a flag indicating whether the migration is complete. + * + * @return bool Whether the flag has been set marking the migration as complete + */ + public static function is_migration_complete() { + return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE; + } + + /** + * Mark the migration as complete. + */ + public static function mark_migration_complete() { + update_option( self::STATUS_FLAG, self::STATUS_COMPLETE ); + } + + /** + * Unmark migration when a plugin is de-activated. Will not work in case of silent activation, for example in an update. + * We do this to mitigate the bug of lost actions which happens if there was an AS 2.x to AS 3.x migration in the past, but that plugin is now + * deactivated and the site was running on AS 2.x again. + */ + public static function mark_migration_incomplete() { + delete_option( self::STATUS_FLAG ); + } + + /** + * Set the action store class name. + * + * @param string $class Classname of the store class. + * + * @return string + */ + public static function set_store_class( $class ) { + return self::DATASTORE_CLASS; + } + + /** + * Set the action logger class name. + * + * @param string $class Classname of the logger class. + * + * @return string + */ + public static function set_logger_class( $class ) { + return self::LOGGER_CLASS; + } + + /** + * Set the sleep time in seconds. + * + * @param integer $sleep_time The number of seconds to pause before resuming operation. + */ + public static function set_sleep_time( $sleep_time ) { + self::$sleep_time = (int) $sleep_time; + } + + /** + * Set the tick count required for freeing memory. + * + * @param integer $free_ticks The number of ticks to free memory on. + */ + public static function set_free_ticks( $free_ticks ) { + self::$free_ticks = (int) $free_ticks; + } + + /** + * Free memory if conditions are met. + * + * @param int $ticks Current tick count. + */ + public static function maybe_free_memory( $ticks ) { + if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) { + self::free_memory(); + } + } + + /** + * Reduce memory footprint by clearing the database query and object caches. + */ + public static function free_memory() { + if ( 0 < self::$sleep_time ) { + /* translators: %d: amount of time */ + \WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) ); + sleep( self::$sleep_time ); + } + + \WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) ); + + /** + * Globals. + * + * @var $wpdb \wpdb + * @var $wp_object_cache \WP_Object_Cache + */ + global $wpdb, $wp_object_cache; + + $wpdb->queries = array(); + + if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) { + return; + } + + // Not all drop-ins support these props, however, there may be existing installations that rely on these being cleared. + if ( property_exists( $wp_object_cache, 'group_ops' ) ) { + $wp_object_cache->group_ops = array(); + } + if ( property_exists( $wp_object_cache, 'stats' ) ) { + $wp_object_cache->stats = array(); + } + if ( property_exists( $wp_object_cache, 'memcache_debug' ) ) { + $wp_object_cache->memcache_debug = array(); + } + if ( property_exists( $wp_object_cache, 'cache' ) ) { + $wp_object_cache->cache = array(); + } + + if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) { + call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important! + } + } + + /** + * Connect to table datastores if migration is complete. + * Otherwise, proceed with the migration if the dependencies have been met. + */ + public static function init() { + if ( self::is_migration_complete() ) { + add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 ); + add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 ); + add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) ); + } elseif ( self::dependencies_met() ) { + Controller::init(); + } + + add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) ); + } + + /** + * Singleton factory. + */ + public static function instance() { + if ( ! isset( self::$instance ) ) { + self::$instance = new static(); + } + + return self::$instance; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php new file mode 100644 index 0000000..3d3f68b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php @@ -0,0 +1,79 @@ +format( 'U' ); + } + + /** + * Set the UTC offset. + * + * This represents a fixed offset instead of a timezone setting. + * + * @param string|int $offset UTC offset value. + */ + public function setUtcOffset( $offset ) { + $this->utcOffset = intval( $offset ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + } + + /** + * Returns the timezone offset. + * + * @return int + * @link http://php.net/manual/en/datetime.getoffset.php + */ + #[\ReturnTypeWillChange] + public function getOffset() { + return $this->utcOffset ? $this->utcOffset : parent::getOffset(); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + } + + /** + * Set the TimeZone associated with the DateTime + * + * @param DateTimeZone $timezone Timezone object. + * + * @return static + * @link http://php.net/manual/en/datetime.settimezone.php + */ + #[\ReturnTypeWillChange] + public function setTimezone( $timezone ) { + $this->utcOffset = 0; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + parent::setTimezone( $timezone ); + + return $this; + } + + /** + * Get the timestamp with the WordPress timezone offset added or subtracted. + * + * @since 3.0.0 + * @return int + */ + public function getOffsetTimestamp() { + return $this->getTimestamp() + $this->getOffset(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php new file mode 100644 index 0000000..08e4fae --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php @@ -0,0 +1,11 @@ +store = $store; + } + + /** + * Start monitoring. + * + * @param ActionScheduler_ActionClaim $claim Claimed actions. + */ + public function attach( ActionScheduler_ActionClaim $claim ) { + $this->claim = $claim; + add_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) ); + add_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0, 1 ); + add_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0, 0 ); + add_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0, 0 ); + add_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0, 0 ); + } + + /** + * Stop monitoring. + */ + public function detach() { + $this->claim = null; + $this->untrack_action(); + remove_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) ); + remove_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0 ); + remove_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0 ); + remove_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0 ); + remove_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0 ); + } + + /** + * Track specified action. + * + * @param int $action_id Action ID to track. + */ + public function track_current_action( $action_id ) { + $this->action_id = $action_id; + } + + /** + * Un-track action. + */ + public function untrack_action() { + $this->action_id = 0; + } + + /** + * Handle unexpected shutdown. + */ + public function handle_unexpected_shutdown() { + $error = error_get_last(); + + if ( $error ) { + if ( in_array( $error['type'], array( E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR ), true ) ) { + if ( ! empty( $this->action_id ) ) { + $this->store->mark_failure( $this->action_id ); + do_action( 'action_scheduler_unexpected_shutdown', $this->action_id, $error ); + } + } + + $this->store->release_claim( $this->claim ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php new file mode 100644 index 0000000..c64e971 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php @@ -0,0 +1,47 @@ + label). + * + * @var array + */ + protected $columns = array(); + + /** + * Actions (name => label). + * + * @var array + */ + protected $row_actions = array(); + + /** + * The active data stores + * + * @var ActionScheduler_Store + */ + protected $store; + + /** + * A logger to use for getting action logs to display + * + * @var ActionScheduler_Logger + */ + protected $logger; + + /** + * A ActionScheduler_QueueRunner runner instance (or child class) + * + * @var ActionScheduler_QueueRunner + */ + protected $runner; + + /** + * Bulk actions. The key of the array is the method name of the implementation. + * Example: bulk_(array $ids, string $sql_in). + * + * See the comments in the parent class for further details + * + * @var array + */ + protected $bulk_actions = array(); + + /** + * Flag variable to render our notifications, if any, once. + * + * @var bool + */ + protected static $did_notification = false; + + /** + * Array of seconds for common time periods, like week or month, alongside an internationalised string representation, i.e. "Day" or "Days" + * + * @var array + */ + private static $time_periods; + + /** + * Sets the current data store object into `store->action` and initialises the object. + * + * @param ActionScheduler_Store $store Store object. + * @param ActionScheduler_Logger $logger Logger object. + * @param ActionScheduler_QueueRunner $runner Runner object. + */ + public function __construct( ActionScheduler_Store $store, ActionScheduler_Logger $logger, ActionScheduler_QueueRunner $runner ) { + + $this->store = $store; + $this->logger = $logger; + $this->runner = $runner; + + $this->table_header = __( 'Scheduled Actions', 'action-scheduler' ); + + $this->bulk_actions = array( + 'delete' => __( 'Delete', 'action-scheduler' ), + ); + + $this->columns = array( + 'hook' => __( 'Hook', 'action-scheduler' ), + 'status' => __( 'Status', 'action-scheduler' ), + 'args' => __( 'Arguments', 'action-scheduler' ), + 'group' => __( 'Group', 'action-scheduler' ), + 'recurrence' => __( 'Recurrence', 'action-scheduler' ), + 'schedule' => __( 'Scheduled Date', 'action-scheduler' ), + 'log_entries' => __( 'Log', 'action-scheduler' ), + ); + + $this->sort_by = array( + 'schedule', + 'hook', + 'group', + ); + + $this->search_by = array( + 'hook', + 'args', + 'claim_id', + ); + + $request_status = $this->get_request_status(); + + if ( empty( $request_status ) ) { + $this->sort_by[] = 'status'; + } elseif ( in_array( $request_status, array( 'in-progress', 'failed' ), true ) ) { + $this->columns += array( 'claim_id' => __( 'Claim ID', 'action-scheduler' ) ); + $this->sort_by[] = 'claim_id'; + } + + $this->row_actions = array( + 'hook' => array( + 'run' => array( + 'name' => __( 'Run', 'action-scheduler' ), + 'desc' => __( 'Process the action now as if it were run as part of a queue', 'action-scheduler' ), + ), + 'cancel' => array( + 'name' => __( 'Cancel', 'action-scheduler' ), + 'desc' => __( 'Cancel the action now to avoid it being run in future', 'action-scheduler' ), + 'class' => 'cancel trash', + ), + ), + ); + + self::$time_periods = array( + array( + 'seconds' => YEAR_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s year', '%s years', 'action-scheduler' ), + ), + array( + 'seconds' => MONTH_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s month', '%s months', 'action-scheduler' ), + ), + array( + 'seconds' => WEEK_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s week', '%s weeks', 'action-scheduler' ), + ), + array( + 'seconds' => DAY_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s day', '%s days', 'action-scheduler' ), + ), + array( + 'seconds' => HOUR_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s hour', '%s hours', 'action-scheduler' ), + ), + array( + 'seconds' => MINUTE_IN_SECONDS, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s minute', '%s minutes', 'action-scheduler' ), + ), + array( + 'seconds' => 1, + /* translators: %s: amount of time */ + 'names' => _n_noop( '%s second', '%s seconds', 'action-scheduler' ), + ), + ); + + parent::__construct( + array( + 'singular' => 'action-scheduler', + 'plural' => 'action-scheduler', + 'ajax' => false, + ) + ); + + add_screen_option( + 'per_page', + array( + 'default' => $this->items_per_page, + ) + ); + + add_filter( 'set_screen_option_' . $this->get_per_page_option_name(), array( $this, 'set_items_per_page_option' ), 10, 3 ); + set_screen_options(); + } + + /** + * Handles setting the items_per_page option for this screen. + * + * @param mixed $status Default false (to skip saving the current option). + * @param string $option Screen option name. + * @param int $value Screen option value. + * @return int + */ + public function set_items_per_page_option( $status, $option, $value ) { + return $value; + } + /** + * Convert an interval of seconds into a two part human friendly string. + * + * The WordPress human_time_diff() function only calculates the time difference to one degree, meaning + * even if an action is 1 day and 11 hours away, it will display "1 day". This function goes one step + * further to display two degrees of accuracy. + * + * Inspired by the Crontrol::interval() function by Edward Dale: https://wordpress.org/plugins/wp-crontrol/ + * + * @param int $interval A interval in seconds. + * @param int $periods_to_include Depth of time periods to include, e.g. for an interval of 70, and $periods_to_include of 2, both minutes and seconds would be included. With a value of 1, only minutes would be included. + * @return string A human friendly string representation of the interval. + */ + private static function human_interval( $interval, $periods_to_include = 2 ) { + + if ( $interval <= 0 ) { + return __( 'Now!', 'action-scheduler' ); + } + + $output = ''; + $num_time_periods = count( self::$time_periods ); + + for ( $time_period_index = 0, $periods_included = 0, $seconds_remaining = $interval; $time_period_index < $num_time_periods && $seconds_remaining > 0 && $periods_included < $periods_to_include; $time_period_index++ ) { + + $periods_in_interval = floor( $seconds_remaining / self::$time_periods[ $time_period_index ]['seconds'] ); + + if ( $periods_in_interval > 0 ) { + if ( ! empty( $output ) ) { + $output .= ' '; + } + $output .= sprintf( translate_nooped_plural( self::$time_periods[ $time_period_index ]['names'], $periods_in_interval, 'action-scheduler' ), $periods_in_interval ); + $seconds_remaining -= $periods_in_interval * self::$time_periods[ $time_period_index ]['seconds']; + $periods_included++; + } + } + + return $output; + } + + /** + * Returns the recurrence of an action or 'Non-repeating'. The output is human readable. + * + * @param ActionScheduler_Action $action Action object. + * + * @return string + */ + protected function get_recurrence( $action ) { + $schedule = $action->get_schedule(); + if ( $schedule->is_recurring() && method_exists( $schedule, 'get_recurrence' ) ) { + $recurrence = $schedule->get_recurrence(); + + if ( is_numeric( $recurrence ) ) { + /* translators: %s: time interval */ + return sprintf( __( 'Every %s', 'action-scheduler' ), self::human_interval( $recurrence ) ); + } else { + return $recurrence; + } + } + + return __( 'Non-repeating', 'action-scheduler' ); + } + + /** + * Serializes the argument of an action to render it in a human friendly format. + * + * @param array $row The array representation of the current row of the table. + * + * @return string + */ + public function column_args( array $row ) { + if ( empty( $row['args'] ) ) { + return apply_filters( 'action_scheduler_list_table_column_args', '', $row ); + } + + $row_html = '
      '; + foreach ( $row['args'] as $key => $value ) { + $row_html .= sprintf( '
    • %s => %s
    • ', esc_html( var_export( $key, true ) ), esc_html( var_export( $value, true ) ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export + } + $row_html .= '
    '; + + return apply_filters( 'action_scheduler_list_table_column_args', $row_html, $row ); + } + + /** + * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal. + * + * @param array $row Action array. + * @return string + */ + public function column_log_entries( array $row ) { + + $log_entries_html = '
      '; + + $timezone = new DateTimezone( 'UTC' ); + + foreach ( $row['log_entries'] as $log_entry ) { + $log_entries_html .= $this->get_log_entry_html( $log_entry, $timezone ); + } + + $log_entries_html .= '
    '; + + return $log_entries_html; + } + + /** + * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal. + * + * @param ActionScheduler_LogEntry $log_entry Log entry object. + * @param DateTimezone $timezone Timestamp. + * @return string + */ + protected function get_log_entry_html( ActionScheduler_LogEntry $log_entry, DateTimezone $timezone ) { + $date = $log_entry->get_date(); + $date->setTimezone( $timezone ); + return sprintf( '
  • %s
    %s
  • ', esc_html( $date->format( 'Y-m-d H:i:s O' ) ), esc_html( $log_entry->get_message() ) ); + } + + /** + * Only display row actions for pending actions. + * + * @param array $row Row to render. + * @param string $column_name Current row. + * + * @return string + */ + protected function maybe_render_actions( $row, $column_name ) { + if ( 'pending' === strtolower( $row['status_name'] ) ) { + return parent::maybe_render_actions( $row, $column_name ); + } + + return ''; + } + + /** + * Renders admin notifications + * + * Notifications: + * 1. When the maximum number of tasks are being executed simultaneously. + * 2. Notifications when a task is manually executed. + * 3. Tables are missing. + */ + public function display_admin_notices() { + global $wpdb; + + if ( ( is_a( $this->store, 'ActionScheduler_HybridStore' ) || is_a( $this->store, 'ActionScheduler_DBStore' ) ) && apply_filters( 'action_scheduler_enable_recreate_data_store', true ) ) { + $table_list = array( + 'actionscheduler_actions', + 'actionscheduler_logs', + 'actionscheduler_groups', + 'actionscheduler_claims', + ); + + $found_tables = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}actionscheduler%'" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + foreach ( $table_list as $table_name ) { + if ( ! in_array( $wpdb->prefix . $table_name, $found_tables, true ) ) { + $this->admin_notices[] = array( + 'class' => 'error', + 'message' => __( 'It appears one or more database tables were missing. Attempting to re-create the missing table(s).', 'action-scheduler' ), + ); + $this->recreate_tables(); + parent::display_admin_notices(); + + return; + } + } + } + + if ( $this->runner->has_maximum_concurrent_batches() ) { + $claim_count = $this->store->get_claim_count(); + $this->admin_notices[] = array( + 'class' => 'updated', + 'message' => sprintf( + /* translators: %s: amount of claims */ + _n( + 'Maximum simultaneous queues already in progress (%s queue). No additional queues will begin processing until the current queues are complete.', + 'Maximum simultaneous queues already in progress (%s queues). No additional queues will begin processing until the current queues are complete.', + $claim_count, + 'action-scheduler' + ), + $claim_count + ), + ); + } elseif ( $this->store->has_pending_actions_due() ) { + + $async_request_lock_expiration = ActionScheduler::lock()->get_expiration( 'async-request-runner' ); + + // No lock set or lock expired. + if ( false === $async_request_lock_expiration || $async_request_lock_expiration < time() ) { + $in_progress_url = add_query_arg( 'status', 'in-progress', remove_query_arg( 'status' ) ); + /* translators: %s: process URL */ + $async_request_message = sprintf( __( 'A new queue has begun processing. View actions in-progress »', 'action-scheduler' ), esc_url( $in_progress_url ) ); + } else { + /* translators: %d: seconds */ + $async_request_message = sprintf( __( 'The next queue will begin processing in approximately %d seconds.', 'action-scheduler' ), $async_request_lock_expiration - time() ); + } + + $this->admin_notices[] = array( + 'class' => 'notice notice-info', + 'message' => $async_request_message, + ); + } + + $notification = get_transient( 'action_scheduler_admin_notice' ); + + if ( is_array( $notification ) ) { + delete_transient( 'action_scheduler_admin_notice' ); + + $action = $this->store->fetch_action( $notification['action_id'] ); + $action_hook_html = '' . $action->get_hook() . ''; + + if ( 1 === absint( $notification['success'] ) ) { + $class = 'updated'; + switch ( $notification['row_action_type'] ) { + case 'run': + /* translators: %s: action HTML */ + $action_message_html = sprintf( __( 'Successfully executed action: %s', 'action-scheduler' ), $action_hook_html ); + break; + case 'cancel': + /* translators: %s: action HTML */ + $action_message_html = sprintf( __( 'Successfully canceled action: %s', 'action-scheduler' ), $action_hook_html ); + break; + default: + /* translators: %s: action HTML */ + $action_message_html = sprintf( __( 'Successfully processed change for action: %s', 'action-scheduler' ), $action_hook_html ); + break; + } + } else { + $class = 'error'; + /* translators: 1: action HTML 2: action ID 3: error message */ + $action_message_html = sprintf( __( 'Could not process change for action: "%1$s" (ID: %2$d). Error: %3$s', 'action-scheduler' ), $action_hook_html, esc_html( $notification['action_id'] ), esc_html( $notification['error_message'] ) ); + } + + $action_message_html = apply_filters( 'action_scheduler_admin_notice_html', $action_message_html, $action, $notification ); + + $this->admin_notices[] = array( + 'class' => $class, + 'message' => $action_message_html, + ); + } + + parent::display_admin_notices(); + } + + /** + * Prints the scheduled date in a human friendly format. + * + * @param array $row The array representation of the current row of the table. + * + * @return string + */ + public function column_schedule( $row ) { + return $this->get_schedule_display_string( $row['schedule'] ); + } + + /** + * Get the scheduled date in a human friendly format. + * + * @param ActionScheduler_Schedule $schedule Action's schedule. + * @return string + */ + protected function get_schedule_display_string( ActionScheduler_Schedule $schedule ) { + + $schedule_display_string = ''; + + if ( is_a( $schedule, 'ActionScheduler_NullSchedule' ) ) { + return __( 'async', 'action-scheduler' ); + } + + if ( ! method_exists( $schedule, 'get_date' ) || ! $schedule->get_date() ) { + return '0000-00-00 00:00:00'; + } + + $next_timestamp = $schedule->get_date()->getTimestamp(); + + $schedule_display_string .= $schedule->get_date()->format( 'Y-m-d H:i:s O' ); + $schedule_display_string .= '
    '; + + if ( gmdate( 'U' ) > $next_timestamp ) { + /* translators: %s: date interval */ + $schedule_display_string .= sprintf( __( ' (%s ago)', 'action-scheduler' ), self::human_interval( gmdate( 'U' ) - $next_timestamp ) ); + } else { + /* translators: %s: date interval */ + $schedule_display_string .= sprintf( __( ' (%s)', 'action-scheduler' ), self::human_interval( $next_timestamp - gmdate( 'U' ) ) ); + } + + return $schedule_display_string; + } + + /** + * Bulk delete. + * + * Deletes actions based on their ID. This is the handler for the bulk delete. It assumes the data + * properly validated by the callee and it will delete the actions without any extra validation. + * + * @param int[] $ids Action IDs. + * @param string $ids_sql Inherited and unused. + */ + protected function bulk_delete( array $ids, $ids_sql ) { + foreach ( $ids as $id ) { + try { + $this->store->delete_action( $id ); + } catch ( Exception $e ) { + // A possible reason for an exception would include a scenario where the same action is deleted by a + // concurrent request. + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + error_log( + sprintf( + /* translators: 1: action ID 2: exception message. */ + __( 'Action Scheduler was unable to delete action %1$d. Reason: %2$s', 'action-scheduler' ), + $id, + $e->getMessage() + ) + ); + } + } + } + + /** + * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their + * parameters are valid. + * + * @param int $action_id Action ID. + */ + protected function row_action_cancel( $action_id ) { + $this->process_row_action( $action_id, 'cancel' ); + } + + /** + * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their + * parameters are valid. + * + * @param int $action_id Action ID. + */ + protected function row_action_run( $action_id ) { + $this->process_row_action( $action_id, 'run' ); + } + + /** + * Force the data store schema updates. + */ + protected function recreate_tables() { + if ( is_a( $this->store, 'ActionScheduler_HybridStore' ) ) { + $store = $this->store; + } else { + $store = new ActionScheduler_HybridStore(); + } + add_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10, 2 ); + + $store_schema = new ActionScheduler_StoreSchema(); + $logger_schema = new ActionScheduler_LoggerSchema(); + $store_schema->register_tables( true ); + $logger_schema->register_tables( true ); + + remove_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10 ); + } + /** + * Implements the logic behind processing an action once an action link is clicked on the list table. + * + * @param int $action_id Action ID. + * @param string $row_action_type The type of action to perform on the action. + */ + protected function process_row_action( $action_id, $row_action_type ) { + try { + switch ( $row_action_type ) { + case 'run': + $this->runner->process_action( $action_id, 'Admin List Table' ); + break; + case 'cancel': + $this->store->cancel_action( $action_id ); + break; + } + $success = 1; + $error_message = ''; + } catch ( Exception $e ) { + $success = 0; + $error_message = $e->getMessage(); + } + + set_transient( 'action_scheduler_admin_notice', compact( 'action_id', 'success', 'error_message', 'row_action_type' ), 30 ); + } + + /** + * {@inheritDoc} + */ + public function prepare_items() { + $this->prepare_column_headers(); + + $per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page ); + + $query = array( + 'per_page' => $per_page, + 'offset' => $this->get_items_offset(), + 'status' => $this->get_request_status(), + 'orderby' => $this->get_request_orderby(), + 'order' => $this->get_request_order(), + 'search' => $this->get_request_search_query(), + ); + + /** + * Change query arguments to query for past-due actions. + * Past-due actions have the 'pending' status and are in the past. + * This is needed because registering 'past-due' as a status is overkill. + */ + if ( 'past-due' === $this->get_request_status() ) { + $query['status'] = ActionScheduler_Store::STATUS_PENDING; + $query['date'] = as_get_datetime_object(); + } + + $this->items = array(); + + $total_items = $this->store->query_actions( $query, 'count' ); + + $status_labels = $this->store->get_status_labels(); + + foreach ( $this->store->query_actions( $query ) as $action_id ) { + try { + $action = $this->store->fetch_action( $action_id ); + } catch ( Exception $e ) { + continue; + } + if ( is_a( $action, 'ActionScheduler_NullAction' ) ) { + continue; + } + $this->items[ $action_id ] = array( + 'ID' => $action_id, + 'hook' => $action->get_hook(), + 'status_name' => $this->store->get_status( $action_id ), + 'status' => $status_labels[ $this->store->get_status( $action_id ) ], + 'args' => $action->get_args(), + 'group' => $action->get_group(), + 'log_entries' => $this->logger->get_logs( $action_id ), + 'claim_id' => $this->store->get_claim_id( $action_id ), + 'recurrence' => $this->get_recurrence( $action ), + 'schedule' => $action->get_schedule(), + ); + } + + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'per_page' => $per_page, + 'total_pages' => ceil( $total_items / $per_page ), + ) + ); + } + + /** + * Prints the available statuses so the user can click to filter. + */ + protected function display_filter_by_status() { + $this->status_counts = $this->store->action_counts() + $this->store->extra_action_counts(); + parent::display_filter_by_status(); + } + + /** + * Get the text to display in the search box on the list table. + */ + protected function get_search_box_button_text() { + return __( 'Search hook, args and claim ID', 'action-scheduler' ); + } + + /** + * {@inheritDoc} + */ + protected function get_per_page_option_name() { + return str_replace( '-', '_', $this->screen->id ) . '_per_page'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php new file mode 100644 index 0000000..726fea2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php @@ -0,0 +1,78 @@ +comment_type + * to ActionScheduler_LogEntry::__construct(), goodness knows why, and the Follow-up Emails plugin + * hard-codes loading its own version of ActionScheduler_wpCommentLogger with that out-dated method, + * goodness knows why, so we need to guard against that here instead of using a DateTime type declaration + * for the constructor's 3rd param of $date and causing a fatal error with older versions of FUE. + */ + if ( null !== $date && ! is_a( $date, 'DateTime' ) ) { + _doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' ); + $date = null; + } + + $this->action_id = $action_id; + $this->message = $message; + $this->date = $date ? $date : new Datetime(); + } + + /** + * Returns the date when this log entry was created + * + * @return Datetime + */ + public function get_date() { + return $this->date; + } + + /** + * Get action ID of log entry. + */ + public function get_action_id() { + return $this->action_id; + } + + /** + * Get log entry message. + */ + public function get_message() { + return $this->message; + } +} + diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php new file mode 100644 index 0000000..4df0f05 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php @@ -0,0 +1,18 @@ +maybe_dispatch_async_request() uses a lock to avoid + * calling ActionScheduler_QueueRunner->has_maximum_concurrent_batches() every time the 'shutdown', + * hook is triggered, because that method calls ActionScheduler_QueueRunner->store->get_claim_count() + * to find the current number of claims in the database. + * + * @param string $lock_type A string to identify different lock types. + * @bool True if lock value has changed, false if not or if set failed. + */ + public function set( $lock_type ) { + global $wpdb; + + $lock_key = $this->get_key( $lock_type ); + $existing_lock_value = $this->get_existing_lock( $lock_type ); + $new_lock_value = $this->new_lock_value( $lock_type ); + + // The lock may not exist yet, or may have been deleted. + if ( empty( $existing_lock_value ) ) { + return (bool) $wpdb->insert( + $wpdb->options, + array( + 'option_name' => $lock_key, + 'option_value' => $new_lock_value, + 'autoload' => 'no', + ) + ); + } + + if ( $this->get_expiration_from( $existing_lock_value ) >= time() ) { + return false; + } + + // Otherwise, try to obtain the lock. + return (bool) $wpdb->update( + $wpdb->options, + array( 'option_value' => $new_lock_value ), + array( + 'option_name' => $lock_key, + 'option_value' => $existing_lock_value, + ) + ); + } + + /** + * If a lock is set, return the timestamp it was set to expiry. + * + * @param string $lock_type A string to identify different lock types. + * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire. + */ + public function get_expiration( $lock_type ) { + return $this->get_expiration_from( $this->get_existing_lock( $lock_type ) ); + } + + /** + * Given the lock string, derives the lock expiration timestamp (or false if it cannot be determined). + * + * @param string $lock_value String containing a timestamp, or pipe-separated combination of unique value and timestamp. + * + * @return false|int + */ + private function get_expiration_from( $lock_value ) { + $lock_string = explode( '|', $lock_value ); + + // Old style lock? + if ( count( $lock_string ) === 1 && is_numeric( $lock_string[0] ) ) { + return (int) $lock_string[0]; + } + + // New style lock? + if ( count( $lock_string ) === 2 && is_numeric( $lock_string[1] ) ) { + return (int) $lock_string[1]; + } + + return false; + } + + /** + * Get the key to use for storing the lock in the transient + * + * @param string $lock_type A string to identify different lock types. + * @return string + */ + protected function get_key( $lock_type ) { + return sprintf( 'action_scheduler_lock_%s', $lock_type ); + } + + /** + * Supplies the existing lock value, or an empty string if not set. + * + * @param string $lock_type A string to identify different lock types. + * + * @return string + */ + private function get_existing_lock( $lock_type ) { + global $wpdb; + + // Now grab the existing lock value, if there is one. + return (string) $wpdb->get_var( + $wpdb->prepare( + "SELECT option_value FROM $wpdb->options WHERE option_name = %s", + $this->get_key( $lock_type ) + ) + ); + } + + /** + * Supplies a lock value consisting of a unique value and the current timestamp, which are separated by a pipe + * character. + * + * Example: (string) "649de012e6b262.09774912|1688068114" + * + * @param string $lock_type A string to identify different lock types. + * + * @return string + */ + private function new_lock_value( $lock_type ) { + return uniqid( '', true ) . '|' . ( time() + $this->get_duration( $lock_type ) ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php new file mode 100644 index 0000000..7029d0b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php @@ -0,0 +1,254 @@ +store = $store ? $store : ActionScheduler_Store::instance(); + $this->batch_size = $batch_size; + } + + /** + * Default queue cleaner process used by queue runner. + * + * @return array + */ + public function delete_old_actions() { + /** + * Filter the minimum scheduled date age for action deletion. + * + * @param int $retention_period Minimum scheduled age in seconds of the actions to be deleted. + */ + $lifespan = apply_filters( 'action_scheduler_retention_period', $this->month_in_seconds ); + + try { + $cutoff = as_get_datetime_object( $lifespan . ' seconds ago' ); + } catch ( Exception $e ) { + _doing_it_wrong( + __METHOD__, + sprintf( + /* Translators: %s is the exception message. */ + esc_html__( 'It was not possible to determine a valid cut-off time: %s.', 'action-scheduler' ), + esc_html( $e->getMessage() ) + ), + '3.5.5' + ); + + return array(); + } + + /** + * Filter the statuses when cleaning the queue. + * + * @param string[] $default_statuses_to_purge Action statuses to clean. + */ + $statuses_to_purge = (array) apply_filters( 'action_scheduler_default_cleaner_statuses', $this->default_statuses_to_purge ); + + return $this->clean_actions( $statuses_to_purge, $cutoff, $this->get_batch_size() ); + } + + /** + * Delete selected actions limited by status and date. + * + * @param string[] $statuses_to_purge List of action statuses to purge. Defaults to canceled, complete. + * @param DateTime $cutoff_date Date limit for selecting actions. Defaults to 31 days ago. + * @param int|null $batch_size Maximum number of actions per status to delete. Defaults to 20. + * @param string $context Calling process context. Defaults to `old`. + * @return array Actions deleted. + */ + public function clean_actions( array $statuses_to_purge, DateTime $cutoff_date, $batch_size = null, $context = 'old' ) { + $batch_size = ! is_null( $batch_size ) ? $batch_size : $this->batch_size; + $cutoff = ! is_null( $cutoff_date ) ? $cutoff_date : as_get_datetime_object( $this->month_in_seconds . ' seconds ago' ); + $lifespan = time() - $cutoff->getTimestamp(); + + if ( empty( $statuses_to_purge ) ) { + $statuses_to_purge = $this->default_statuses_to_purge; + } + + $deleted_actions = array(); + + foreach ( $statuses_to_purge as $status ) { + $actions_to_delete = $this->store->query_actions( + array( + 'status' => $status, + 'modified' => $cutoff, + 'modified_compare' => '<=', + 'per_page' => $batch_size, + 'orderby' => 'none', + ) + ); + + $deleted_actions = array_merge( $deleted_actions, $this->delete_actions( $actions_to_delete, $lifespan, $context ) ); + } + + return $deleted_actions; + } + + /** + * Delete actions. + * + * @param int[] $actions_to_delete List of action IDs to delete. + * @param int $lifespan Minimum scheduled age in seconds of the actions being deleted. + * @param string $context Context of the delete request. + * @return array Deleted action IDs. + */ + private function delete_actions( array $actions_to_delete, $lifespan = null, $context = 'old' ) { + $deleted_actions = array(); + + if ( is_null( $lifespan ) ) { + $lifespan = $this->month_in_seconds; + } + + foreach ( $actions_to_delete as $action_id ) { + try { + $this->store->delete_action( $action_id ); + $deleted_actions[] = $action_id; + } catch ( Exception $e ) { + /** + * Notify 3rd party code of exceptions when deleting a completed action older than the retention period + * + * This hook provides a way for 3rd party code to log or otherwise handle exceptions relating to their + * actions. + * + * @param int $action_id The scheduled actions ID in the data store + * @param Exception $e The exception thrown when attempting to delete the action from the data store + * @param int $lifespan The retention period, in seconds, for old actions + * @param int $count_of_actions_to_delete The number of old actions being deleted in this batch + * @since 2.0.0 + */ + do_action( "action_scheduler_failed_{$context}_action_deletion", $action_id, $e, $lifespan, count( $actions_to_delete ) ); + } + } + return $deleted_actions; + } + + /** + * Unclaim pending actions that have not been run within a given time limit. + * + * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed + * as a parameter is 10x the time limit used for queue processing. + * + * @param int $time_limit The number of seconds to allow a queue to run before unclaiming its pending actions. Default 300 (5 minutes). + */ + public function reset_timeouts( $time_limit = 300 ) { + $timeout = apply_filters( 'action_scheduler_timeout_period', $time_limit ); + + if ( $timeout < 0 ) { + return; + } + + $cutoff = as_get_datetime_object( $timeout . ' seconds ago' ); + $actions_to_reset = $this->store->query_actions( + array( + 'status' => ActionScheduler_Store::STATUS_PENDING, + 'modified' => $cutoff, + 'modified_compare' => '<=', + 'claimed' => true, + 'per_page' => $this->get_batch_size(), + 'orderby' => 'none', + ) + ); + + foreach ( $actions_to_reset as $action_id ) { + $this->store->unclaim_action( $action_id ); + do_action( 'action_scheduler_reset_action', $action_id ); + } + } + + /** + * Mark actions that have been running for more than a given time limit as failed, based on + * the assumption some uncatchable and unloggable fatal error occurred during processing. + * + * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed + * as a parameter is 10x the time limit used for queue processing. + * + * @param int $time_limit The number of seconds to allow an action to run before it is considered to have failed. Default 300 (5 minutes). + */ + public function mark_failures( $time_limit = 300 ) { + $timeout = apply_filters( 'action_scheduler_failure_period', $time_limit ); + + if ( $timeout < 0 ) { + return; + } + + $cutoff = as_get_datetime_object( $timeout . ' seconds ago' ); + $actions_to_reset = $this->store->query_actions( + array( + 'status' => ActionScheduler_Store::STATUS_RUNNING, + 'modified' => $cutoff, + 'modified_compare' => '<=', + 'per_page' => $this->get_batch_size(), + 'orderby' => 'none', + ) + ); + + foreach ( $actions_to_reset as $action_id ) { + $this->store->mark_failure( $action_id ); + do_action( 'action_scheduler_failed_action', $action_id, $timeout ); + } + } + + /** + * Do all of the cleaning actions. + * + * @param int $time_limit The number of seconds to use as the timeout and failure period. Default 300 (5 minutes). + */ + public function clean( $time_limit = 300 ) { + $this->delete_old_actions(); + $this->reset_timeouts( $time_limit ); + $this->mark_failures( $time_limit ); + } + + /** + * Get the batch size for cleaning the queue. + * + * @return int + */ + protected function get_batch_size() { + /** + * Filter the batch size when cleaning the queue. + * + * @param int $batch_size The number of actions to clean in one batch. + */ + return absint( apply_filters( 'action_scheduler_cleanup_batch_size', $this->batch_size ) ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php new file mode 100644 index 0000000..13a71e7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php @@ -0,0 +1,254 @@ +store ); + } + + $this->async_request = $async_request; + } + + /** + * Initialize. + * + * @codeCoverageIgnore + */ + public function init() { + + add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) ); // phpcs:ignore WordPress.WP.CronInterval.CronSchedulesInterval + + // Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param. + $next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK ); + if ( $next_timestamp ) { + wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK ); + } + + $cron_context = array( 'WP Cron' ); + + if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) { + $schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE ); + wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context ); + } + + add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) ); + $this->hook_dispatch_async_request(); + } + + /** + * Hook check for dispatching an async request. + */ + public function hook_dispatch_async_request() { + add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); + } + + /** + * Unhook check for dispatching an async request. + */ + public function unhook_dispatch_async_request() { + remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); + } + + /** + * Check if we should dispatch an async request to process actions. + * + * This method is attached to 'shutdown', so is called frequently. To avoid slowing down + * the site, it mitigates the work performed in each request by: + * 1. checking if it's in the admin context and then + * 2. haven't run on the 'shutdown' hook within the lock time (60 seconds by default) + * 3. haven't exceeded the number of allowed batches. + * + * The order of these checks is important, because they run from a check on a value: + * 1. in memory - is_admin() maps to $GLOBALS or the WP_ADMIN constant + * 2. in memory - transients use autoloaded options by default + * 3. from a database query - has_maximum_concurrent_batches() run the query + * $this->store->get_claim_count() to find the current number of claims in the DB. + * + * If all of these conditions are met, then we request an async runner check whether it + * should dispatch a request to process pending actions. + */ + public function maybe_dispatch_async_request() { + // Only start an async queue at most once every 60 seconds. + if ( + is_admin() + && ! ActionScheduler::lock()->is_locked( 'async-request-runner' ) + && ActionScheduler::lock()->set( 'async-request-runner' ) + ) { + $this->async_request->maybe_dispatch(); + } + } + + /** + * Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. 'action_scheduler_run_queue' + * + * The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0 + * that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context + * passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK, + * should set a context as the first parameter. For an example of this, refer to the code seen in + * + * @see ActionScheduler_AsyncRequest_QueueRunner::handle() + * + * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' + * Generally, this should be capitalised and not localised as it's a proper noun. + * @return int The number of actions processed. + */ + public function run( $context = 'WP Cron' ) { + ActionScheduler_Compatibility::raise_memory_limit(); + ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() ); + do_action( 'action_scheduler_before_process_queue' ); + $this->run_cleanup(); + + $this->processed_actions_count = 0; + if ( false === $this->has_maximum_concurrent_batches() ) { + do { + $batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 ); + $processed_actions_in_batch = $this->do_batch( $batch_size, $context ); + $this->processed_actions_count += $processed_actions_in_batch; + } while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $this->processed_actions_count ) ); // keep going until we run out of actions, time, or memory. + } + + do_action( 'action_scheduler_after_process_queue' ); + return $this->processed_actions_count; + } + + /** + * Process a batch of actions pending in the queue. + * + * Actions are processed by claiming a set of pending actions then processing each one until either the batch + * size is completed, or memory or time limits are reached, defined by @see $this->batch_limits_exceeded(). + * + * @param int $size The maximum number of actions to process in the batch. + * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' + * Generally, this should be capitalised and not localised as it's a proper noun. + * @return int The number of actions processed. + */ + protected function do_batch( $size = 100, $context = '' ) { + $claim = $this->store->stake_claim( $size ); + $this->monitor->attach( $claim ); + $processed_actions = 0; + + foreach ( $claim->get_actions() as $action_id ) { + // bail if we lost the claim. + if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ), true ) ) { + break; + } + $this->process_action( $action_id, $context ); + $processed_actions++; + + if ( $this->batch_limits_exceeded( $processed_actions + $this->processed_actions_count ) ) { + break; + } + } + $this->store->release_claim( $claim ); + $this->monitor->detach(); + $this->clear_caches(); + return $processed_actions; + } + + /** + * Flush the cache if possible (intended for use after a batch of actions has been processed). + * + * This is useful because running large batches can eat up memory and because invalid data can accrue in the + * runtime cache, which may lead to unexpected results. + */ + protected function clear_caches() { + /* + * Calling wp_cache_flush_runtime() lets us clear the runtime cache without invalidating the external object + * cache, so we will always prefer this method (as compared to calling wp_cache_flush()) when it is available. + * + * However, this function was only introduced in WordPress 6.0. Additionally, the preferred way of detecting if + * it is supported changed in WordPress 6.1 so we use two different methods to decide if we should utilize it. + */ + $flushing_runtime_cache_explicitly_supported = function_exists( 'wp_cache_supports' ) && wp_cache_supports( 'flush_runtime' ); + $flushing_runtime_cache_implicitly_supported = ! function_exists( 'wp_cache_supports' ) && function_exists( 'wp_cache_flush_runtime' ); + + if ( $flushing_runtime_cache_explicitly_supported || $flushing_runtime_cache_implicitly_supported ) { + wp_cache_flush_runtime(); + } elseif ( + ! wp_using_ext_object_cache() + /** + * When an external object cache is in use, and when wp_cache_flush_runtime() is not available, then + * normally the cache will not be flushed after processing a batch of actions (to avoid a performance + * penalty for other processes). + * + * This filter makes it possible to override this behavior and always flush the cache, even if an external + * object cache is in use. + * + * @since 1.0 + * + * @param bool $flush_cache If the cache should be flushed. + */ + || apply_filters( 'action_scheduler_queue_runner_flush_cache', false ) + ) { + wp_cache_flush(); + } + } + + /** + * Add schedule to WP cron. + * + * @param array> $schedules Schedules. + * @return array> + */ + public function add_wp_cron_schedule( $schedules ) { + $schedules['every_minute'] = array( + 'interval' => 60, // in seconds. + 'display' => __( 'Every minute', 'action-scheduler' ), + ); + + return $schedules; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php new file mode 100644 index 0000000..2f393ff --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php @@ -0,0 +1,81 @@ + 'plugin', # or 'theme' + * 'name' => 'Name', + * ] + * + * @return array + */ + public static function active_source(): array { + $plugins = get_plugins(); + $plugin_files = array_keys( $plugins ); + + foreach ( $plugin_files as $plugin_file ) { + $plugin_path = trailingslashit( WP_PLUGIN_DIR ) . dirname( $plugin_file ); + $plugin_file = trailingslashit( WP_PLUGIN_DIR ) . $plugin_file; + + if ( 0 !== strpos( dirname( __DIR__ ), $plugin_path ) ) { + continue; + } + + $plugin_data = get_plugin_data( $plugin_file ); + + if ( ! is_array( $plugin_data ) || empty( $plugin_data['Name'] ) ) { + continue; + } + + return array( + 'type' => 'plugin', + 'name' => $plugin_data['Name'], + ); + } + + $themes = (array) search_theme_directories(); + + foreach ( $themes as $slug => $data ) { + $needle = trailingslashit( $data['theme_root'] ) . $slug . '/'; + + if ( 0 !== strpos( __FILE__, $needle ) ) { + continue; + } + + $theme = wp_get_theme( $slug ); + + if ( ! is_object( $theme ) || ! is_a( $theme, \WP_Theme::class ) ) { + continue; + } + + return array( + 'type' => 'theme', + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + 'name' => $theme->Name, + ); + } + + return array(); + } + + /** + * Returns the directory path for the currently active installation of Action Scheduler. + * + * @return string + */ + public static function active_source_path(): string { + return trailingslashit( dirname( __DIR__ ) ); + } + + /** + * Get registered sources. + * + * It is not always possible to obtain this information. For instance, if earlier versions (<=3.9.0) of + * Action Scheduler register themselves first, then the necessary data about registered sources will + * not be available. + * + * @return array + */ + public static function get_sources() { + $versions = ActionScheduler_Versions::instance(); + return method_exists( $versions, 'get_sources' ) ? $versions->get_sources() : array(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php new file mode 100644 index 0000000..c23e464 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php @@ -0,0 +1,151 @@ + + */ + private $versions = array(); + + /** + * Registered sources. + * + * @var array + */ + private $sources = array(); + + /** + * Register version's callback. + * + * @param string $version_string Action Scheduler version. + * @param callable $initialization_callback Callback to initialize the version. + */ + public function register( $version_string, $initialization_callback ) { + if ( isset( $this->versions[ $version_string ] ) ) { + return false; + } + + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace + $backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); + $source = $backtrace[0]['file']; + + $this->versions[ $version_string ] = $initialization_callback; + $this->sources[ $source ] = $version_string; + return true; + } + + /** + * Get all versions. + */ + public function get_versions() { + return $this->versions; + } + + /** + * Get registered sources. + * + * Use with caution: this method is only available as of Action Scheduler's 3.9.1 + * release and, owing to the way Action Scheduler is loaded, it's possible that the + * class definition used at runtime will belong to an earlier version. + * + * @since 3.9.1 + * + * @return array + */ + public function get_sources() { + return $this->sources; + } + + /** + * Get latest version registered. + */ + public function latest_version() { + $keys = array_keys( $this->versions ); + if ( empty( $keys ) ) { + return false; + } + uasort( $keys, 'version_compare' ); + return end( $keys ); + } + + /** + * Get callback for latest registered version. + */ + public function latest_version_callback() { + $latest = $this->latest_version(); + + if ( empty( $latest ) || ! isset( $this->versions[ $latest ] ) ) { + return '__return_null'; + } + + return $this->versions[ $latest ]; + } + + /** + * Get instance. + * + * @return ActionScheduler_Versions + * @codeCoverageIgnore + */ + public static function instance() { + if ( empty( self::$instance ) ) { + self::$instance = new self(); + } + return self::$instance; + } + + /** + * Initialize. + * + * @codeCoverageIgnore + */ + public static function initialize_latest_version() { + $self = self::instance(); + call_user_func( $self->latest_version_callback() ); + } + + /** + * Returns information about the plugin or theme which contains the current active version + * of Action Scheduler. + * + * If this cannot be determined, or if Action Scheduler is being loaded via some other + * method, then it will return an empty array. Otherwise, if populated, the array will + * look like the following: + * + * [ + * 'type' => 'plugin', # or 'theme' + * 'name' => 'Name', + * ] + * + * @deprecated 3.9.2 Use ActionScheduler_SystemInformation::active_source(). + * + * @return array + */ + public function active_source(): array { + _deprecated_function( __METHOD__, '3.9.2', 'ActionScheduler_SystemInformation::active_source()' ); + return ActionScheduler_SystemInformation::active_source(); + } + + /** + * Returns the directory path for the currently active installation of Action Scheduler. + * + * @deprecated 3.9.2 Use ActionScheduler_SystemInformation::active_source_path(). + * + * @return string + */ + public function active_source_path(): string { + _deprecated_function( __METHOD__, '3.9.2', 'ActionScheduler_SystemInformation::active_source_path()' ); + return ActionScheduler_SystemInformation::active_source_path(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php new file mode 100644 index 0000000..2725d1f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php @@ -0,0 +1,133 @@ + Status administration screen. + add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) ); + add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) ); + } + + /** + * Determines if there are log entries in the wp comments table. + * + * Uses the flag set on migration completion set by @see self::maybe_schedule_cleanup(). + * + * @return boolean Whether there are scheduled action comments in the comments table. + */ + public static function has_logs() { + return 'yes' === get_option( self::$has_logs_option_key ); + } + + /** + * Schedules the WP Post comment table cleanup to run in 6 months if it's not already scheduled. + * Attached to the migration complete hook 'action_scheduler/migration_complete'. + */ + public static function maybe_schedule_cleanup() { + $has_logs = 'no'; + + $args = array( + 'type' => ActionScheduler_wpCommentLogger::TYPE, + 'number' => 1, + 'fields' => 'ids', + ); + + if ( (bool) get_comments( $args ) ) { + $has_logs = 'yes'; + + if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) { + as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook ); + } + } + + update_option( self::$has_logs_option_key, $has_logs, true ); + } + + /** + * Delete all action comments from the WP Comments table. + */ + public static function delete_all_action_comments() { + global $wpdb; + + $wpdb->delete( + $wpdb->comments, + array( + 'comment_type' => ActionScheduler_wpCommentLogger::TYPE, + 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT, + ) + ); + + update_option( self::$has_logs_option_key, 'no', true ); + } + + /** + * Registers admin notices about the orphaned action logs. + */ + public static function register_admin_notice() { + add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) ); + } + + /** + * Prints details about the orphaned action logs and includes information on where to learn more. + */ + public static function print_admin_notice() { + $next_cleanup_message = ''; + $next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook ); + + if ( $next_scheduled_cleanup_hook ) { + /* translators: %s: date interval */ + $next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) ); + } + + $notice = sprintf( + /* translators: 1: next cleanup message 2: github issue URL */ + __( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s Learn more »', 'action-scheduler' ), + $next_cleanup_message, + 'https://github.com/woocommerce/action-scheduler/issues/368' + ); + + echo '

    ' . wp_kses_post( $notice ) . '

    '; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php new file mode 100644 index 0000000..cd6ca94 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php @@ -0,0 +1,165 @@ +store = $store; + } + + /** + * Display action data, including number of actions grouped by status and the oldest & newest action in each status. + * + * Helpful to identify issues, like a clogged queue. + */ + public function render() { + $action_counts = $this->store->action_counts(); + $status_labels = $this->store->get_status_labels(); + $oldest_and_newest = $this->get_oldest_and_newest( array_keys( $status_labels ) ); + + $this->get_template( $status_labels, $action_counts, $oldest_and_newest ); + } + + /** + * Get oldest and newest scheduled dates for a given set of statuses. + * + * @param array $status_keys Set of statuses to find oldest & newest action for. + * @return array + */ + protected function get_oldest_and_newest( $status_keys ) { + + $oldest_and_newest = array(); + + foreach ( $status_keys as $status ) { + $oldest_and_newest[ $status ] = array( + 'oldest' => '–', + 'newest' => '–', + ); + + if ( 'in-progress' === $status ) { + continue; + } + + $oldest_and_newest[ $status ]['oldest'] = $this->get_action_status_date( $status, 'oldest' ); + $oldest_and_newest[ $status ]['newest'] = $this->get_action_status_date( $status, 'newest' ); + } + + return $oldest_and_newest; + } + + /** + * Get oldest or newest scheduled date for a given status. + * + * @param string $status Action status label/name string. + * @param string $date_type Oldest or Newest. + * @return DateTime + */ + protected function get_action_status_date( $status, $date_type = 'oldest' ) { + + $order = 'oldest' === $date_type ? 'ASC' : 'DESC'; + + $action = $this->store->query_actions( + array( + 'status' => $status, + 'per_page' => 1, + 'order' => $order, + ) + ); + + if ( ! empty( $action ) ) { + $date_object = $this->store->get_date( $action[0] ); + $action_date = $date_object->format( 'Y-m-d H:i:s O' ); + } else { + $action_date = '–'; + } + + return $action_date; + } + + /** + * Get oldest or newest scheduled date for a given status. + * + * @param array $status_labels Set of statuses to find oldest & newest action for. + * @param array $action_counts Number of actions grouped by status. + * @param array $oldest_and_newest Date of the oldest and newest action with each status. + */ + protected function get_template( $status_labels, $action_counts, $oldest_and_newest ) { + $as_version = ActionScheduler_Versions::instance()->latest_version(); + $as_datastore = get_class( ActionScheduler_Store::instance() ); + ?> + + + + + + + + + + + + + + + + + + + + + + + + $count ) { + // WC uses the 3rd column for export, so we need to display more data in that (hidden when viewed as part of the table) and add an empty 2nd column. + printf( + '', + esc_html( $status_labels[ $status ] ), + esc_html( number_format_i18n( $count ) ), + esc_html( $oldest_and_newest[ $status ]['oldest'] ), + esc_html( $oldest_and_newest[ $status ]['newest'] ) + ); + } + ?> + +

     
    %1$s %2$s, Oldest: %3$s, Newest: %4$s%3$s%4$s
    + + assoc_args, 'group', '' ); + $callback_args = get_flag_value( $this->assoc_args, 'args', null ); + $all = get_flag_value( $this->assoc_args, 'all', false ); + + if ( ! empty( $this->args[0] ) ) { + $hook = $this->args[0]; + } + + if ( ! empty( $callback_args ) ) { + $callback_args = json_decode( $callback_args, true ); + } + + if ( $all ) { + $this->cancel_all( $hook, $callback_args, $group ); + return; + } + + $this->cancel_single( $hook, $callback_args, $group ); + } + + /** + * Cancel single action. + * + * @param string $hook The hook that the job will trigger. + * @param array $callback_args Args that would have been passed to the job. + * @param string $group The group the job is assigned to. + * @return void + */ + protected function cancel_single( $hook, $callback_args, $group ) { + if ( empty( $hook ) ) { + \WP_CLI::error( __( 'Please specify hook of action to cancel.', 'action-scheduler' ) ); + } + + try { + $result = as_unschedule_action( $hook, $callback_args, $group ); + } catch ( \Exception $e ) { + $this->print_error( $e, false ); + } + + if ( null === $result ) { + $e = new \Exception( __( 'Unable to cancel scheduled action: check the logs.', 'action-scheduler' ) ); + $this->print_error( $e, false ); + } + + $this->print_success( false ); + } + + /** + * Cancel all actions. + * + * @param string $hook The hook that the job will trigger. + * @param array $callback_args Args that would have been passed to the job. + * @param string $group The group the job is assigned to. + * @return void + */ + protected function cancel_all( $hook, $callback_args, $group ) { + if ( empty( $hook ) && empty( $group ) ) { + \WP_CLI::error( __( 'Please specify hook and/or group of actions to cancel.', 'action-scheduler' ) ); + } + + try { + $result = as_unschedule_all_actions( $hook, $callback_args, $group ); + } catch ( \Exception $e ) { + $this->print_error( $e, $multiple ); + } + + /** + * Because as_unschedule_all_actions() does not provide a result, + * neither confirm or deny actions cancelled. + */ + \WP_CLI::success( __( 'Request to cancel scheduled actions completed.', 'action-scheduler' ) ); + } + + /** + * Print a success message. + * + * @return void + */ + protected function print_success() { + \WP_CLI::success( __( 'Scheduled action cancelled.', 'action-scheduler' ) ); + } + + /** + * Convert an exception into a WP CLI error. + * + * @param \Exception $e The error object. + * @param bool $multiple Boolean if multiple actions. + * @throws \WP_CLI\ExitException When an error occurs. + * @return void + */ + protected function print_error( \Exception $e, $multiple ) { + \WP_CLI::error( + sprintf( + /* translators: %1$s: singular or plural %2$s: refers to the exception error message. */ + __( 'There was an error cancelling the %1$s: %2$s', 'action-scheduler' ), + $multiple ? __( 'scheduled actions', 'action-scheduler' ) : __( 'scheduled action', 'action-scheduler' ), + $e->getMessage() + ) + ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php new file mode 100644 index 0000000..403ecfe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php @@ -0,0 +1,153 @@ +args[0]; + $schedule_start = $this->args[1]; + $callback_args = get_flag_value( $this->assoc_args, 'args', array() ); + $group = get_flag_value( $this->assoc_args, 'group', '' ); + $interval = absint( get_flag_value( $this->assoc_args, 'interval', 0 ) ); + $cron = get_flag_value( $this->assoc_args, 'cron', '' ); + $unique = get_flag_value( $this->assoc_args, 'unique', false ); + $priority = absint( get_flag_value( $this->assoc_args, 'priority', 10 ) ); + + if ( ! empty( $callback_args ) ) { + $callback_args = json_decode( $callback_args, true ); + } + + $function_args = array( + 'start' => $schedule_start, + 'cron' => $cron, + 'interval' => $interval, + 'hook' => $hook, + 'callback_args' => $callback_args, + 'group' => $group, + 'unique' => $unique, + 'priority' => $priority, + ); + + try { + // Generate schedule start if appropriate. + if ( ! in_array( $schedule_start, static::ASYNC_OPTS, true ) ) { + $schedule_start = as_get_datetime_object( $schedule_start ); + $function_args['start'] = $schedule_start->format( 'U' ); + } + } catch ( \Exception $e ) { + \WP_CLI::error( $e->getMessage() ); + } + + // Default to creating single action. + $action_type = 'single'; + $function = 'as_schedule_single_action'; + + if ( ! empty( $interval ) ) { // Creating recurring action. + $action_type = 'recurring'; + $function = 'as_schedule_recurring_action'; + + $function_args = array_filter( + $function_args, + static function( $key ) { + return in_array( $key, array( 'start', 'interval', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true ); + }, + ARRAY_FILTER_USE_KEY + ); + } elseif ( ! empty( $cron ) ) { // Creating cron action. + $action_type = 'cron'; + $function = 'as_schedule_cron_action'; + + $function_args = array_filter( + $function_args, + static function( $key ) { + return in_array( $key, array( 'start', 'cron', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true ); + }, + ARRAY_FILTER_USE_KEY + ); + } elseif ( in_array( $function_args['start'], static::ASYNC_OPTS, true ) ) { // Enqueue async action. + $action_type = 'async'; + $function = 'as_enqueue_async_action'; + + $function_args = array_filter( + $function_args, + static function( $key ) { + return in_array( $key, array( 'hook', 'callback_args', 'group', 'unique', 'priority' ), true ); + }, + ARRAY_FILTER_USE_KEY + ); + } else { // Enqueue single action. + $function_args = array_filter( + $function_args, + static function( $key ) { + return in_array( $key, array( 'start', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true ); + }, + ARRAY_FILTER_USE_KEY + ); + } + + $function_args = array_values( $function_args ); + + try { + $action_id = call_user_func_array( $function, $function_args ); + } catch ( \Exception $e ) { + $this->print_error( $e ); + } + + if ( 0 === $action_id ) { + $e = new \Exception( __( 'Unable to create a scheduled action.', 'action-scheduler' ) ); + $this->print_error( $e ); + } + + $this->print_success( $action_id, $action_type ); + } + + /** + * Print a success message with the action ID. + * + * @param int $action_id Created action ID. + * @param string $action_type Type of action. + * + * @return void + */ + protected function print_success( $action_id, $action_type ) { + \WP_CLI::success( + sprintf( + /* translators: %1$s: type of action, %2$d: ID of the created action */ + __( '%1$s action (%2$d) scheduled.', 'action-scheduler' ), + ucfirst( $action_type ), + $action_id + ) + ); + } + + /** + * Convert an exception into a WP CLI error. + * + * @param \Exception $e The error object. + * @throws \WP_CLI\ExitException When an error occurs. + * @return void + */ + protected function print_error( \Exception $e ) { + \WP_CLI::error( + sprintf( + /* translators: %s refers to the exception error message. */ + __( 'There was an error creating the scheduled action: %s', 'action-scheduler' ), + $e->getMessage() + ) + ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.php new file mode 100644 index 0000000..a549e0b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.php @@ -0,0 +1,108 @@ + + */ + protected $action_counts = array( + 'deleted' => 0, + 'failed' => 0, + 'total' => 0, + ); + + /** + * Construct. + * + * @param string[] $args Positional arguments. + * @param array $assoc_args Keyed arguments. + */ + public function __construct( array $args, array $assoc_args ) { + parent::__construct( $args, $assoc_args ); + + $this->action_ids = array_map( 'absint', $args ); + $this->action_counts['total'] = count( $this->action_ids ); + + add_action( 'action_scheduler_deleted_action', array( $this, 'on_action_deleted' ) ); + } + + /** + * Execute. + * + * @return void + */ + public function execute() { + $store = \ActionScheduler::store(); + + $progress_bar = \WP_CLI\Utils\make_progress_bar( + sprintf( + /* translators: %d: number of actions to be deleted */ + _n( 'Deleting %d action', 'Deleting %d actions', $this->action_counts['total'], 'action-scheduler' ), + number_format_i18n( $this->action_counts['total'] ) + ), + $this->action_counts['total'] + ); + + foreach ( $this->action_ids as $action_id ) { + try { + $store->delete_action( $action_id ); + } catch ( \Exception $e ) { + $this->action_counts['failed']++; + \WP_CLI::warning( $e->getMessage() ); + } + + $progress_bar->tick(); + } + + $progress_bar->finish(); + + /* translators: %1$d: number of actions deleted */ + $format = _n( 'Deleted %1$d action', 'Deleted %1$d actions', $this->action_counts['deleted'], 'action-scheduler' ) . ', '; + /* translators: %2$d: number of actions deletions failed */ + $format .= _n( '%2$d failure.', '%2$d failures.', $this->action_counts['failed'], 'action-scheduler' ); + + \WP_CLI::success( + sprintf( + $format, + number_format_i18n( $this->action_counts['deleted'] ), + number_format_i18n( $this->action_counts['failed'] ) + ) + ); + } + + /** + * Action: action_scheduler_deleted_action + * + * @param int $action_id Action ID. + * @return void + */ + public function on_action_deleted( $action_id ) { + if ( 'action_scheduler_deleted_action' !== current_action() ) { + return; + } + + $action_id = absint( $action_id ); + + if ( ! in_array( $action_id, $this->action_ids, true ) ) { + return; + } + + $this->action_counts['deleted']++; + \WP_CLI::debug( sprintf( 'Action %d was deleted.', $action_id ) ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.php new file mode 100644 index 0000000..6e6e8c7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.php @@ -0,0 +1,121 @@ +args[0]; + $schedule_start = $this->args[1]; + $callback_args = get_flag_value( $this->assoc_args, 'args', array() ); + $group = get_flag_value( $this->assoc_args, 'group', '' ); + $interval = (int) get_flag_value( $this->assoc_args, 'interval', 0 ); // avoid absint() to support negative intervals + $count = absint( get_flag_value( $this->assoc_args, 'count', 1 ) ); + + if ( ! empty( $callback_args ) ) { + $callback_args = json_decode( $callback_args, true ); + } + + $schedule_start = as_get_datetime_object( $schedule_start ); + + $function_args = array( + 'start' => absint( $schedule_start->format( 'U' ) ), + 'interval' => $interval, + 'count' => $count, + 'hook' => $hook, + 'callback_args' => $callback_args, + 'group' => $group, + ); + + $function_args = array_values( $function_args ); + + try { + $actions_added = $this->generate( ...$function_args ); + } catch ( \Exception $e ) { + $this->print_error( $e ); + } + + $num_actions_added = count( (array) $actions_added ); + + $this->print_success( $num_actions_added, 'single' ); + } + + /** + * Schedule multiple single actions. + * + * @param int $schedule_start Starting timestamp of first action. + * @param int $interval How long to wait between runs. + * @param int $count Limit number of actions to schedule. + * @param string $hook The hook to trigger. + * @param array $args Arguments to pass when the hook triggers. + * @param string $group The group to assign this job to. + * @return int[] IDs of actions added. + */ + protected function generate( $schedule_start, $interval, $count, $hook, array $args = array(), $group = '' ) { + $actions_added = array(); + + $progress_bar = \WP_CLI\Utils\make_progress_bar( + sprintf( + /* translators: %d is number of actions to create */ + _n( 'Creating %d action', 'Creating %d actions', $count, 'action-scheduler' ), + number_format_i18n( $count ) + ), + $count + ); + + for ( $i = 0; $i < $count; $i++ ) { + $actions_added[] = as_schedule_single_action( $schedule_start + ( $i * $interval ), $hook, $args, $group ); + $progress_bar->tick(); + } + + $progress_bar->finish(); + + return $actions_added; + } + + /** + * Print a success message with the action ID. + * + * @param int $actions_added Number of actions generated. + * @param string $action_type Type of actions scheduled. + * @return void + */ + protected function print_success( $actions_added, $action_type ) { + \WP_CLI::success( + sprintf( + /* translators: %1$d refers to the total number of tasks added, %2$s is the action type */ + _n( '%1$d %2$s action scheduled.', '%1$d %2$s actions scheduled.', $actions_added, 'action-scheduler' ), + number_format_i18n( $actions_added ), + $action_type + ) + ); + } + + /** + * Convert an exception into a WP CLI error. + * + * @param \Exception $e The error object. + * @throws \WP_CLI\ExitException When an error occurs. + * @return void + */ + protected function print_error( \Exception $e ) { + \WP_CLI::error( + sprintf( + /* translators: %s refers to the exception error message. */ + __( 'There was an error creating the scheduled action: %s', 'action-scheduler' ), + $e->getMessage() + ) + ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php new file mode 100644 index 0000000..b0bbdee --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php @@ -0,0 +1,75 @@ +args[0]; + $store = \ActionScheduler::store(); + $logger = \ActionScheduler::logger(); + $action = $store->fetch_action( $action_id ); + + if ( is_a( $action, ActionScheduler_NullAction::class ) ) { + /* translators: %d is action ID. */ + \WP_CLI::error( sprintf( esc_html__( 'Unable to retrieve action %d.', 'action-scheduler' ), $action_id ) ); + } + + $only_logs = ! empty( $this->assoc_args['field'] ) && 'log_entries' === $this->assoc_args['field']; + $only_logs = $only_logs || ( ! empty( $this->assoc_args['fields'] ) && 'log_entries' === $this->assoc_args['fields'] ); + $log_entries = array(); + + foreach ( $logger->get_logs( $action_id ) as $log_entry ) { + $log_entries[] = array( + 'date' => $log_entry->get_date()->format( static::DATE_FORMAT ), + 'message' => $log_entry->get_message(), + ); + } + + if ( $only_logs ) { + $args = array( + 'format' => \WP_CLI\Utils\get_flag_value( $this->assoc_args, 'format', 'table' ), + ); + + $formatter = new \WP_CLI\Formatter( $args, array( 'date', 'message' ) ); + $formatter->display_items( $log_entries ); + + return; + } + + try { + $status = $store->get_status( $action_id ); + } catch ( \Exception $e ) { + \WP_CLI::error( $e->getMessage() ); + } + + $action_arr = array( + 'id' => $this->args[0], + 'hook' => $action->get_hook(), + 'status' => $status, + 'args' => $action->get_args(), + 'group' => $action->get_group(), + 'recurring' => $action->get_schedule()->is_recurring() ? 'yes' : 'no', + 'scheduled_date' => $this->get_schedule_display_string( $action->get_schedule() ), + 'log_entries' => $log_entries, + ); + + $fields = array_keys( $action_arr ); + + if ( ! empty( $this->assoc_args['fields'] ) ) { + $fields = explode( ',', $this->assoc_args['fields'] ); + } + + $formatter = new \WP_CLI\Formatter( $this->assoc_args, $fields ); + $formatter->display_item( $action_arr ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.php new file mode 100644 index 0000000..4a3e083 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.php @@ -0,0 +1,133 @@ +process_csv_arguments_to_arrays(); + + if ( ! empty( $this->assoc_args['fields'] ) ) { + $fields = $this->assoc_args['fields']; + } + + $formatter = new \WP_CLI\Formatter( $this->assoc_args, $fields ); + $query_args = $this->assoc_args; + + /** + * The `claimed` parameter expects a boolean or integer: + * check for string 'false', and set explicitly to `false` boolean. + */ + if ( array_key_exists( 'claimed', $query_args ) && 'false' === strtolower( $query_args['claimed'] ) ) { + $query_args['claimed'] = false; + } + + $return_format = 'OBJECT'; + + if ( in_array( $formatter->format, array( 'ids', 'count' ), true ) ) { + $return_format = '\'ids\''; + } + + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export + $params = var_export( $query_args, true ); + + if ( empty( $query_args ) ) { + $params = 'array()'; + } + + \WP_CLI::debug( + sprintf( + 'as_get_scheduled_actions( %s, %s )', + $params, + $return_format + ) + ); + + if ( ! empty( $query_args['args'] ) ) { + $query_args['args'] = json_decode( $query_args['args'], true ); + } + + switch ( $formatter->format ) { + + case 'ids': + $actions = as_get_scheduled_actions( $query_args, 'ids' ); + echo implode( ' ', $actions ); + break; + + case 'count': + $actions = as_get_scheduled_actions( $query_args, 'ids' ); + $formatter->display_items( $actions ); + break; + + default: + $actions = as_get_scheduled_actions( $query_args, OBJECT ); + + $actions_arr = array(); + + foreach ( $actions as $action_id => $action ) { + $action_arr = array( + 'id' => $action_id, + 'hook' => $action->get_hook(), + 'status' => $store->get_status( $action_id ), + 'args' => $action->get_args(), + 'group' => $action->get_group(), + 'recurring' => $action->get_schedule()->is_recurring() ? 'yes' : 'no', + 'scheduled_date' => $this->get_schedule_display_string( $action->get_schedule() ), + 'log_entries' => array(), + ); + + foreach ( $logger->get_logs( $action_id ) as $log_entry ) { + $action_arr['log_entries'][] = array( + 'date' => $log_entry->get_date()->format( static::DATE_FORMAT ), + 'message' => $log_entry->get_message(), + ); + } + + $actions_arr[] = $action_arr; + } + + $formatter->display_items( $actions_arr ); + break; + + } + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.php new file mode 100644 index 0000000..b717445 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.php @@ -0,0 +1,71 @@ +args[0]; + $group = get_flag_value( $this->assoc_args, 'group', '' ); + $callback_args = get_flag_value( $this->assoc_args, 'args', null ); + $raw = (bool) get_flag_value( $this->assoc_args, 'raw', false ); + + if ( ! empty( $callback_args ) ) { + $callback_args = json_decode( $callback_args, true ); + } + + if ( $raw ) { + \WP_CLI::line( as_next_scheduled_action( $hook, $callback_args, $group ) ); + return; + } + + $params = array( + 'hook' => $hook, + 'orderby' => 'date', + 'order' => 'ASC', + 'group' => $group, + ); + + if ( is_array( $callback_args ) ) { + $params['args'] = $callback_args; + } + + $params['status'] = \ActionScheduler_Store::STATUS_RUNNING; + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export + \WP_CLI::debug( 'ActionScheduler()::store()->query_action( ' . var_export( $params, true ) . ' )' ); + + $store = \ActionScheduler::store(); + $action_id = $store->query_action( $params ); + + if ( $action_id ) { + echo $action_id; + return; + } + + $params['status'] = \ActionScheduler_Store::STATUS_PENDING; + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export + \WP_CLI::debug( 'ActionScheduler()::store()->query_action( ' . var_export( $params, true ) . ' )' ); + + $action_id = $store->query_action( $params ); + + if ( $action_id ) { + echo $action_id; + return; + } + + \WP_CLI::warning( 'No matching next action.' ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.php new file mode 100644 index 0000000..efff37d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.php @@ -0,0 +1,194 @@ + + */ + protected $action_counts = array( + 'executed' => 0, + 'failed' => 0, + 'ignored' => 0, + 'invalid' => 0, + 'total' => 0, + ); + + /** + * Construct. + * + * @param string[] $args Positional arguments. + * @param array $assoc_args Keyed arguments. + */ + public function __construct( array $args, array $assoc_args ) { + parent::__construct( $args, $assoc_args ); + + $this->action_ids = array_map( 'absint', $args ); + $this->action_counts['total'] = count( $this->action_ids ); + + add_action( 'action_scheduler_execution_ignored', array( $this, 'on_action_ignored' ) ); + add_action( 'action_scheduler_after_execute', array( $this, 'on_action_executed' ) ); + add_action( 'action_scheduler_failed_execution', array( $this, 'on_action_failed' ), 10, 2 ); + add_action( 'action_scheduler_failed_validation', array( $this, 'on_action_invalid' ), 10, 2 ); + } + + /** + * Execute. + * + * @return void + */ + public function execute() { + $runner = \ActionScheduler::runner(); + + $progress_bar = \WP_CLI\Utils\make_progress_bar( + sprintf( + /* translators: %d: number of actions */ + _n( 'Executing %d action', 'Executing %d actions', $this->action_counts['total'], 'action-scheduler' ), + number_format_i18n( $this->action_counts['total'] ) + ), + $this->action_counts['total'] + ); + + foreach ( $this->action_ids as $action_id ) { + $runner->process_action( $action_id, 'Action Scheduler CLI' ); + $progress_bar->tick(); + } + + $progress_bar->finish(); + + foreach ( array( + 'ignored', + 'invalid', + 'failed', + ) as $type ) { + $count = $this->action_counts[ $type ]; + + if ( empty( $count ) ) { + continue; + } + + /* + * translators: + * %1$d: count of actions evaluated. + * %2$s: type of action evaluated. + */ + $format = _n( '%1$d action %2$s.', '%1$d actions %2$s.', $count, 'action-scheduler' ); + + \WP_CLI::warning( + sprintf( + $format, + number_format_i18n( $count ), + $type + ) + ); + } + + \WP_CLI::success( + sprintf( + /* translators: %d: number of executed actions */ + _n( 'Executed %d action.', 'Executed %d actions.', $this->action_counts['executed'], 'action-scheduler' ), + number_format_i18n( $this->action_counts['executed'] ) + ) + ); + } + + /** + * Action: action_scheduler_execution_ignored + * + * @param int $action_id Action ID. + * @return void + */ + public function on_action_ignored( $action_id ) { + if ( 'action_scheduler_execution_ignored' !== current_action() ) { + return; + } + + $action_id = absint( $action_id ); + + if ( ! in_array( $action_id, $this->action_ids, true ) ) { + return; + } + + $this->action_counts['ignored']++; + \WP_CLI::debug( sprintf( 'Action %d was ignored.', $action_id ) ); + } + + /** + * Action: action_scheduler_after_execute + * + * @param int $action_id Action ID. + * @return void + */ + public function on_action_executed( $action_id ) { + if ( 'action_scheduler_after_execute' !== current_action() ) { + return; + } + + $action_id = absint( $action_id ); + + if ( ! in_array( $action_id, $this->action_ids, true ) ) { + return; + } + + $this->action_counts['executed']++; + \WP_CLI::debug( sprintf( 'Action %d was executed.', $action_id ) ); + } + + /** + * Action: action_scheduler_failed_execution + * + * @param int $action_id Action ID. + * @param \Exception $e Exception. + * @return void + */ + public function on_action_failed( $action_id, \Exception $e ) { + if ( 'action_scheduler_failed_execution' !== current_action() ) { + return; + } + + $action_id = absint( $action_id ); + + if ( ! in_array( $action_id, $this->action_ids, true ) ) { + return; + } + + $this->action_counts['failed']++; + \WP_CLI::debug( sprintf( 'Action %d failed execution: %s', $action_id, $e->getMessage() ) ); + } + + /** + * Action: action_scheduler_failed_validation + * + * @param int $action_id Action ID. + * @param \Exception $e Exception. + * @return void + */ + public function on_action_invalid( $action_id, \Exception $e ) { + if ( 'action_scheduler_failed_validation' !== current_action() ) { + return; + } + + $action_id = absint( $action_id ); + + if ( ! in_array( $action_id, $this->action_ids, true ) ) { + return; + } + + $this->action_counts['invalid']++; + \WP_CLI::debug( sprintf( 'Action %d failed validation: %s', $action_id, $e->getMessage() ) ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php new file mode 100644 index 0000000..b0ac4e3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php @@ -0,0 +1,123 @@ +] + * : The maximum number of actions to delete per batch. Defaults to 20. + * + * [--batches=] + * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue all eligible actions are deleted. + * + * [--status=] + * : Only clean actions with the specified status. Defaults to Canceled, Completed. Define multiple statuses as a comma separated string (without spaces), e.g. `--status=complete,failed,canceled` + * + * [--before=] + * : Only delete actions with scheduled date older than this. Defaults to 31 days. e.g `--before='7 days ago'`, `--before='02-Feb-2020 20:20:20'` + * + * [--pause=] + * : The number of seconds to pause between batches. Default no pause. + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @throws \WP_CLI\ExitException When an error occurs. + * + * @subcommand clean + */ + public function clean( $args, $assoc_args ) { + // Handle passed arguments. + $batch = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 20 ) ); + $batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) ); + $status = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'status', '' ) ); + $status = array_filter( array_map( 'trim', $status ) ); + $before = \WP_CLI\Utils\get_flag_value( $assoc_args, 'before', '' ); + $sleep = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', 0 ); + + $batches_completed = 0; + $actions_deleted = 0; + $unlimited = 0 === $batches; + try { + $lifespan = as_get_datetime_object( $before ); + } catch ( Exception $e ) { + $lifespan = null; + } + + try { + // Custom queue cleaner instance. + $cleaner = new ActionScheduler_QueueCleaner( null, $batch ); + + // Clean actions for as long as possible. + while ( $unlimited || $batches_completed < $batches ) { + if ( $sleep && $batches_completed > 0 ) { + sleep( $sleep ); + } + + $deleted = count( $cleaner->clean_actions( $status, $lifespan, null, 'CLI' ) ); + if ( $deleted <= 0 ) { + break; + } + $actions_deleted += $deleted; + $batches_completed++; + $this->print_success( $deleted ); + } + } catch ( Exception $e ) { + $this->print_error( $e ); + } + + $this->print_total_batches( $batches_completed ); + if ( $batches_completed > 1 ) { + $this->print_success( $actions_deleted ); + } + } + + /** + * Print WP CLI message about how many batches of actions were processed. + * + * @param int $batches_processed Number of batches processed. + */ + protected function print_total_batches( int $batches_processed ) { + WP_CLI::log( + sprintf( + /* translators: %d refers to the total number of batches processed */ + _n( '%d batch processed.', '%d batches processed.', $batches_processed, 'action-scheduler' ), + $batches_processed + ) + ); + } + + /** + * Convert an exception into a WP CLI error. + * + * @param Exception $e The error object. + */ + protected function print_error( Exception $e ) { + WP_CLI::error( + sprintf( + /* translators: %s refers to the exception error message */ + __( 'There was an error deleting an action: %s', 'action-scheduler' ), + $e->getMessage() + ) + ); + } + + /** + * Print a success message with the number of completed actions. + * + * @param int $actions_deleted Number of deleted actions. + */ + protected function print_success( int $actions_deleted ) { + WP_CLI::success( + sprintf( + /* translators: %d refers to the total number of actions deleted */ + _n( '%d action deleted.', '%d actions deleted.', $actions_deleted, 'action-scheduler' ), + $actions_deleted + ) + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php new file mode 100644 index 0000000..08cb0cd --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php @@ -0,0 +1,195 @@ +run_cleanup(); + $this->add_hooks(); + + // Check to make sure there aren't too many concurrent processes running. + if ( $this->has_maximum_concurrent_batches() ) { + if ( $force ) { + WP_CLI::warning( __( 'There are too many concurrent batches, but the run is forced to continue.', 'action-scheduler' ) ); + } else { + WP_CLI::error( __( 'There are too many concurrent batches.', 'action-scheduler' ) ); + } + } + + // Stake a claim and store it. + $this->claim = $this->store->stake_claim( $batch_size, null, $hooks, $group ); + $this->monitor->attach( $this->claim ); + $this->actions = $this->claim->get_actions(); + + return count( $this->actions ); + } + + /** + * Add our hooks to the appropriate actions. + */ + protected function add_hooks() { + add_action( 'action_scheduler_before_execute', array( $this, 'before_execute' ) ); + add_action( 'action_scheduler_after_execute', array( $this, 'after_execute' ), 10, 2 ); + add_action( 'action_scheduler_failed_execution', array( $this, 'action_failed' ), 10, 2 ); + } + + /** + * Set up the WP CLI progress bar. + */ + protected function setup_progress_bar() { + $count = count( $this->actions ); + $this->progress_bar = new ProgressBar( + /* translators: %d: amount of actions */ + sprintf( _n( 'Running %d action', 'Running %d actions', $count, 'action-scheduler' ), $count ), + $count + ); + } + + /** + * Process actions in the queue. + * + * @param string $context Optional runner context. Default 'WP CLI'. + * + * @return int The number of actions processed. + */ + public function run( $context = 'WP CLI' ) { + do_action( 'action_scheduler_before_process_queue' ); + $this->setup_progress_bar(); + foreach ( $this->actions as $action_id ) { + // Error if we lost the claim. + if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $this->claim->get_id() ), true ) ) { + WP_CLI::warning( __( 'The claim has been lost. Aborting current batch.', 'action-scheduler' ) ); + break; + } + + $this->process_action( $action_id, $context ); + $this->progress_bar->tick(); + } + + $completed = $this->progress_bar->current(); + $this->progress_bar->finish(); + $this->store->release_claim( $this->claim ); + do_action( 'action_scheduler_after_process_queue' ); + + return $completed; + } + + /** + * Handle WP CLI message when the action is starting. + * + * @param int $action_id Action ID. + */ + public function before_execute( $action_id ) { + /* translators: %s refers to the action ID */ + WP_CLI::log( sprintf( __( 'Started processing action %s', 'action-scheduler' ), $action_id ) ); + } + + /** + * Handle WP CLI message when the action has completed. + * + * @param int $action_id ActionID. + * @param null|ActionScheduler_Action $action The instance of the action. Default to null for backward compatibility. + */ + public function after_execute( $action_id, $action = null ) { + // backward compatibility. + if ( null === $action ) { + $action = $this->store->fetch_action( $action_id ); + } + /* translators: 1: action ID 2: hook name */ + WP_CLI::log( sprintf( __( 'Completed processing action %1$s with hook: %2$s', 'action-scheduler' ), $action_id, $action->get_hook() ) ); + } + + /** + * Handle WP CLI message when the action has failed. + * + * @param int $action_id Action ID. + * @param Exception $exception Exception. + * @throws \WP_CLI\ExitException With failure message. + */ + public function action_failed( $action_id, $exception ) { + WP_CLI::error( + /* translators: 1: action ID 2: exception message */ + sprintf( __( 'Error processing action %1$s: %2$s', 'action-scheduler' ), $action_id, $exception->getMessage() ), + false + ); + } + + /** + * Sleep and help avoid hitting memory limit + * + * @param int $sleep_time Amount of seconds to sleep. + * @deprecated 3.0.0 + */ + protected function stop_the_insanity( $sleep_time = 0 ) { + _deprecated_function( 'ActionScheduler_WPCLI_QueueRunner::stop_the_insanity', '3.0.0', 'ActionScheduler_DataController::free_memory' ); + + ActionScheduler_DataController::free_memory(); + } + + /** + * Maybe trigger the stop_the_insanity() method to free up memory. + */ + protected function maybe_stop_the_insanity() { + // The value returned by progress_bar->current() might be padded. Remove padding, and convert to int. + $current_iteration = intval( trim( $this->progress_bar->current() ) ); + if ( 0 === $current_iteration % 50 ) { + $this->stop_the_insanity(); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php new file mode 100644 index 0000000..d252680 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php @@ -0,0 +1,202 @@ +init(); + $obj->register_tables( true ); + + WP_CLI::success( + sprintf( + /* translators: %s refers to the schema name*/ + __( 'Registered schema for %s', 'action-scheduler' ), + $classname + ) + ); + } + } + } + + /** + * Run the Action Scheduler + * + * ## OPTIONS + * + * [--batch-size=] + * : The maximum number of actions to run. Defaults to 100. + * + * [--batches=] + * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue being executed until all actions are complete. + * + * [--cleanup-batch-size=] + * : The maximum number of actions to clean up. Defaults to the value of --batch-size. + * + * [--hooks=] + * : Only run actions with the specified hook. Omitting this option runs actions with any hook. Define multiple hooks as a comma separated string (without spaces), e.g. `--hooks=hook_one,hook_two,hook_three` + * + * [--group=] + * : Only run actions from the specified group. Omitting this option runs actions from all groups. + * + * [--exclude-groups=] + * : Run actions from all groups except the specified group(s). Define multiple groups as a comma separated string (without spaces), e.g. '--group_a,group_b'. This option is ignored when `--group` is used. + * + * [--free-memory-on=] + * : The number of actions to process between freeing memory. 0 disables freeing memory. Default 50. + * + * [--pause=] + * : The number of seconds to pause when freeing memory. Default no pause. + * + * [--force] + * : Whether to force execution despite the maximum number of concurrent processes being exceeded. + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @throws \WP_CLI\ExitException When an error occurs. + * + * @subcommand run + */ + public function run( $args, $assoc_args ) { + // Handle passed arguments. + $batch = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 100 ) ); + $batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) ); + $clean = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'cleanup-batch-size', $batch ) ); + $hooks = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) ); + $hooks = array_filter( array_map( 'trim', $hooks ) ); + $group = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' ); + $exclude_groups = \WP_CLI\Utils\get_flag_value( $assoc_args, 'exclude-groups', '' ); + $free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', 50 ); + $sleep = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', 0 ); + $force = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false ); + + ActionScheduler_DataController::set_free_ticks( $free_on ); + ActionScheduler_DataController::set_sleep_time( $sleep ); + + $batches_completed = 0; + $actions_completed = 0; + $unlimited = 0 === $batches; + if ( is_callable( array( ActionScheduler::store(), 'set_claim_filter' ) ) ) { + $exclude_groups = $this->parse_comma_separated_string( $exclude_groups ); + + if ( ! empty( $exclude_groups ) ) { + ActionScheduler::store()->set_claim_filter( 'exclude-groups', $exclude_groups ); + } + } + + try { + // Custom queue cleaner instance. + $cleaner = new ActionScheduler_QueueCleaner( null, $clean ); + + // Get the queue runner instance. + $runner = new ActionScheduler_WPCLI_QueueRunner( null, null, $cleaner ); + + // Determine how many tasks will be run in the first batch. + $total = $runner->setup( $batch, $hooks, $group, $force ); + + // Run actions for as long as possible. + while ( $total > 0 ) { + $this->print_total_actions( $total ); + $actions_completed += $runner->run(); + $batches_completed++; + + // Maybe set up tasks for the next batch. + $total = ( $unlimited || $batches_completed < $batches ) ? $runner->setup( $batch, $hooks, $group, $force ) : 0; + } + } catch ( Exception $e ) { + $this->print_error( $e ); + } + + $this->print_total_batches( $batches_completed ); + $this->print_success( $actions_completed ); + } + + /** + * Converts a string of comma-separated values into an array of those same values. + * + * @param string $string The string of one or more comma separated values. + * + * @return array + */ + private function parse_comma_separated_string( $string ): array { + return array_filter( str_getcsv( $string ) ); + } + + /** + * Print WP CLI message about how many actions are about to be processed. + * + * @param int $total Number of actions found. + */ + protected function print_total_actions( $total ) { + WP_CLI::log( + sprintf( + /* translators: %d refers to how many scheduled tasks were found to run */ + _n( 'Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler' ), + $total + ) + ); + } + + /** + * Print WP CLI message about how many batches of actions were processed. + * + * @param int $batches_completed Number of completed batches. + */ + protected function print_total_batches( $batches_completed ) { + WP_CLI::log( + sprintf( + /* translators: %d refers to the total number of batches executed */ + _n( '%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler' ), + $batches_completed + ) + ); + } + + /** + * Convert an exception into a WP CLI error. + * + * @param Exception $e The error object. + * + * @throws \WP_CLI\ExitException Under some conditions WP CLI may throw an exception. + */ + protected function print_error( Exception $e ) { + WP_CLI::error( + sprintf( + /* translators: %s refers to the exception error message */ + __( 'There was an error running the action scheduler: %s', 'action-scheduler' ), + $e->getMessage() + ) + ); + } + + /** + * Print a success message with the number of completed actions. + * + * @param int $actions_completed Number of completed actions. + */ + protected function print_success( $actions_completed ) { + WP_CLI::success( + sprintf( + /* translators: %d refers to the total number of tasks completed */ + _n( '%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler' ), + $actions_completed + ) + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.php new file mode 100644 index 0000000..b32eea3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.php @@ -0,0 +1,353 @@ +] + * : Name of the action hook. + * + * [--group=] + * : The group the job is assigned to. + * + * [--args=] + * : JSON object of arguments assigned to the job. + * --- + * default: [] + * --- + * + * [--all] + * : Cancel all occurrences of a scheduled action. + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function cancel( array $args, array $assoc_args ) { + require_once 'Action/Cancel_Command.php'; + $command = new Action\Cancel_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Creates a new scheduled action. + * + * ## OPTIONS + * + * + * : Name of the action hook. + * + * + * : A unix timestamp representing the date you want the action to start. Also 'async' or 'now' to enqueue an async action. + * + * [--args=] + * : JSON object of arguments to pass to callbacks when the hook triggers. + * --- + * default: [] + * --- + * + * [--cron=] + * : A cron-like schedule string (https://crontab.guru/). + * --- + * default: '' + * --- + * + * [--group=] + * : The group to assign this job to. + * --- + * default: '' + * --- + * + * [--interval=] + * : Number of seconds to wait between runs. + * --- + * default: 0 + * --- + * + * ## EXAMPLES + * + * wp action-scheduler action create hook_async async + * wp action-scheduler action create hook_single 1627147598 + * wp action-scheduler action create hook_recurring 1627148188 --interval=5 + * wp action-scheduler action create hook_cron 1627147655 --cron='5 4 * * *' + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function create( array $args, array $assoc_args ) { + require_once 'Action/Create_Command.php'; + $command = new Action\Create_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Delete existing scheduled action(s). + * + * ## OPTIONS + * + * ... + * : One or more IDs of actions to delete. + * --- + * default: 0 + * --- + * + * ## EXAMPLES + * + * # Delete the action with id 100 + * $ wp action-scheduler action delete 100 + * + * # Delete the actions with ids 100 and 200 + * $ wp action-scheduler action delete 100 200 + * + * # Delete the first five pending actions in 'action-scheduler' group + * $ wp action-scheduler action delete $( wp action-scheduler action list --status=pending --group=action-scheduler --format=ids ) + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function delete( array $args, array $assoc_args ) { + require_once 'Action/Delete_Command.php'; + $command = new Action\Delete_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Generates some scheduled actions. + * + * ## OPTIONS + * + * + * : Name of the action hook. + * + * + * : The Unix timestamp representing the date you want the action to start. + * + * [--count=] + * : Number of actions to create. + * --- + * default: 1 + * --- + * + * [--interval=] + * : Number of seconds to wait between runs. + * --- + * default: 0 + * --- + * + * [--args=] + * : JSON object of arguments to pass to callbacks when the hook triggers. + * --- + * default: [] + * --- + * + * [--group=] + * : The group to assign this job to. + * --- + * default: '' + * --- + * + * ## EXAMPLES + * + * wp action-scheduler action generate test_multiple 1627147598 --count=5 --interval=5 + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function generate( array $args, array $assoc_args ) { + require_once 'Action/Generate_Command.php'; + $command = new Action\Generate_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Get details about a scheduled action. + * + * ## OPTIONS + * + * + * : The ID of the action to get. + * --- + * default: 0 + * --- + * + * [--field=] + * : Instead of returning the whole action, returns the value of a single field. + * + * [--fields=] + * : Limit the output to specific fields (comma-separated). Defaults to all fields. + * + * [--format=] + * : Render output in a particular format. + * --- + * default: table + * options: + * - table + * - csv + * - json + * - yaml + * --- + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function get( array $args, array $assoc_args ) { + require_once 'Action/Get_Command.php'; + $command = new Action\Get_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Get a list of scheduled actions. + * + * Display actions based on all arguments supported by + * [as_get_scheduled_actions()](https://actionscheduler.org/api/#function-reference--as_get_scheduled_actions). + * + * ## OPTIONS + * + * [--=] + * : One or more arguments to pass to as_get_scheduled_actions(). + * + * [--field=] + * : Prints the value of a single property for each action. + * + * [--fields=] + * : Limit the output to specific object properties. + * + * [--format=] + * : Render output in a particular format. + * --- + * default: table + * options: + * - table + * - csv + * - ids + * - json + * - count + * - yaml + * --- + * + * ## AVAILABLE FIELDS + * + * These fields will be displayed by default for each action: + * + * * id + * * hook + * * status + * * group + * * recurring + * * scheduled_date + * + * These fields are optionally available: + * + * * args + * * log_entries + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + * + * @subcommand list + */ + public function subcommand_list( array $args, array $assoc_args ) { + require_once 'Action/List_Command.php'; + $command = new Action\List_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Get logs for a scheduled action. + * + * ## OPTIONS + * + * + * : The ID of the action to get. + * --- + * default: 0 + * --- + * + * @param array $args Positional arguments. + * @return void + */ + public function logs( array $args ) { + $command = sprintf( 'action-scheduler action get %d --field=log_entries', $args[0] ); + WP_CLI::runcommand( $command ); + } + + /** + * Get the ID or timestamp of the next scheduled action. + * + * ## OPTIONS + * + * + * : The hook of the next scheduled action. + * + * [--args=] + * : JSON object of arguments to search for next scheduled action. + * --- + * default: [] + * --- + * + * [--group=] + * : The group to which the next scheduled action is assigned. + * --- + * default: '' + * --- + * + * [--raw] + * : Display the raw output of as_next_scheduled_action() (timestamp or boolean). + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function next( array $args, array $assoc_args ) { + require_once 'Action/Next_Command.php'; + $command = new Action\Next_Command( $args, $assoc_args ); + $command->execute(); + } + + /** + * Run existing scheduled action(s). + * + * ## OPTIONS + * + * ... + * : One or more IDs of actions to run. + * --- + * default: 0 + * --- + * + * ## EXAMPLES + * + * # Run the action with id 100 + * $ wp action-scheduler action run 100 + * + * # Run the actions with ids 100 and 200 + * $ wp action-scheduler action run 100 200 + * + * # Run the first five pending actions in 'action-scheduler' group + * $ wp action-scheduler action run $( wp action-scheduler action list --status=pending --group=action-scheduler --format=ids ) + * + * @param array $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @return void + */ + public function run( array $args, array $assoc_args ) { + require_once 'Action/Run_Command.php'; + $command = new Action\Run_Command( $args, $assoc_args ); + $command->execute(); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.php new file mode 100644 index 0000000..86f750f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.php @@ -0,0 +1,190 @@ + 'Migrates actions to the DB tables store', + 'synopsis' => array( + array( + 'type' => 'assoc', + 'name' => 'batch-size', + 'optional' => true, + 'default' => 100, + 'description' => 'The number of actions to process in each batch', + ), + array( + 'type' => 'assoc', + 'name' => 'free-memory-on', + 'optional' => true, + 'default' => 50, + 'description' => 'The number of actions to process between freeing memory. 0 disables freeing memory', + ), + array( + 'type' => 'assoc', + 'name' => 'pause', + 'optional' => true, + 'default' => 0, + 'description' => 'The number of seconds to pause when freeing memory', + ), + array( + 'type' => 'flag', + 'name' => 'dry-run', + 'optional' => true, + 'description' => 'Reports on the actions that would have been migrated, but does not change any data', + ), + ), + ) + ); + } + + /** + * Process the data migration. + * + * @param array $positional_args Required for WP CLI. Not used in migration. + * @param array $assoc_args Optional arguments. + * + * @return void + */ + public function migrate( $positional_args, $assoc_args ) { + $this->init_logging(); + + $config = $this->get_migration_config( $assoc_args ); + $runner = new Runner( $config ); + $runner->init_destination(); + + $batch_size = isset( $assoc_args['batch-size'] ) ? (int) $assoc_args['batch-size'] : 100; + $free_on = isset( $assoc_args['free-memory-on'] ) ? (int) $assoc_args['free-memory-on'] : 50; + $sleep = isset( $assoc_args['pause'] ) ? (int) $assoc_args['pause'] : 0; + \ActionScheduler_DataController::set_free_ticks( $free_on ); + \ActionScheduler_DataController::set_sleep_time( $sleep ); + + do { + $actions_processed = $runner->run( $batch_size ); + $this->total_processed += $actions_processed; + } while ( $actions_processed > 0 ); + + if ( ! $config->get_dry_run() ) { + // let the scheduler know that there's nothing left to do. + $scheduler = new Scheduler(); + $scheduler->mark_complete(); + } + + WP_CLI::success( sprintf( '%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed ) ); + } + + /** + * Build the config object used to create the Runner + * + * @param array $args Optional arguments. + * + * @return ActionScheduler\Migration\Config + */ + private function get_migration_config( $args ) { + $args = wp_parse_args( + $args, + array( + 'dry-run' => false, + ) + ); + + $config = Controller::instance()->get_migration_config_object(); + $config->set_dry_run( ! empty( $args['dry-run'] ) ); + + return $config; + } + + /** + * Hook command line logging into migration actions. + */ + private function init_logging() { + add_action( + 'action_scheduler/migrate_action_dry_run', + function ( $action_id ) { + WP_CLI::debug( sprintf( 'Dry-run: migrated action %d', $action_id ) ); + } + ); + + add_action( + 'action_scheduler/no_action_to_migrate', + function ( $action_id ) { + WP_CLI::debug( sprintf( 'No action found to migrate for ID %d', $action_id ) ); + } + ); + + add_action( + 'action_scheduler/migrate_action_failed', + function ( $action_id ) { + WP_CLI::warning( sprintf( 'Failed migrating action with ID %d', $action_id ) ); + } + ); + + add_action( + 'action_scheduler/migrate_action_incomplete', + function ( $source_id, $destination_id ) { + WP_CLI::warning( sprintf( 'Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id ) ); + }, + 10, + 2 + ); + + add_action( + 'action_scheduler/migrated_action', + function ( $source_id, $destination_id ) { + WP_CLI::debug( sprintf( 'Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id ) ); + }, + 10, + 2 + ); + + add_action( + 'action_scheduler/migration_batch_starting', + function ( $batch ) { + WP_CLI::debug( 'Beginning migration of batch: ' . print_r( $batch, true ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r + } + ); + + add_action( + 'action_scheduler/migration_batch_complete', + function ( $batch ) { + WP_CLI::log( sprintf( 'Completed migration of %d actions', count( $batch ) ) ); + } + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.php new file mode 100644 index 0000000..fb2ae8f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.php @@ -0,0 +1,139 @@ +total_ticks = 0; + $this->message = $message; + $this->count = $count; + $this->interval = $interval; + } + + /** + * Increment the progress bar ticks. + */ + public function tick() { + if ( null === $this->progress_bar ) { + $this->setup_progress_bar(); + } + + $this->progress_bar->tick(); + $this->total_ticks++; + + do_action( 'action_scheduler/progress_tick', $this->total_ticks ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Get the progress bar tick count. + * + * @return int + */ + public function current() { + return $this->progress_bar ? $this->progress_bar->current() : 0; + } + + /** + * Finish the current progress bar. + */ + public function finish() { + if ( null !== $this->progress_bar ) { + $this->progress_bar->finish(); + } + + $this->progress_bar = null; + } + + /** + * Set the message used when creating the progress bar. + * + * @param string $message The message to be used when the next progress bar is created. + */ + public function set_message( $message ) { + $this->message = $message; + } + + /** + * Set the count for a new progress bar. + * + * @param integer $count The total number of ticks expected to complete. + */ + public function set_count( $count ) { + $this->count = $count; + $this->finish(); + } + + /** + * Set up the progress bar. + */ + protected function setup_progress_bar() { + $this->progress_bar = \WP_CLI\Utils\make_progress_bar( + $this->message, + $this->count, + $this->interval + ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php new file mode 100644 index 0000000..c7c3ada --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php @@ -0,0 +1,282 @@ +store = \ActionScheduler::store(); + } + + /** + * Print in-use data store class. + * + * @param array $args Positional args. + * @param array $assoc_args Keyed args. + * @return void + * + * @subcommand data-store + */ + public function datastore( array $args, array $assoc_args ) { + echo $this->get_current_datastore(); + } + + /** + * Print in-use runner class. + * + * @param array $args Positional args. + * @param array $assoc_args Keyed args. + * @return void + */ + public function runner( array $args, array $assoc_args ) { + echo $this->get_current_runner(); + } + + /** + * Get system status. + * + * @param array $args Positional args. + * @param array $assoc_args Keyed args. + * @return void + */ + public function status( array $args, array $assoc_args ) { + /** + * Get runner status. + * + * @link https://github.com/woocommerce/action-scheduler-disable-default-runner + */ + $runner_enabled = has_action( 'action_scheduler_run_queue', array( \ActionScheduler::runner(), 'run' ) ); + + \WP_CLI::line( sprintf( 'Data store: %s', $this->get_current_datastore() ) ); + \WP_CLI::line( sprintf( 'Runner: %s%s', $this->get_current_runner(), ( $runner_enabled ? '' : ' (disabled)' ) ) ); + \WP_CLI::line( sprintf( 'Version: %s', $this->get_latest_version() ) ); + + $rows = array(); + $action_counts = $this->store->action_counts(); + $oldest_and_newest = $this->get_oldest_and_newest( array_keys( $action_counts ) ); + + foreach ( $action_counts as $status => $count ) { + $rows[] = array( + 'status' => $status, + 'count' => $count, + 'oldest' => $oldest_and_newest[ $status ]['oldest'], + 'newest' => $oldest_and_newest[ $status ]['newest'], + ); + } + + $formatter = new \WP_CLI\Formatter( $assoc_args, array( 'status', 'count', 'oldest', 'newest' ) ); + $formatter->display_items( $rows ); + } + + /** + * Display the active version, or all registered versions. + * + * ## OPTIONS + * + * [--all] + * : List all registered versions. + * + * @param array $args Positional args. + * @param array $assoc_args Keyed args. + * @return void + */ + public function version( array $args, array $assoc_args ) { + $all = (bool) get_flag_value( $assoc_args, 'all' ); + $latest = $this->get_latest_version(); + + if ( ! $all ) { + echo $latest; + \WP_CLI::halt( 0 ); + } + + $instance = \ActionScheduler_Versions::instance(); + $versions = $instance->get_versions(); + $rows = array(); + + foreach ( $versions as $version => $callback ) { + $active = $version === $latest; + + $rows[ $version ] = array( + 'version' => $version, + 'callback' => $callback, + 'active' => $active ? 'yes' : 'no', + ); + } + + uksort( $rows, 'version_compare' ); + + $formatter = new \WP_CLI\Formatter( $assoc_args, array( 'version', 'callback', 'active' ) ); + $formatter->display_items( $rows ); + } + + /** + * Display the current source, or all registered sources. + * + * ## OPTIONS + * + * [--all] + * : List all registered sources. + * + * [--fullpath] + * : List full path of source(s). + * + * @param array $args Positional args. + * @param array $assoc_args Keyed args. + * @uses ActionScheduler_SystemInformation::active_source_path() + * @uses \WP_CLI\Formatter::display_items() + * @uses $this->get_latest_version() + * @return void + */ + public function source( array $args, array $assoc_args ) { + $all = (bool) get_flag_value( $assoc_args, 'all' ); + $fullpath = (bool) get_flag_value( $assoc_args, 'fullpath' ); + $source = ActionScheduler_SystemInformation::active_source_path(); + $path = $source; + + if ( ! $fullpath ) { + $path = str_replace( ABSPATH, '', $path ); + } + + if ( ! $all ) { + echo $path; + \WP_CLI::halt( 0 ); + } + + $sources = ActionScheduler_SystemInformation::get_sources(); + + if ( empty( $sources ) ) { + WP_CLI::log( __( 'Detailed information about registered sources is not currently available.', 'action-scheduler' ) ); + return; + } + + $rows = array(); + + foreach ( $sources as $check_source => $version ) { + $active = dirname( $check_source ) === $source; + $path = $check_source; + + if ( ! $fullpath ) { + $path = str_replace( ABSPATH, '', $path ); + } + + $rows[ $check_source ] = array( + 'source' => $path, + 'version' => $version, + 'active' => $active ? 'yes' : 'no', + ); + } + + ksort( $rows ); + + \WP_CLI::log( PHP_EOL . 'Please note there can only be one unique registered instance of Action Scheduler per ' . PHP_EOL . 'version number, so this list may not include all the currently present copies of ' . PHP_EOL . 'Action Scheduler.' . PHP_EOL ); + + $formatter = new \WP_CLI\Formatter( $assoc_args, array( 'source', 'version', 'active' ) ); + $formatter->display_items( $rows ); + } + + /** + * Get current data store. + * + * @return string + */ + protected function get_current_datastore() { + return get_class( $this->store ); + } + + /** + * Get latest version. + * + * @param null|\ActionScheduler_Versions $instance Versions. + * @return string + */ + protected function get_latest_version( $instance = null ) { + if ( is_null( $instance ) ) { + $instance = \ActionScheduler_Versions::instance(); + } + + return $instance->latest_version(); + } + + /** + * Get current runner. + * + * @return string + */ + protected function get_current_runner() { + return get_class( \ActionScheduler::runner() ); + } + + /** + * Get oldest and newest scheduled dates for a given set of statuses. + * + * @param array $status_keys Set of statuses to find oldest & newest action for. + * @return array + */ + protected function get_oldest_and_newest( $status_keys ) { + $oldest_and_newest = array(); + + foreach ( $status_keys as $status ) { + $oldest_and_newest[ $status ] = array( + 'oldest' => '–', + 'newest' => '–', + ); + + if ( 'in-progress' === $status ) { + continue; + } + + $oldest_and_newest[ $status ]['oldest'] = $this->get_action_status_date( $status, 'oldest' ); + $oldest_and_newest[ $status ]['newest'] = $this->get_action_status_date( $status, 'newest' ); + } + + return $oldest_and_newest; + } + + /** + * Get oldest or newest scheduled date for a given status. + * + * @param string $status Action status label/name string. + * @param string $date_type Oldest or Newest. + * @return string + */ + protected function get_action_status_date( $status, $date_type = 'oldest' ) { + $order = 'oldest' === $date_type ? 'ASC' : 'DESC'; + + $args = array( + 'status' => $status, + 'per_page' => 1, + 'order' => $order, + ); + + $action = $this->store->query_actions( $args ); + + if ( ! empty( $action ) ) { + $date_object = $this->store->get_date( $action[0] ); + $action_date = $date_object->format( 'Y-m-d H:i:s O' ); + } else { + $action_date = '–'; + } + + return $action_date; + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php new file mode 100644 index 0000000..03922d8 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php @@ -0,0 +1,403 @@ +init() (or it's parent method) set this itself, + * once it has initialized, however that would cause problems in cases where a custom data store is in + * use and it has not yet been updated to follow that same logic. + */ + function () { + self::$data_store_initialized = true; + + /** + * Fires when Action Scheduler is ready: it is safe to use the procedural API after this point. + * + * @since 3.5.5 + */ + do_action( 'action_scheduler_init' ); + }, + 1 + ); + } else { + $admin_view->init(); + $store->init(); + $logger->init(); + $runner->init(); + $recurring_action_scheduler->init(); + self::$data_store_initialized = true; + + /** + * Fires when Action Scheduler is ready: it is safe to use the procedural API after this point. + * + * @since 3.5.5 + */ + do_action( 'action_scheduler_init' ); + } + + if ( apply_filters( 'action_scheduler_load_deprecated_functions', true ) ) { + require_once self::plugin_path( 'deprecated/functions.php' ); + } + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command' ); + WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Clean_Command' ); + WP_CLI::add_command( 'action-scheduler action', '\Action_Scheduler\WP_CLI\Action_Command' ); + WP_CLI::add_command( 'action-scheduler', '\Action_Scheduler\WP_CLI\System_Command' ); + if ( ! ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration() ) { + $command = new Migration_Command(); + $command->register(); + } + } + + /** + * Handle WP comment cleanup after migration. + */ + if ( is_a( $logger, 'ActionScheduler_DBLogger' ) && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs() ) { + ActionScheduler_WPCommentCleaner::init(); + } + + add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' ); + } + + /** + * Check whether the AS data store has been initialized. + * + * @param string $function_name The name of the function being called. Optional. Default `null`. + * @return bool + */ + public static function is_initialized( $function_name = null ) { + if ( ! self::$data_store_initialized && ! empty( $function_name ) ) { + $message = sprintf( + /* translators: %s function name. */ + __( '%s() was called before the Action Scheduler data store was initialized', 'action-scheduler' ), + esc_attr( $function_name ) + ); + _doing_it_wrong( esc_html( $function_name ), esc_html( $message ), '3.1.6' ); + } + + return self::$data_store_initialized; + } + + /** + * Determine if the class is one of our abstract classes. + * + * @since 3.0.0 + * + * @param string $class The class name. + * + * @return bool + */ + protected static function is_class_abstract( $class ) { + static $abstracts = array( + 'ActionScheduler' => true, + 'ActionScheduler_Abstract_ListTable' => true, + 'ActionScheduler_Abstract_QueueRunner' => true, + 'ActionScheduler_Abstract_Schedule' => true, + 'ActionScheduler_Abstract_RecurringSchedule' => true, + 'ActionScheduler_Lock' => true, + 'ActionScheduler_Logger' => true, + 'ActionScheduler_Abstract_Schema' => true, + 'ActionScheduler_Store' => true, + 'ActionScheduler_TimezoneHelper' => true, + 'ActionScheduler_WPCLI_Command' => true, + ); + + return isset( $abstracts[ $class ] ) && $abstracts[ $class ]; + } + + /** + * Determine if the class is one of our migration classes. + * + * @since 3.0.0 + * + * @param string $class The class name. + * + * @return bool + */ + protected static function is_class_migration( $class ) { + static $migration_segments = array( + 'ActionMigrator' => true, + 'BatchFetcher' => true, + 'DBStoreMigrator' => true, + 'DryRun' => true, + 'LogMigrator' => true, + 'Config' => true, + 'Controller' => true, + 'Runner' => true, + 'Scheduler' => true, + ); + + $segments = explode( '_', $class ); + $segment = isset( $segments[1] ) ? $segments[1] : $class; + + return isset( $migration_segments[ $segment ] ) && $migration_segments[ $segment ]; + } + + /** + * Determine if the class is one of our WP CLI classes. + * + * @since 3.0.0 + * + * @param string $class The class name. + * + * @return bool + */ + protected static function is_class_cli( $class ) { + static $cli_segments = array( + 'QueueRunner' => true, + 'Command' => true, + 'ProgressBar' => true, + '\Action_Scheduler\WP_CLI\Action_Command' => true, + '\Action_Scheduler\WP_CLI\System_Command' => true, + ); + + $segments = explode( '_', $class ); + $segment = isset( $segments[1] ) ? $segments[1] : $class; + + return isset( $cli_segments[ $segment ] ) && $cli_segments[ $segment ]; + } + + /** + * Clone. + */ + final public function __clone() { + trigger_error( 'Singleton. No cloning allowed!', E_USER_ERROR ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + } + + /** + * Wakeup. + */ + final public function __wakeup() { + trigger_error( 'Singleton. No serialization allowed!', E_USER_ERROR ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + } + + /** + * Construct. + */ + final private function __construct() {} + + /** Deprecated **/ + + /** + * Get DateTime object. + * + * @param null|string $when Date/time string. + * @param string $timezone Timezone string. + */ + public static function get_datetime_object( $when = null, $timezone = 'UTC' ) { + _deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' ); + return as_get_datetime_object( $when, $timezone ); + } + + /** + * Issue deprecated warning if an Action Scheduler function is called in the shutdown hook. + * + * @param string $function_name The name of the function being called. + * @deprecated 3.1.6. + */ + public static function check_shutdown_hook( $function_name ) { + _deprecated_function( __FUNCTION__, '3.1.6' ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php new file mode 100644 index 0000000..3c480e3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php @@ -0,0 +1,797 @@ + value pair. The + * key must much the table column name and the value is the label, which is + * automatically translated. + * + * @var array + */ + protected $columns = array(); + + /** + * Defines the row-actions. It expects an array where the key + * is the column name and the value is an array of actions. + * + * The array of actions are key => value, where key is the method name + * (with the prefix row_action_) and the value is the label + * and title. + * + * @var array + */ + protected $row_actions = array(); + + /** + * The Primary key of our table + * + * @var string + */ + protected $ID = 'ID'; + + /** + * Enables sorting, it expects an array + * of columns (the column names are the values) + * + * @var array + */ + protected $sort_by = array(); + + /** + * The default sort order + * + * @var string + */ + protected $filter_by = array(); + + /** + * The status name => count combinations for this table's items. Used to display status filters. + * + * @var array + */ + protected $status_counts = array(); + + /** + * Notices to display when loading the table. Array of arrays of form array( 'class' => {updated|error}, 'message' => 'This is the notice text display.' ). + * + * @var array + */ + protected $admin_notices = array(); + + /** + * Localised string displayed in the

    element above the able. + * + * @var string + */ + protected $table_header; + + /** + * Enables bulk actions. It must be an array where the key is the action name + * and the value is the label (which is translated automatically). It is important + * to notice that it will check that the method exists (`bulk_$name`) and will throw + * an exception if it does not exists. + * + * This class will automatically check if the current request has a bulk action, will do the + * validations and afterwards will execute the bulk method, with two arguments. The first argument + * is the array with primary keys, the second argument is a string with a list of the primary keys, + * escaped and ready to use (with `IN`). + * + * @var array + */ + protected $bulk_actions = array(); + + /** + * Makes translation easier, it basically just wraps + * `_x` with some default (the package name). + * + * @param string $text The new text to translate. + * @param string $context The context of the text. + * @return string|void The translated text. + * + * @deprecated 3.0.0 Use `_x()` instead. + */ + protected function translate( $text, $context = '' ) { + return $text; + } + + /** + * Reads `$this->bulk_actions` and returns an array that WP_List_Table understands. It + * also validates that the bulk method handler exists. It throws an exception because + * this is a library meant for developers and missing a bulk method is a development-time error. + * + * @return array + * + * @throws RuntimeException Throws RuntimeException when the bulk action does not have a callback method. + */ + protected function get_bulk_actions() { + $actions = array(); + + foreach ( $this->bulk_actions as $action => $label ) { + if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) { + throw new RuntimeException( "The bulk action $action does not have a callback method" ); + } + + $actions[ $action ] = $label; + } + + return $actions; + } + + /** + * Checks if the current request has a bulk action. If that is the case it will validate and will + * execute the bulk method handler. Regardless if the action is valid or not it will redirect to + * the previous page removing the current arguments that makes this request a bulk action. + */ + protected function process_bulk_action() { + global $wpdb; + // Detect when a bulk action is being triggered. + $action = $this->current_action(); + if ( ! $action ) { + return; + } + + check_admin_referer( 'bulk-' . $this->_args['plural'] ); + + $method = 'bulk_' . $action; + if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) { + $ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')'; + $id = array_map( 'absint', $_GET['ID'] ); + $this->$method( $id, $wpdb->prepare( $ids_sql, $id ) ); //phpcs:ignore WordPress.DB.PreparedSQL + } + + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + wp_safe_redirect( + remove_query_arg( + array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ), + esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) + ) + ); + exit; + } + } + + /** + * Default code for deleting entries. + * validated already by process_bulk_action() + * + * @param array $ids ids of the items to delete. + * @param string $ids_sql the sql for the ids. + * @return void + */ + protected function bulk_delete( array $ids, $ids_sql ) { + $store = ActionScheduler::store(); + foreach ( $ids as $action_id ) { + $store->delete( $action_id ); + } + } + + /** + * Prepares the _column_headers property which is used by WP_Table_List at rendering. + * It merges the columns and the sortable columns. + */ + protected function prepare_column_headers() { + $this->_column_headers = array( + $this->get_columns(), + get_hidden_columns( $this->screen ), + $this->get_sortable_columns(), + ); + } + + /** + * Reads $this->sort_by and returns the columns name in a format that WP_Table_List + * expects + */ + public function get_sortable_columns() { + $sort_by = array(); + foreach ( $this->sort_by as $column ) { + $sort_by[ $column ] = array( $column, true ); + } + return $sort_by; + } + + /** + * Returns the columns names for rendering. It adds a checkbox for selecting everything + * as the first column + */ + public function get_columns() { + $columns = array_merge( + array( 'cb' => '' ), + $this->columns + ); + + return $columns; + } + + /** + * Get prepared LIMIT clause for items query + * + * @global wpdb $wpdb + * + * @return string Prepared LIMIT clause for items query. + */ + protected function get_items_query_limit() { + global $wpdb; + + $per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page ); + return $wpdb->prepare( 'LIMIT %d', $per_page ); + } + + /** + * Returns the number of items to offset/skip for this current view. + * + * @return int + */ + protected function get_items_offset() { + $per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page ); + $current_page = $this->get_pagenum(); + if ( 1 < $current_page ) { + $offset = $per_page * ( $current_page - 1 ); + } else { + $offset = 0; + } + + return $offset; + } + + /** + * Get prepared OFFSET clause for items query + * + * @global wpdb $wpdb + * + * @return string Prepared OFFSET clause for items query. + */ + protected function get_items_query_offset() { + global $wpdb; + + return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() ); + } + + /** + * Prepares the ORDER BY sql statement. It uses `$this->sort_by` to know which + * columns are sortable. This requests validates the orderby $_GET parameter is a valid + * column and sortable. It will also use order (ASC|DESC) using DESC by default. + */ + protected function get_items_query_order() { + if ( empty( $this->sort_by ) ) { + return ''; + } + + $orderby = esc_sql( $this->get_request_orderby() ); + $order = esc_sql( $this->get_request_order() ); + + return "ORDER BY {$orderby} {$order}"; + } + + /** + * Querystring arguments to persist between form submissions. + * + * @since 3.7.3 + * + * @return string[] + */ + protected function get_request_query_args_to_persist() { + return array_merge( + $this->sort_by, + array( + 'page', + 'status', + 'tab', + ) + ); + } + + /** + * Return the sortable column specified for this request to order the results by, if any. + * + * @return string + */ + protected function get_request_orderby() { + + $valid_sortable_columns = array_values( $this->sort_by ); + + if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns, true ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + $orderby = sanitize_text_field( wp_unslash( $_GET['orderby'] ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended + } else { + $orderby = $valid_sortable_columns[0]; + } + + return $orderby; + } + + /** + * Return the sortable column order specified for this request. + * + * @return string + */ + protected function get_request_order() { + + if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( sanitize_text_field( wp_unslash( $_GET['order'] ) ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + $order = 'DESC'; + } else { + $order = 'ASC'; + } + + return $order; + } + + /** + * Return the status filter for this request, if any. + * + * @return string + */ + protected function get_request_status() { + $status = ( ! empty( $_GET['status'] ) ) ? sanitize_text_field( wp_unslash( $_GET['status'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended + return $status; + } + + /** + * Return the search filter for this request, if any. + * + * @return string + */ + protected function get_request_search_query() { + $search_query = ( ! empty( $_GET['s'] ) ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended + return $search_query; + } + + /** + * Process and return the columns name. This is meant for using with SQL, this means it + * always includes the primary key. + * + * @return array + */ + protected function get_table_columns() { + $columns = array_keys( $this->columns ); + if ( ! in_array( $this->ID, $columns, true ) ) { + $columns[] = $this->ID; + } + + return $columns; + } + + /** + * Check if the current request is doing a "full text" search. If that is the case + * prepares the SQL to search texts using LIKE. + * + * If the current request does not have any search or if this list table does not support + * that feature it will return an empty string. + * + * @return string + */ + protected function get_items_query_search() { + global $wpdb; + + if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + return ''; + } + + $search_string = sanitize_text_field( wp_unslash( $_GET['s'] ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended + + $filter = array(); + foreach ( $this->search_by as $column ) { + $wild = '%'; + $sql_like = $wild . $wpdb->esc_like( $search_string ) . $wild; + $filter[] = $wpdb->prepare( '`' . $column . '` LIKE %s', $sql_like ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.DB.PreparedSQL.NotPrepared + } + return implode( ' OR ', $filter ); + } + + /** + * Prepares the SQL to filter rows by the options defined at `$this->filter_by`. Before trusting + * any data sent by the user it validates that it is a valid option. + */ + protected function get_items_query_filters() { + global $wpdb; + + if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + return ''; + } + + $filter = array(); + + foreach ( $this->filter_by as $column => $options ) { + if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + continue; + } + + $filter[] = $wpdb->prepare( "`$column` = %s", sanitize_text_field( wp_unslash( $_GET['filter_by'][ $column ] ) ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } + + return implode( ' AND ', $filter ); + + } + + /** + * Prepares the data to feed WP_Table_List. + * + * This has the core for selecting, sorting and filtering data. To keep the code simple + * its logic is split among many methods (get_items_query_*). + * + * Beside populating the items this function will also count all the records that matches + * the filtering criteria and will do fill the pagination variables. + */ + public function prepare_items() { + global $wpdb; + + $this->process_bulk_action(); + + $this->process_row_actions(); + + if ( ! empty( $_REQUEST['_wp_http_referer'] && ! empty( $_SERVER['REQUEST_URI'] ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended + // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter + wp_safe_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ); + exit; + } + + $this->prepare_column_headers(); + + $limit = $this->get_items_query_limit(); + $offset = $this->get_items_query_offset(); + $order = $this->get_items_query_order(); + $where = array_filter( + array( + $this->get_items_query_search(), + $this->get_items_query_filters(), + ) + ); + $columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`'; + + if ( ! empty( $where ) ) { + $where = 'WHERE (' . implode( ') AND (', $where ) . ')'; + } else { + $where = ''; + } + + $sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}"; + + $this->set_items( $wpdb->get_results( $sql, ARRAY_A ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + $query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}"; + $total_items = $wpdb->get_var( $query_count ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + $per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page ); + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'per_page' => $per_page, + 'total_pages' => ceil( $total_items / $per_page ), + ) + ); + } + + /** + * Display the table. + * + * @param string $which The name of the table. + */ + public function extra_tablenav( $which ) { + if ( ! $this->filter_by || 'top' !== $which ) { + return; + } + + echo '
    '; + + foreach ( $this->filter_by as $id => $options ) { + $default = ! empty( $_GET['filter_by'][ $id ] ) ? sanitize_text_field( wp_unslash( $_GET['filter_by'][ $id ] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended + if ( empty( $options[ $default ] ) ) { + $default = ''; + } + + echo ''; + } + + submit_button( esc_html__( 'Filter', 'action-scheduler' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); + echo '
    '; + } + + /** + * Set the data for displaying. It will attempt to unserialize (There is a chance that some columns + * are serialized). This can be override in child classes for further data transformation. + * + * @param array $items Items array. + */ + protected function set_items( array $items ) { + $this->items = array(); + foreach ( $items as $item ) { + $this->items[ $item[ $this->ID ] ] = array_map( 'maybe_unserialize', $item ); + } + } + + /** + * Renders the checkbox for each row, this is the first column and it is named ID regardless + * of how the primary key is named (to keep the code simpler). The bulk actions will do the proper + * name transformation though using `$this->ID`. + * + * @param array $row The row to render. + */ + public function column_cb( $row ) { + return ''; + } + + /** + * Renders the row-actions. + * + * This method renders the action menu, it reads the definition from the $row_actions property, + * and it checks that the row action method exists before rendering it. + * + * @param array $row Row to be rendered. + * @param string $column_name Column name. + * @return string + */ + protected function maybe_render_actions( $row, $column_name ) { + if ( empty( $this->row_actions[ $column_name ] ) ) { + return; + } + + $row_id = $row[ $this->ID ]; + + $actions = '
    '; + $action_count = 0; + foreach ( $this->row_actions[ $column_name ] as $action_key => $action ) { + + $action_count++; + + if ( ! method_exists( $this, 'row_action_' . $action_key ) ) { + continue; + } + + $action_link = ! empty( $action['link'] ) ? $action['link'] : add_query_arg( + array( + 'row_action' => $action_key, + 'row_id' => $row_id, + 'nonce' => wp_create_nonce( $action_key . '::' . $row_id ), + ) + ); + $span_class = ! empty( $action['class'] ) ? $action['class'] : $action_key; + $separator = ( $action_count < count( $this->row_actions[ $column_name ] ) ) ? ' | ' : ''; + + $actions .= sprintf( '', esc_attr( $span_class ) ); + $actions .= sprintf( '%3$s', esc_url( $action_link ), esc_attr( $action['desc'] ), esc_html( $action['name'] ) ); + $actions .= sprintf( '%s', $separator ); + } + $actions .= '
    '; + return $actions; + } + + /** + * Process the bulk actions. + * + * @return void + */ + protected function process_row_actions() { + $parameters = array( 'row_action', 'row_id', 'nonce' ); + foreach ( $parameters as $parameter ) { + if ( empty( $_REQUEST[ $parameter ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended + return; + } + } + + $action = sanitize_text_field( wp_unslash( $_REQUEST['row_action'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated + $row_id = sanitize_text_field( wp_unslash( $_REQUEST['row_id'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated + $nonce = sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated + $method = 'row_action_' . $action; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + + if ( wp_verify_nonce( $nonce, $action . '::' . $row_id ) && method_exists( $this, $method ) ) { + $this->$method( sanitize_text_field( wp_unslash( $row_id ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended + } + + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + wp_safe_redirect( + remove_query_arg( + array( 'row_id', 'row_action', 'nonce' ), + esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) + ) + ); + exit; + } + } + + /** + * Default column formatting, it will escape everything for security. + * + * @param array $item The item array. + * @param string $column_name Column name to display. + * + * @return string + */ + public function column_default( $item, $column_name ) { + $column_html = esc_html( $item[ $column_name ] ); + $column_html .= $this->maybe_render_actions( $item, $column_name ); + return $column_html; + } + + /** + * Display the table heading and search query, if any + */ + protected function display_header() { + echo '

    ' . esc_attr( $this->table_header ) . '

    '; + if ( $this->get_request_search_query() ) { + /* translators: %s: search query */ + echo '' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . ''; + } + echo '
    '; + } + + /** + * Display the table heading and search query, if any + */ + protected function display_admin_notices() { + foreach ( $this->admin_notices as $notice ) { + echo '
    '; + echo '

    ' . wp_kses_post( $notice['message'] ) . '

    '; + echo '
    '; + } + } + + /** + * Prints the available statuses so the user can click to filter. + */ + protected function display_filter_by_status() { + + $status_list_items = array(); + $request_status = $this->get_request_status(); + + // Helper to set 'all' filter when not set on status counts passed in. + if ( ! isset( $this->status_counts['all'] ) ) { + $all_count = array_sum( $this->status_counts ); + if ( isset( $this->status_counts['past-due'] ) ) { + $all_count -= $this->status_counts['past-due']; + } + $this->status_counts = array( 'all' => $all_count ) + $this->status_counts; + } + + // Translated status labels. + $status_labels = ActionScheduler_Store::instance()->get_status_labels(); + $status_labels['all'] = esc_html_x( 'All', 'status labels', 'action-scheduler' ); + $status_labels['past-due'] = esc_html_x( 'Past-due', 'status labels', 'action-scheduler' ); + + foreach ( $this->status_counts as $status_slug => $count ) { + + if ( 0 === $count ) { + continue; + } + + if ( $status_slug === $request_status || ( empty( $request_status ) && 'all' === $status_slug ) ) { + $status_list_item = '
  • %3$s (%4$d)
  • '; + } else { + $status_list_item = '
  • %3$s (%4$d)
  • '; + } + + $status_name = isset( $status_labels[ $status_slug ] ) ? $status_labels[ $status_slug ] : ucfirst( $status_slug ); + $status_filter_url = ( 'all' === $status_slug ) ? remove_query_arg( 'status' ) : add_query_arg( 'status', $status_slug ); + $status_filter_url = remove_query_arg( array( 'paged', 's' ), $status_filter_url ); + $status_list_items[] = sprintf( $status_list_item, esc_attr( $status_slug ), esc_url( $status_filter_url ), esc_html( $status_name ), absint( $count ) ); + } + + if ( $status_list_items ) { + echo '
      '; + echo implode( " | \n", $status_list_items ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo '
    '; + } + } + + /** + * Renders the table list, we override the original class to render the table inside a form + * and to render any needed HTML (like the search box). By doing so the callee of a function can simple + * forget about any extra HTML. + */ + protected function display_table() { + echo '
    '; + foreach ( $this->get_request_query_args_to_persist() as $arg ) { + $arg_value = isset( $_GET[ $arg ] ) ? sanitize_text_field( wp_unslash( $_GET[ $arg ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + if ( ! $arg_value ) { + continue; + } + + echo ''; + } + + if ( ! empty( $this->search_by ) ) { + echo $this->search_box( $this->get_search_box_button_text(), 'plugin' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } + parent::display(); + echo '
    '; + } + + /** + * Process any pending actions. + */ + public function process_actions() { + $this->process_bulk_action(); + $this->process_row_actions(); + + if ( ! empty( $_REQUEST['_wp_http_referer'] ) && ! empty( $_SERVER['REQUEST_URI'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended + // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter + wp_safe_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ); + exit; + } + } + + /** + * Render the list table page, including header, notices, status filters and table. + */ + public function display_page() { + $this->prepare_items(); + + echo '
    '; + $this->display_header(); + $this->display_admin_notices(); + $this->display_filter_by_status(); + $this->display_table(); + echo '
    '; + } + + /** + * Get the text to display in the search box on the list table. + */ + protected function get_search_box_placeholder() { + return esc_html__( 'Search', 'action-scheduler' ); + } + + /** + * Gets the screen per_page option name. + * + * @return string + */ + protected function get_per_page_option_name() { + return $this->package . '_items_per_page'; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php new file mode 100644 index 0000000..d5b4bf4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php @@ -0,0 +1,384 @@ +created_time = microtime( true ); + + $this->store = $store ? $store : ActionScheduler_Store::instance(); + $this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor( $this->store ); + $this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner( $this->store ); + } + + /** + * Process an individual action. + * + * @param int $action_id The action ID to process. + * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' + * Generally, this should be capitalised and not localised as it's a proper noun. + * @throws \Exception When error running action. + */ + public function process_action( $action_id, $context = '' ) { + // Temporarily override the error handler while we process the current action. + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler + set_error_handler( + /** + * Temporary error handler which can catch errors and convert them into exceptions. This facilitates more + * robust error handling across all supported PHP versions. + * + * @throws Exception + * + * @param int $type Error level expressed as an integer. + * @param string $message Error message. + */ + function ( $type, $message ) { + throw new Exception( $message ); + }, + E_USER_ERROR | E_RECOVERABLE_ERROR + ); + + /* + * The nested try/catch structure is required because we potentially need to convert thrown errors into + * exceptions (and an exception thrown from a catch block cannot be caught by a later catch block in the *same* + * structure). + */ + try { + try { + $valid_action = true; + + do_action( 'action_scheduler_before_execute', $action_id, $context ); + + if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) { + $valid_action = false; + do_action( 'action_scheduler_execution_ignored', $action_id, $context ); + return; + } + + do_action( 'action_scheduler_begin_execute', $action_id, $context ); + + $action = $this->store->fetch_action( $action_id ); + $this->store->log_execution( $action_id ); + $action->execute(); + do_action( 'action_scheduler_after_execute', $action_id, $action, $context ); + $this->store->mark_complete( $action_id ); + } catch ( Throwable $e ) { + // Throwable is defined when executing under PHP 7.0 and up. We convert it to an exception, for + // compatibility with ActionScheduler_Logger. + throw new Exception( $e->getMessage(), $e->getCode(), $e ); + } + } catch ( Exception $e ) { + // This catch block exists for compatibility with PHP 5.6. + $this->handle_action_error( $action_id, $e, $context, $valid_action ); + } finally { + restore_error_handler(); + } + + if ( isset( $action ) && is_a( $action, 'ActionScheduler_Action' ) && $action->get_schedule()->is_recurring() ) { + $this->schedule_next_instance( $action, $action_id ); + } + } + + /** + * Marks actions as either having failed execution or failed validation, as appropriate. + * + * @param int $action_id Action ID. + * @param Exception $e Exception instance. + * @param string $context Execution context. + * @param bool $valid_action If the action is valid. + * + * @return void + */ + private function handle_action_error( $action_id, $e, $context, $valid_action ) { + if ( $valid_action ) { + $this->store->mark_failure( $action_id ); + /** + * Runs when action execution fails. + * + * @param int $action_id Action ID. + * @param Exception $e Exception instance. + * @param string $context Execution context. + */ + do_action( 'action_scheduler_failed_execution', $action_id, $e, $context ); + } else { + /** + * Runs when action validation fails. + * + * @param int $action_id Action ID. + * @param Exception $e Exception instance. + * @param string $context Execution context. + */ + do_action( 'action_scheduler_failed_validation', $action_id, $e, $context ); + } + } + + /** + * Schedule the next instance of the action if necessary. + * + * @param ActionScheduler_Action $action Action. + * @param int $action_id Action ID. + */ + protected function schedule_next_instance( ActionScheduler_Action $action, $action_id ) { + // If a recurring action has been consistently failing, we may wish to stop rescheduling it. + if ( + ActionScheduler_Store::STATUS_FAILED === $this->store->get_status( $action_id ) + && $this->recurring_action_is_consistently_failing( $action, $action_id ) + ) { + ActionScheduler_Logger::instance()->log( + $action_id, + __( 'This action appears to be consistently failing. A new instance will not be scheduled.', 'action-scheduler' ) + ); + + return; + } + + try { + ActionScheduler::factory()->repeat( $action ); + } catch ( Exception $e ) { + do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action ); + } + } + + /** + * Determine if the specified recurring action has been consistently failing. + * + * @param ActionScheduler_Action $action The recurring action to be rescheduled. + * @param int $action_id The ID of the recurring action. + * + * @return bool + */ + private function recurring_action_is_consistently_failing( ActionScheduler_Action $action, $action_id ) { + /** + * Controls the failure threshold for recurring actions. + * + * Before rescheduling a recurring action, we look at its status. If it failed, we then check if all of the most + * recent actions (upto the threshold set by this filter) sharing the same hook have also failed: if they have, + * that is considered consistent failure and a new instance of the action will not be scheduled. + * + * @param int $failure_threshold Number of actions of the same hook to examine for failure. Defaults to 5. + */ + $consistent_failure_threshold = (int) apply_filters( 'action_scheduler_recurring_action_failure_threshold', 5 ); + + // This query should find the earliest *failing* action (for the hook we are interested in) within our threshold. + $query_args = array( + 'hook' => $action->get_hook(), + 'status' => ActionScheduler_Store::STATUS_FAILED, + 'date' => date_create( 'now', timezone_open( 'UTC' ) )->format( 'Y-m-d H:i:s' ), + 'date_compare' => '<', + 'per_page' => 1, + 'offset' => $consistent_failure_threshold - 1, + ); + + $first_failing_action_id = $this->store->query_actions( $query_args ); + + // If we didn't retrieve an action ID, then there haven't been enough failures for us to worry about. + if ( empty( $first_failing_action_id ) ) { + return false; + } + + // Now let's fetch the first action (having the same hook) of *any status* within the same window. + unset( $query_args['status'] ); + $first_action_id_with_the_same_hook = $this->store->query_actions( $query_args ); + + /** + * If a recurring action is assessed as consistently failing, it will not be rescheduled. This hook provides a + * way to observe and optionally override that assessment. + * + * @param bool $is_consistently_failing If the action is considered to be consistently failing. + * @param ActionScheduler_Action $action The action being assessed. + */ + return (bool) apply_filters( + 'action_scheduler_recurring_action_is_consistently_failing', + $first_action_id_with_the_same_hook === $first_failing_action_id, + $action + ); + } + + /** + * Run the queue cleaner. + */ + protected function run_cleanup() { + $this->cleaner->clean( 10 * $this->get_time_limit() ); + } + + /** + * Get the number of concurrent batches a runner allows. + * + * @return int + */ + public function get_allowed_concurrent_batches() { + return apply_filters( 'action_scheduler_queue_runner_concurrent_batches', 1 ); + } + + /** + * Check if the number of allowed concurrent batches is met or exceeded. + * + * @return bool + */ + public function has_maximum_concurrent_batches() { + return $this->store->get_claim_count() >= $this->get_allowed_concurrent_batches(); + } + + /** + * Get the maximum number of seconds a batch can run for. + * + * @return int The number of seconds. + */ + protected function get_time_limit() { + + $time_limit = 30; + + // Apply deprecated filter from deprecated get_maximum_execution_time() method. + if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) { + _deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' ); + $time_limit = apply_filters( 'action_scheduler_maximum_execution_time', $time_limit ); + } + + return absint( apply_filters( 'action_scheduler_queue_runner_time_limit', $time_limit ) ); + } + + /** + * Get the number of seconds the process has been running. + * + * @return int The number of seconds. + */ + protected function get_execution_time() { + $execution_time = microtime( true ) - $this->created_time; + + // Get the CPU time if the hosting environment uses it rather than wall-clock time to calculate a process's execution time. + if ( function_exists( 'getrusage' ) && apply_filters( 'action_scheduler_use_cpu_execution_time', defined( 'PANTHEON_ENVIRONMENT' ) ) ) { + $resource_usages = getrusage(); + + if ( isset( $resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'] ) ) { + $execution_time = $resource_usages['ru_stime.tv_sec'] + ( $resource_usages['ru_stime.tv_usec'] / 1000000 ); + } + } + + return $execution_time; + } + + /** + * Check if the host's max execution time is (likely) to be exceeded if processing more actions. + * + * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action. + * @return bool + */ + protected function time_likely_to_be_exceeded( $processed_actions ) { + $execution_time = $this->get_execution_time(); + $max_execution_time = $this->get_time_limit(); + + // Safety against division by zero errors. + if ( 0 === $processed_actions ) { + return $execution_time >= $max_execution_time; + } + + $time_per_action = $execution_time / $processed_actions; + $estimated_time = $execution_time + ( $time_per_action * 3 ); + $likely_to_be_exceeded = $estimated_time > $max_execution_time; + + return apply_filters( 'action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time ); + } + + /** + * Get memory limit + * + * Based on WP_Background_Process::get_memory_limit() + * + * @return int + */ + protected function get_memory_limit() { + if ( function_exists( 'ini_get' ) ) { + $memory_limit = ini_get( 'memory_limit' ); + } else { + $memory_limit = '128M'; // Sensible default, and minimum required by WooCommerce. + } + + if ( ! $memory_limit || -1 === $memory_limit || '-1' === $memory_limit ) { + // Unlimited, set to 32GB. + $memory_limit = '32G'; + } + + return ActionScheduler_Compatibility::convert_hr_to_bytes( $memory_limit ); + } + + /** + * Memory exceeded + * + * Ensures the batch process never exceeds 90% of the maximum WordPress memory. + * + * Based on WP_Background_Process::memory_exceeded() + * + * @return bool + */ + protected function memory_exceeded() { + + $memory_limit = $this->get_memory_limit() * 0.90; + $current_memory = memory_get_usage( true ); + $memory_exceeded = $current_memory >= $memory_limit; + + return apply_filters( 'action_scheduler_memory_exceeded', $memory_exceeded, $this ); + } + + /** + * See if the batch limits have been exceeded, which is when memory usage is almost at + * the maximum limit, or the time to process more actions will exceed the max time limit. + * + * Based on WC_Background_Process::batch_limits_exceeded() + * + * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action. + * @return bool + */ + protected function batch_limits_exceeded( $processed_actions ) { + return $this->memory_exceeded() || $this->time_likely_to_be_exceeded( $processed_actions ); + } + + /** + * Process actions in the queue. + * + * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' + * Generally, this should be capitalised and not localised as it's a proper noun. + * @return int The number of actions processed. + */ + abstract public function run( $context = '' ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php new file mode 100644 index 0000000..60d09e9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php @@ -0,0 +1,112 @@ +start - and logic to calculate the next run date after + * that - @see $this->calculate_next(). The $first_date property also keeps a record of when the very + * first instance of this chain of schedules ran. + * + * @var DateTime + */ + private $first_date = null; + + /** + * Timestamp equivalent of @see $this->first_date + * + * @var int + */ + protected $first_timestamp = null; + + /** + * The recurrence between each time an action is run using this schedule. + * Used to calculate the start date & time. Can be a number of seconds, in the + * case of ActionScheduler_IntervalSchedule, or a cron expression, as in the + * case of ActionScheduler_CronSchedule. Or something else. + * + * @var mixed + */ + protected $recurrence; + + /** + * Construct. + * + * @param DateTime $date The date & time to run the action. + * @param mixed $recurrence The data used to determine the schedule's recurrence. + * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance. + */ + public function __construct( DateTime $date, $recurrence, ?DateTime $first = null ) { + parent::__construct( $date ); + $this->first_date = empty( $first ) ? $date : $first; + $this->recurrence = $recurrence; + } + + /** + * Schedule is recurring. + * + * @return bool + */ + public function is_recurring() { + return true; + } + + /** + * Get the date & time of the first schedule in this recurring series. + * + * @return DateTime|null + */ + public function get_first_date() { + return clone $this->first_date; + } + + /** + * Get the schedule's recurrence. + * + * @return string + */ + public function get_recurrence() { + return $this->recurrence; + } + + /** + * For PHP 5.2 compat, since DateTime objects can't be serialized + * + * @return array + */ + public function __sleep() { + $sleep_params = parent::__sleep(); + $this->first_timestamp = $this->first_date->getTimestamp(); + return array_merge( + $sleep_params, + array( + 'first_timestamp', + 'recurrence', + ) + ); + } + + /** + * Unserialize recurring schedules serialized/stored prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, schedules used different property names to refer + * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. This was addressed in + * Action Scheduler 3.0.0, where properties and property names were aligned for better + * inheritance. To maintain backward compatibility with scheduled serialized and stored + * prior to 3.0, we need to correctly map the old property names. + */ + public function __wakeup() { + parent::__wakeup(); + if ( $this->first_timestamp > 0 ) { + $this->first_date = as_get_datetime_object( $this->first_timestamp ); + } else { + $this->first_date = $this->get_date(); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php new file mode 100644 index 0000000..b7826b4 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php @@ -0,0 +1,89 @@ +scheduled_date + * + * @var int + */ + protected $scheduled_timestamp = null; + + /** + * Construct. + * + * @param DateTime $date The date & time to run the action. + */ + public function __construct( DateTime $date ) { + $this->scheduled_date = $date; + } + + /** + * Check if a schedule should recur. + * + * @return bool + */ + abstract public function is_recurring(); + + /** + * Calculate when the next instance of this schedule would run based on a given date & time. + * + * @param DateTime $after Start timestamp. + * @return DateTime + */ + abstract protected function calculate_next( DateTime $after ); + + /** + * Get the next date & time when this schedule should run after a given date & time. + * + * @param DateTime $after Start timestamp. + * @return DateTime|null + */ + public function get_next( DateTime $after ) { + $after = clone $after; + if ( $after > $this->scheduled_date ) { + $after = $this->calculate_next( $after ); + return $after; + } + return clone $this->scheduled_date; + } + + /** + * Get the date & time the schedule is set to run. + * + * @return DateTime|null + */ + public function get_date() { + return $this->scheduled_date; + } + + /** + * For PHP 5.2 compat, because DateTime objects can't be serialized + * + * @return array + */ + public function __sleep() { + $this->scheduled_timestamp = $this->scheduled_date->getTimestamp(); + return array( + 'scheduled_timestamp', + ); + } + + /** + * Wakeup. + */ + public function __wakeup() { + $this->scheduled_date = as_get_datetime_object( $this->scheduled_timestamp ); + unset( $this->scheduled_timestamp ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php new file mode 100644 index 0000000..69817fe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php @@ -0,0 +1,187 @@ +tables as $table ) { + $wpdb->tables[] = $table; + $name = $this->get_full_table_name( $table ); + $wpdb->$table = $name; + } + + // create the tables. + if ( $this->schema_update_required() || $force_update ) { + foreach ( $this->tables as $table ) { + /** + * Allow custom processing before updating a table schema. + * + * @param string $table Name of table being updated. + * @param string $db_version Existing version of the table being updated. + */ + do_action( 'action_scheduler_before_schema_update', $table, $this->db_version ); + $this->update_table( $table ); + } + $this->mark_schema_update_complete(); + } + } + + /** + * Get table definition. + * + * @param string $table The name of the table. + * + * @return string The CREATE TABLE statement, suitable for passing to dbDelta + */ + abstract protected function get_table_definition( $table ); + + /** + * Determine if the database schema is out of date + * by comparing the integer found in $this->schema_version + * with the option set in the WordPress options table + * + * @return bool + */ + private function schema_update_required() { + $option_name = 'schema-' . static::class; + $this->db_version = get_option( $option_name, 0 ); + + // Check for schema option stored by the Action Scheduler Custom Tables plugin in case site has migrated from that plugin with an older schema. + if ( 0 === $this->db_version ) { + + $plugin_option_name = 'schema-'; + + switch ( static::class ) { + case 'ActionScheduler_StoreSchema': + $plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Store_Table_Maker'; + break; + case 'ActionScheduler_LoggerSchema': + $plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Logger_Table_Maker'; + break; + } + + $this->db_version = get_option( $plugin_option_name, 0 ); + + delete_option( $plugin_option_name ); + } + + return version_compare( $this->db_version, $this->schema_version, '<' ); + } + + /** + * Update the option in WordPress to indicate that + * our schema is now up to date + * + * @return void + */ + private function mark_schema_update_complete() { + $option_name = 'schema-' . static::class; + + // work around race conditions and ensure that our option updates. + $value_to_save = (string) $this->schema_version . '.0.' . time(); + + update_option( $option_name, $value_to_save ); + } + + /** + * Update the schema for the given table + * + * @param string $table The name of the table to update. + * + * @return void + */ + private function update_table( $table ) { + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + $definition = $this->get_table_definition( $table ); + if ( $definition ) { + $updated = dbDelta( $definition ); + foreach ( $updated as $updated_table => $update_description ) { + if ( strpos( $update_description, 'Created table' ) === 0 ) { + do_action( 'action_scheduler/created_table', $updated_table, $table ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + } + } + } + + /** + * Get full table name. + * + * @param string $table Table name. + * + * @return string The full name of the table, including the + * table prefix for the current blog + */ + protected function get_full_table_name( $table ) { + return $GLOBALS['wpdb']->prefix . $table; + } + + /** + * Confirms that all of the tables registered by this schema class have been created. + * + * @return bool + */ + public function tables_exist() { + global $wpdb; + + $tables_exist = true; + + foreach ( $this->tables as $table_name ) { + $table_name = $wpdb->prefix . $table_name; + $pattern = str_replace( '_', '\\_', $table_name ); + $existing_table = $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $pattern ) ); + + if ( $existing_table !== $table_name ) { + $tables_exist = false; + break; + } + } + + return $tables_exist; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.php new file mode 100644 index 0000000..7280207 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.php @@ -0,0 +1,74 @@ +get_expiration( $lock_type ) >= time() ); + } + + /** + * Set a lock. + * + * To prevent race conditions, implementations should avoid setting the lock if the lock is already held. + * + * @param string $lock_type A string to identify different lock types. + * @return bool + */ + abstract public function set( $lock_type ); + + /** + * If a lock is set, return the timestamp it was set to expiry. + * + * @param string $lock_type A string to identify different lock types. + * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire. + */ + abstract public function get_expiration( $lock_type ); + + /** + * Get the amount of time to set for a given lock. 60 seconds by default. + * + * @param string $lock_type A string to identify different lock types. + * @return int + */ + protected function get_duration( $lock_type ) { + return apply_filters( 'action_scheduler_lock_duration', self::$lock_duration, $lock_type ); + } + + /** + * Get instance. + * + * @return ActionScheduler_Lock + */ + public static function instance() { + if ( empty( self::$locker ) ) { + $class = apply_filters( 'action_scheduler_lock_class', 'ActionScheduler_OptionLock' ); + self::$locker = new $class(); + } + return self::$locker; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.php new file mode 100644 index 0000000..94ee2a9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.php @@ -0,0 +1,258 @@ +hook_stored_action(); + add_action( 'action_scheduler_canceled_action', array( $this, 'log_canceled_action' ), 10, 1 ); + add_action( 'action_scheduler_begin_execute', array( $this, 'log_started_action' ), 10, 2 ); + add_action( 'action_scheduler_after_execute', array( $this, 'log_completed_action' ), 10, 3 ); + add_action( 'action_scheduler_failed_execution', array( $this, 'log_failed_action' ), 10, 3 ); + add_action( 'action_scheduler_failed_action', array( $this, 'log_timed_out_action' ), 10, 2 ); + add_action( 'action_scheduler_unexpected_shutdown', array( $this, 'log_unexpected_shutdown' ), 10, 2 ); + add_action( 'action_scheduler_reset_action', array( $this, 'log_reset_action' ), 10, 1 ); + add_action( 'action_scheduler_execution_ignored', array( $this, 'log_ignored_action' ), 10, 2 ); + add_action( 'action_scheduler_failed_fetch_action', array( $this, 'log_failed_fetch_action' ), 10, 2 ); + add_action( 'action_scheduler_failed_to_schedule_next_instance', array( $this, 'log_failed_schedule_next_instance' ), 10, 2 ); + add_action( 'action_scheduler_bulk_cancel_actions', array( $this, 'bulk_log_cancel_actions' ), 10, 1 ); + } + + /** + * Register callback for storing action. + */ + public function hook_stored_action() { + add_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) ); + } + + /** + * Unhook callback for storing action. + */ + public function unhook_stored_action() { + remove_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) ); + } + + /** + * Log action stored. + * + * @param int $action_id Action ID. + */ + public function log_stored_action( $action_id ) { + $this->log( $action_id, __( 'action created', 'action-scheduler' ) ); + } + + /** + * Log action cancellation. + * + * @param int $action_id Action ID. + */ + public function log_canceled_action( $action_id ) { + $this->log( $action_id, __( 'action canceled', 'action-scheduler' ) ); + } + + /** + * Log action start. + * + * @param int $action_id Action ID. + * @param string $context Action execution context. + */ + public function log_started_action( $action_id, $context = '' ) { + if ( ! empty( $context ) ) { + /* translators: %s: context */ + $message = sprintf( __( 'action started via %s', 'action-scheduler' ), $context ); + } else { + $message = __( 'action started', 'action-scheduler' ); + } + $this->log( $action_id, $message ); + } + + /** + * Log action completion. + * + * @param int $action_id Action ID. + * @param null|ActionScheduler_Action $action Action. + * @param string $context Action execution context. + */ + public function log_completed_action( $action_id, $action = null, $context = '' ) { + if ( ! empty( $context ) ) { + /* translators: %s: context */ + $message = sprintf( __( 'action complete via %s', 'action-scheduler' ), $context ); + } else { + $message = __( 'action complete', 'action-scheduler' ); + } + $this->log( $action_id, $message ); + } + + /** + * Log action failure. + * + * @param int $action_id Action ID. + * @param Exception $exception Exception. + * @param string $context Action execution context. + */ + public function log_failed_action( $action_id, Exception $exception, $context = '' ) { + if ( ! empty( $context ) ) { + /* translators: 1: context 2: exception message */ + $message = sprintf( __( 'action failed via %1$s: %2$s', 'action-scheduler' ), $context, $exception->getMessage() ); + } else { + /* translators: %s: exception message */ + $message = sprintf( __( 'action failed: %s', 'action-scheduler' ), $exception->getMessage() ); + } + $this->log( $action_id, $message ); + } + + /** + * Log action timeout. + * + * @param int $action_id Action ID. + * @param string $timeout Timeout. + */ + public function log_timed_out_action( $action_id, $timeout ) { + /* translators: %s: amount of time */ + $this->log( $action_id, sprintf( __( 'action marked as failed after %s seconds. Unknown error occurred. Check server, PHP and database error logs to diagnose cause.', 'action-scheduler' ), $timeout ) ); + } + + /** + * Log unexpected shutdown. + * + * @param int $action_id Action ID. + * @param mixed[] $error Error. + */ + public function log_unexpected_shutdown( $action_id, $error ) { + if ( ! empty( $error ) ) { + /* translators: 1: error message 2: filename 3: line */ + $this->log( $action_id, sprintf( __( 'unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler' ), $error['message'], $error['file'], $error['line'] ) ); + } + } + + /** + * Log action reset. + * + * @param int $action_id Action ID. + */ + public function log_reset_action( $action_id ) { + $this->log( $action_id, __( 'action reset', 'action-scheduler' ) ); + } + + /** + * Log ignored action. + * + * @param int $action_id Action ID. + * @param string $context Action execution context. + */ + public function log_ignored_action( $action_id, $context = '' ) { + if ( ! empty( $context ) ) { + /* translators: %s: context */ + $message = sprintf( __( 'action ignored via %s', 'action-scheduler' ), $context ); + } else { + $message = __( 'action ignored', 'action-scheduler' ); + } + $this->log( $action_id, $message ); + } + + /** + * Log the failure of fetching the action. + * + * @param string $action_id Action ID. + * @param null|Exception $exception The exception which occurred when fetching the action. NULL by default for backward compatibility. + */ + public function log_failed_fetch_action( $action_id, ?Exception $exception = null ) { + + if ( ! is_null( $exception ) ) { + /* translators: %s: exception message */ + $log_message = sprintf( __( 'There was a failure fetching this action: %s', 'action-scheduler' ), $exception->getMessage() ); + } else { + $log_message = __( 'There was a failure fetching this action', 'action-scheduler' ); + } + + $this->log( $action_id, $log_message ); + } + + /** + * Log the failure of scheduling the action's next instance. + * + * @param int $action_id Action ID. + * @param Exception $exception Exception object. + */ + public function log_failed_schedule_next_instance( $action_id, Exception $exception ) { + /* translators: %s: exception message */ + $this->log( $action_id, sprintf( __( 'There was a failure scheduling the next instance of this action: %s', 'action-scheduler' ), $exception->getMessage() ) ); + } + + /** + * Bulk add cancel action log entries. + * + * Implemented here for backward compatibility. Should be implemented in parent loggers + * for more performant bulk logging. + * + * @param array $action_ids List of action ID. + */ + public function bulk_log_cancel_actions( $action_ids ) { + if ( empty( $action_ids ) ) { + return; + } + + foreach ( $action_ids as $action_id ) { + $this->log_canceled_action( $action_id ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.php new file mode 100644 index 0000000..bf6bc42 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.php @@ -0,0 +1,506 @@ + null, + 'status' => self::STATUS_PENDING, + 'group' => '', + ) + ); + + // These params are fixed for this method. + $params['hook'] = $hook; + $params['orderby'] = 'date'; + $params['per_page'] = 1; + + if ( ! empty( $params['status'] ) ) { + if ( self::STATUS_PENDING === $params['status'] ) { + $params['order'] = 'ASC'; // Find the next action that matches. + } else { + $params['order'] = 'DESC'; // Find the most recent action that matches. + } + } + + $results = $this->query_actions( $params ); + + return empty( $results ) ? null : $results[0]; + } + + /** + * Query for action count or list of action IDs. + * + * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status. + * + * @param array $query { + * Query filtering options. + * + * @type string $hook The name of the actions. Optional. + * @type string|array $status The status or statuses of the actions. Optional. + * @type array $args The args array of the actions. Optional. + * @type DateTime $date The scheduled date of the action. Used in UTC timezone. Optional. + * @type string $date_compare Operator for selecting by $date param. Accepted values are '!=', '>', '>=', '<', '<=', '='. Defaults to '<='. + * @type DateTime $modified The last modified date of the action. Used in UTC timezone. Optional. + * @type string $modified_compare Operator for comparing $modified param. Accepted values are '!=', '>', '>=', '<', '<=', '='. Defaults to '<='. + * @type string $group The group the action belongs to. Optional. + * @type bool|int $claimed TRUE to find claimed actions, FALSE to find unclaimed actions, an int to find a specific claim ID. Optional. + * @type int $per_page Number of results to return. Defaults to 5. + * @type int $offset The query pagination offset. Defaults to 0. + * @type int $orderby Accepted values are 'hook', 'group', 'modified', 'date' or 'none'. Defaults to 'date'. + * @type string $order Accepted values are 'ASC' or 'DESC'. Defaults to 'ASC'. + * } + * @param string $query_type Whether to select or count the results. Default, select. + * + * @return string|array|null The IDs of actions matching the query. Null on failure. + */ + abstract public function query_actions( $query = array(), $query_type = 'select' ); + + /** + * Run query to get a single action ID. + * + * @since 3.3.0 + * + * @see ActionScheduler_Store::query_actions for $query arg usage but 'per_page' and 'offset' can't be used. + * + * @param array $query Query parameters. + * + * @return int|null + */ + public function query_action( $query ) { + $query['per_page'] = 1; + $query['offset'] = 0; + $results = $this->query_actions( $query ); + + if ( empty( $results ) ) { + return null; + } else { + return (int) $results[0]; + } + } + + /** + * Get a count of all actions in the store, grouped by status + * + * @return array + */ + abstract public function action_counts(); + + /** + * Get additional action counts. + * + * - add past-due actions + * + * @return array + */ + public function extra_action_counts() { + $extra_actions = array(); + + $pastdue_action_counts = (int) $this->query_actions( + array( + 'status' => self::STATUS_PENDING, + 'date' => as_get_datetime_object(), + ), + 'count' + ); + + if ( $pastdue_action_counts ) { + $extra_actions['past-due'] = $pastdue_action_counts; + } + + /** + * Allows 3rd party code to add extra action counts (used in filters in the list table). + * + * @since 3.5.0 + * @param $extra_actions array Array with format action_count_identifier => action count. + */ + return apply_filters( 'action_scheduler_extra_action_counts', $extra_actions ); + } + + /** + * Cancel action. + * + * @param string $action_id Action ID. + */ + abstract public function cancel_action( $action_id ); + + /** + * Delete action. + * + * @param string $action_id Action ID. + */ + abstract public function delete_action( $action_id ); + + /** + * Get action's schedule or run timestamp. + * + * @param string $action_id Action ID. + * + * @return DateTime The date the action is schedule to run, or the date that it ran. + */ + abstract public function get_date( $action_id ); + + + /** + * Make a claim. + * + * @param int $max_actions Maximum number of actions to claim. + * @param DateTime|null $before_date Claim only actions schedule before the given date. Defaults to now. + * @param array $hooks Claim only actions with a hook or hooks. + * @param string $group Claim only actions in the given group. + * + * @return ActionScheduler_ActionClaim + */ + abstract public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ); + + /** + * Get claim count. + * + * @return int + */ + abstract public function get_claim_count(); + + /** + * Release the claim. + * + * @param ActionScheduler_ActionClaim $claim Claim object. + */ + abstract public function release_claim( ActionScheduler_ActionClaim $claim ); + + /** + * Un-claim the action. + * + * @param string $action_id Action ID. + */ + abstract public function unclaim_action( $action_id ); + + /** + * Mark action as failed. + * + * @param string $action_id Action ID. + */ + abstract public function mark_failure( $action_id ); + + /** + * Log action's execution. + * + * @param string $action_id Actoin ID. + */ + abstract public function log_execution( $action_id ); + + /** + * Mark action as complete. + * + * @param string $action_id Action ID. + */ + abstract public function mark_complete( $action_id ); + + /** + * Get action's status. + * + * @param string $action_id Action ID. + * @return string + */ + abstract public function get_status( $action_id ); + + /** + * Get action's claim ID. + * + * @param string $action_id Action ID. + * @return mixed + */ + abstract public function get_claim_id( $action_id ); + + /** + * Find actions by claim ID. + * + * @param string $claim_id Claim ID. + * @return array + */ + abstract public function find_actions_by_claim_id( $claim_id ); + + /** + * Validate SQL operator. + * + * @param string $comparison_operator Operator. + * @return string + */ + protected function validate_sql_comparator( $comparison_operator ) { + if ( in_array( $comparison_operator, array( '!=', '>', '>=', '<', '<=', '=' ), true ) ) { + return $comparison_operator; + } + + return '='; + } + + /** + * Get the time MySQL formatted date/time string for an action's (next) scheduled date. + * + * @param ActionScheduler_Action $action Action. + * @param null|DateTime $scheduled_date Action's schedule date (optional). + * @return string + */ + protected function get_scheduled_date_string( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) { + $next = is_null( $scheduled_date ) ? $action->get_schedule()->get_date() : $scheduled_date; + + if ( ! $next ) { + $next = date_create(); + } + + $next->setTimezone( new DateTimeZone( 'UTC' ) ); + + return $next->format( 'Y-m-d H:i:s' ); + } + + /** + * Get the time MySQL formatted date/time string for an action's (next) scheduled date. + * + * @param ActionScheduler_Action|null $action Action. + * @param null|DateTime $scheduled_date Action's scheduled date (optional). + * @return string + */ + protected function get_scheduled_date_string_local( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) { + $next = is_null( $scheduled_date ) ? $action->get_schedule()->get_date() : $scheduled_date; + + if ( ! $next ) { + $next = date_create(); + } + + ActionScheduler_TimezoneHelper::set_local_timezone( $next ); + return $next->format( 'Y-m-d H:i:s' ); + } + + /** + * Validate that we could decode action arguments. + * + * @param mixed $args The decoded arguments. + * @param int $action_id The action ID. + * + * @throws ActionScheduler_InvalidActionException When the decoded arguments are invalid. + */ + protected function validate_args( $args, $action_id ) { + // Ensure we have an array of args. + if ( ! is_array( $args ) ) { + throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id ); + } + + // Validate JSON decoding if possible. + if ( function_exists( 'json_last_error' ) && JSON_ERROR_NONE !== json_last_error() ) { + throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id, $args ); + } + } + + /** + * Validate a ActionScheduler_Schedule object. + * + * @param mixed $schedule The unserialized ActionScheduler_Schedule object. + * @param int $action_id The action ID. + * + * @throws ActionScheduler_InvalidActionException When the schedule is invalid. + */ + protected function validate_schedule( $schedule, $action_id ) { + if ( empty( $schedule ) || ! is_a( $schedule, 'ActionScheduler_Schedule' ) ) { + throw ActionScheduler_InvalidActionException::from_schedule( $action_id, $schedule ); + } + } + + /** + * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4. + * + * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However, + * with custom tables, we use an indexed VARCHAR column instead. + * + * @param ActionScheduler_Action $action Action to be validated. + * @throws InvalidArgumentException When json encoded args is too long. + */ + protected function validate_action( ActionScheduler_Action $action ) { + if ( strlen( wp_json_encode( $action->get_args() ) ) > static::$max_args_length ) { + // translators: %d is a number (maximum length of action arguments). + throw new InvalidArgumentException( sprintf( __( 'ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler' ), static::$max_args_length ) ); + } + } + + /** + * Cancel pending actions by hook. + * + * @since 3.0.0 + * + * @param string $hook Hook name. + * + * @return void + */ + public function cancel_actions_by_hook( $hook ) { + $action_ids = true; + while ( ! empty( $action_ids ) ) { + $action_ids = $this->query_actions( + array( + 'hook' => $hook, + 'status' => self::STATUS_PENDING, + 'per_page' => 1000, + 'orderby' => 'none', + ) + ); + + $this->bulk_cancel_actions( $action_ids ); + } + } + + /** + * Cancel pending actions by group. + * + * @since 3.0.0 + * + * @param string $group Group slug. + * + * @return void + */ + public function cancel_actions_by_group( $group ) { + $action_ids = true; + while ( ! empty( $action_ids ) ) { + $action_ids = $this->query_actions( + array( + 'group' => $group, + 'status' => self::STATUS_PENDING, + 'per_page' => 1000, + 'orderby' => 'none', + ) + ); + + $this->bulk_cancel_actions( $action_ids ); + } + } + + /** + * Cancel a set of action IDs. + * + * @since 3.0.0 + * + * @param int[] $action_ids List of action IDs. + * + * @return void + */ + private function bulk_cancel_actions( $action_ids ) { + foreach ( $action_ids as $action_id ) { + $this->cancel_action( $action_id ); + } + + do_action( 'action_scheduler_bulk_cancel_actions', $action_ids ); + } + + /** + * Get status labels. + * + * @return array + */ + public function get_status_labels() { + return array( + self::STATUS_COMPLETE => __( 'Complete', 'action-scheduler' ), + self::STATUS_PENDING => __( 'Pending', 'action-scheduler' ), + self::STATUS_RUNNING => __( 'In-progress', 'action-scheduler' ), + self::STATUS_FAILED => __( 'Failed', 'action-scheduler' ), + self::STATUS_CANCELED => __( 'Canceled', 'action-scheduler' ), + ); + } + + /** + * Check if there are any pending scheduled actions due to run. + * + * @return string + */ + public function has_pending_actions_due() { + $pending_actions = $this->query_actions( + array( + 'per_page' => 1, + 'date' => as_get_datetime_object(), + 'status' => self::STATUS_PENDING, + 'orderby' => 'none', + ), + 'count' + ); + + return ! empty( $pending_actions ); + } + + /** + * Callable initialization function optionally overridden in derived classes. + */ + public function init() {} + + /** + * Callable function to mark an action as migrated optionally overridden in derived classes. + * + * @param int $action_id Action ID. + */ + public function mark_migrated( $action_id ) {} + + /** + * Get instance. + * + * @return ActionScheduler_Store + */ + public static function instance() { + if ( empty( self::$store ) ) { + $class = apply_filters( 'action_scheduler_store_class', self::DEFAULT_CLASS ); + self::$store = new $class(); + } + return self::$store; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php new file mode 100644 index 0000000..63813eb --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php @@ -0,0 +1,162 @@ +format( 'U' ) ); + } + + if ( get_option( 'timezone_string' ) ) { + $date->setTimezone( new DateTimeZone( self::get_local_timezone_string() ) ); + } else { + $date->setUtcOffset( self::get_local_timezone_offset() ); + } + + return $date; + } + + /** + * Helper to retrieve the timezone string for a site until a WP core method exists + * (see https://core.trac.wordpress.org/ticket/24730). + * + * Adapted from wc_timezone_string() and https://secure.php.net/manual/en/function.timezone-name-from-abbr.php#89155. + * + * If no timezone string is set, and its not possible to match the UTC offset set for the site to a timezone + * string, then an empty string will be returned, and the UTC offset should be used to set a DateTime's + * timezone. + * + * @since 2.1.0 + * @param bool $reset Unused. + * @return string PHP timezone string for the site or empty if no timezone string is available. + */ + protected static function get_local_timezone_string( $reset = false ) { + // If site timezone string exists, return it. + $timezone = get_option( 'timezone_string' ); + if ( $timezone ) { + return $timezone; + } + + // Get UTC offset, if it isn't set then return UTC. + $utc_offset = intval( get_option( 'gmt_offset', 0 ) ); + if ( 0 === $utc_offset ) { + return 'UTC'; + } + + // Adjust UTC offset from hours to seconds. + $utc_offset *= 3600; + + // Attempt to guess the timezone string from the UTC offset. + $timezone = timezone_name_from_abbr( '', $utc_offset ); + if ( $timezone ) { + return $timezone; + } + + // Last try, guess timezone string manually. + foreach ( timezone_abbreviations_list() as $abbr ) { + foreach ( $abbr as $city ) { + if ( (bool) date( 'I' ) === (bool) $city['dst'] && $city['timezone_id'] && intval( $city['offset'] ) === $utc_offset ) { // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date -- we are actually interested in the runtime timezone. + return $city['timezone_id']; + } + } + } + + // No timezone string. + return ''; + } + + /** + * Get timezone offset in seconds. + * + * @since 2.1.0 + * @return float + */ + protected static function get_local_timezone_offset() { + $timezone = get_option( 'timezone_string' ); + + if ( $timezone ) { + $timezone_object = new DateTimeZone( $timezone ); + return $timezone_object->getOffset( new DateTime( 'now' ) ); + } else { + return floatval( get_option( 'gmt_offset', 0 ) ) * HOUR_IN_SECONDS; + } + } + + /** + * Get local timezone. + * + * @param bool $reset Toggle to discard stored value. + * @deprecated 2.1.0 + */ + public static function get_local_timezone( $reset = false ) { + _deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' ); + if ( $reset ) { + self::$local_timezone = null; + } + if ( ! isset( self::$local_timezone ) ) { + $tzstring = get_option( 'timezone_string' ); + + if ( empty( $tzstring ) ) { + $gmt_offset = absint( get_option( 'gmt_offset' ) ); + if ( 0 === $gmt_offset ) { + $tzstring = 'UTC'; + } else { + $gmt_offset *= HOUR_IN_SECONDS; + $tzstring = timezone_name_from_abbr( '', $gmt_offset, 1 ); + + // If there's no timezone string, try again with no DST. + if ( false === $tzstring ) { + $tzstring = timezone_name_from_abbr( '', $gmt_offset, 0 ); + } + + // Try mapping to the first abbreviation we can find. + if ( false === $tzstring ) { + $is_dst = date( 'I' ); // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date -- we are actually interested in the runtime timezone. + foreach ( timezone_abbreviations_list() as $abbr ) { + foreach ( $abbr as $city ) { + if ( $city['dst'] === $is_dst && $city['offset'] === $gmt_offset ) { + // If there's no valid timezone ID, keep looking. + if ( is_null( $city['timezone_id'] ) ) { + continue; + } + + $tzstring = $city['timezone_id']; + break 2; + } + } + } + } + + // If we still have no valid string, then fall back to UTC. + if ( false === $tzstring ) { + $tzstring = 'UTC'; + } + } + } + + self::$local_timezone = new DateTimeZone( $tzstring ); + } + return self::$local_timezone; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.php new file mode 100644 index 0000000..847c109 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.php @@ -0,0 +1,83 @@ + + */ + protected $assoc_args; + + /** + * Construct. + * + * @param string[] $args Positional arguments. + * @param array $assoc_args Keyed arguments. + * @throws \Exception When loading a CLI command file outside of WP CLI context. + */ + public function __construct( array $args, array $assoc_args ) { + if ( ! defined( 'WP_CLI' ) || ! constant( 'WP_CLI' ) ) { + /* translators: %s php class name */ + throw new \Exception( sprintf( __( 'The %s class can only be run within WP CLI.', 'action-scheduler' ), get_class( $this ) ) ); + } + + $this->args = $args; + $this->assoc_args = $assoc_args; + } + + /** + * Execute command. + */ + abstract public function execute(); + + /** + * Get the scheduled date in a human friendly format. + * + * @see ActionScheduler_ListTable::get_schedule_display_string() + * @param ActionScheduler_Schedule $schedule Schedule. + * @return string + */ + protected function get_schedule_display_string( ActionScheduler_Schedule $schedule ) { + + $schedule_display_string = ''; + + if ( ! $schedule->get_date() ) { + return '0000-00-00 00:00:00'; + } + + $next_timestamp = $schedule->get_date()->getTimestamp(); + + $schedule_display_string .= $schedule->get_date()->format( static::DATE_FORMAT ); + + return $schedule_display_string; + } + + /** + * Transforms arguments with '__' from CSV into expected arrays. + * + * @see \WP_CLI\CommandWithDBObject::process_csv_arguments_to_arrays() + * @link https://github.com/wp-cli/entity-command/blob/c270cc9a2367cb8f5845f26a6b5e203397c91392/src/WP_CLI/CommandWithDBObject.php#L99 + * @return void + */ + protected function process_csv_arguments_to_arrays() { + foreach ( $this->assoc_args as $k => $v ) { + if ( false !== strpos( $k, '__' ) ) { + $this->assoc_args[ $k ] = explode( ',', $v ); + } + } + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.php new file mode 100644 index 0000000..1613efa --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.php @@ -0,0 +1,191 @@ + + */ + protected $args = array(); + + /** + * Action's schedule. + * + * @var ActionScheduler_Schedule + */ + protected $schedule = null; + + /** + * Action's group. + * + * @var string + */ + protected $group = ''; + + /** + * Priorities are conceptually similar to those used for regular WordPress actions. + * Like those, a lower priority takes precedence over a higher priority and the default + * is 10. + * + * Unlike regular WordPress actions, the priority of a scheduled action is strictly an + * integer and should be kept within the bounds 0-255 (anything outside the bounds will + * be brought back into the acceptable range). + * + * @var int + */ + protected $priority = 10; + + /** + * Construct. + * + * @param string $hook Action's hook. + * @param mixed[] $args Action's arguments. + * @param null|ActionScheduler_Schedule $schedule Action's schedule. + * @param string $group Action's group. + */ + public function __construct( $hook, array $args = array(), ?ActionScheduler_Schedule $schedule = null, $group = '' ) { + $schedule = empty( $schedule ) ? new ActionScheduler_NullSchedule() : $schedule; + $this->set_hook( $hook ); + $this->set_schedule( $schedule ); + $this->set_args( $args ); + $this->set_group( $group ); + } + + /** + * Executes the action. + * + * If no callbacks are registered, an exception will be thrown and the action will not be + * fired. This is useful to help detect cases where the code responsible for setting up + * a scheduled action no longer exists. + * + * @throws Exception If no callbacks are registered for this action. + */ + public function execute() { + $hook = $this->get_hook(); + + if ( ! has_action( $hook ) ) { + throw new Exception( + sprintf( + /* translators: 1: action hook. */ + __( 'Scheduled action for %1$s will not be executed as no callbacks are registered.', 'action-scheduler' ), + $hook + ) + ); + } + + do_action_ref_array( $hook, array_values( $this->get_args() ) ); + } + + /** + * Set action's hook. + * + * @param string $hook Action's hook. + */ + protected function set_hook( $hook ) { + $this->hook = $hook; + } + + /** + * Get action's hook. + */ + public function get_hook() { + return $this->hook; + } + + /** + * Set action's schedule. + * + * @param ActionScheduler_Schedule $schedule Action's schedule. + */ + protected function set_schedule( ActionScheduler_Schedule $schedule ) { + $this->schedule = $schedule; + } + + /** + * Action's schedule. + * + * @return ActionScheduler_Schedule + */ + public function get_schedule() { + return $this->schedule; + } + + /** + * Set action's args. + * + * @param mixed[] $args Action's arguments. + */ + protected function set_args( array $args ) { + $this->args = $args; + } + + /** + * Get action's args. + */ + public function get_args() { + return $this->args; + } + + /** + * Section action's group. + * + * @param string $group Action's group. + */ + protected function set_group( $group ) { + $this->group = $group; + } + + /** + * Action's group. + * + * @return string + */ + public function get_group() { + return $this->group; + } + + /** + * Action has not finished. + * + * @return bool + */ + public function is_finished() { + return false; + } + + /** + * Sets the priority of the action. + * + * @param int $priority Priority level (lower is higher priority). Should be in the range 0-255. + * + * @return void + */ + public function set_priority( $priority ) { + if ( $priority < 0 ) { + $priority = 0; + } elseif ( $priority > 255 ) { + $priority = 255; + } + + $this->priority = (int) $priority; + } + + /** + * Gets the action priority. + * + * @return int + */ + public function get_priority() { + return $this->priority; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php new file mode 100644 index 0000000..c600752 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php @@ -0,0 +1,25 @@ +set_schedule( new ActionScheduler_NullSchedule() ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php new file mode 100644 index 0000000..d4e8942 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php @@ -0,0 +1,21 @@ +set_schedule( new ActionScheduler_NullSchedule() ); + } + + /** + * Execute action. + */ + public function execute() { + // don't execute. + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php new file mode 100644 index 0000000..0976b06 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php @@ -0,0 +1,154 @@ +format( 'Y-m-d H:i:s' ); + ActionScheduler_TimezoneHelper::set_local_timezone( $date ); + $date_local = $date->format( 'Y-m-d H:i:s' ); + + /** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort + global $wpdb; + $wpdb->insert( + $wpdb->actionscheduler_logs, + array( + 'action_id' => $action_id, + 'message' => $message, + 'log_date_gmt' => $date_gmt, + 'log_date_local' => $date_local, + ), + array( '%d', '%s', '%s', '%s' ) + ); + + return $wpdb->insert_id; + } + + /** + * Retrieve an action log entry. + * + * @param int $entry_id Log entry ID. + * + * @return ActionScheduler_LogEntry + */ + public function get_entry( $entry_id ) { + /** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort + global $wpdb; + $entry = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_logs} WHERE log_id=%d", $entry_id ) ); + + return $this->create_entry_from_db_record( $entry ); + } + + /** + * Create an action log entry from a database record. + * + * @param object $record Log entry database record object. + * + * @return ActionScheduler_LogEntry + */ + private function create_entry_from_db_record( $record ) { + if ( empty( $record ) ) { + return new ActionScheduler_NullLogEntry(); + } + + if ( is_null( $record->log_date_gmt ) ) { + $date = as_get_datetime_object( ActionScheduler_StoreSchema::DEFAULT_DATE ); + } else { + $date = as_get_datetime_object( $record->log_date_gmt ); + } + + return new ActionScheduler_LogEntry( $record->action_id, $record->message, $date ); + } + + /** + * Retrieve an action's log entries from the database. + * + * @param int $action_id Action ID. + * + * @return ActionScheduler_LogEntry[] + */ + public function get_logs( $action_id ) { + /** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort + global $wpdb; + + $records = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_logs} WHERE action_id=%d", $action_id ) ); + + return array_map( array( $this, 'create_entry_from_db_record' ), $records ); + } + + /** + * Initialize the data store. + * + * @codeCoverageIgnore + */ + public function init() { + $table_maker = new ActionScheduler_LoggerSchema(); + $table_maker->init(); + $table_maker->register_tables(); + + parent::init(); + + add_action( 'action_scheduler_deleted_action', array( $this, 'clear_deleted_action_logs' ), 10, 1 ); + } + + /** + * Delete the action logs for an action. + * + * @param int $action_id Action ID. + */ + public function clear_deleted_action_logs( $action_id ) { + /** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort + global $wpdb; + $wpdb->delete( $wpdb->actionscheduler_logs, array( 'action_id' => $action_id ), array( '%d' ) ); + } + + /** + * Bulk add cancel action log entries. + * + * @param array $action_ids List of action ID. + */ + public function bulk_log_cancel_actions( $action_ids ) { + if ( empty( $action_ids ) ) { + return; + } + + /** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort + global $wpdb; + $date = as_get_datetime_object(); + $date_gmt = $date->format( 'Y-m-d H:i:s' ); + ActionScheduler_TimezoneHelper::set_local_timezone( $date ); + $date_local = $date->format( 'Y-m-d H:i:s' ); + $message = __( 'action canceled', 'action-scheduler' ); + $format = '(%d, ' . $wpdb->prepare( '%s, %s, %s', $message, $date_gmt, $date_local ) . ')'; + $sql_query = "INSERT {$wpdb->actionscheduler_logs} (action_id, message, log_date_gmt, log_date_local) VALUES "; + $value_rows = array(); + + foreach ( $action_ids as $action_id ) { + $value_rows[] = $wpdb->prepare( $format, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + $sql_query .= implode( ',', $value_rows ); + + $wpdb->query( $sql_query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php new file mode 100644 index 0000000..7840fe2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php @@ -0,0 +1,1342 @@ + '', + 'hooks' => '', + 'exclude-groups' => '', + ); + + /** + * Initialize the data store + * + * @codeCoverageIgnore + */ + public function init() { + $table_maker = new ActionScheduler_StoreSchema(); + $table_maker->init(); + $table_maker->register_tables(); + } + + /** + * Save an action, checks if this is a unique action before actually saving. + * + * @param ActionScheduler_Action $action Action object. + * @param DateTime|null $scheduled_date Optional schedule date. Default null. + * + * @return int Action ID. + * @throws RuntimeException Throws exception when saving the action fails. + */ + public function save_unique_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) { + return $this->save_action_to_db( $action, $scheduled_date, true ); + } + + /** + * Save an action. Can save duplicate action as well, prefer using `save_unique_action` instead. + * + * @param ActionScheduler_Action $action Action object. + * @param DateTime|null $scheduled_date Optional schedule date. Default null. + * + * @return int Action ID. + * @throws RuntimeException Throws exception when saving the action fails. + */ + public function save_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) { + return $this->save_action_to_db( $action, $scheduled_date, false ); + } + + /** + * Save an action. + * + * @param ActionScheduler_Action $action Action object. + * @param ?DateTime $date Optional schedule date. Default null. + * @param bool $unique Whether the action should be unique. + * + * @return int Action ID. + * @throws \RuntimeException Throws exception when saving the action fails. + */ + private function save_action_to_db( ActionScheduler_Action $action, ?DateTime $date = null, $unique = false ) { + global $wpdb; + + try { + $this->validate_action( $action ); + + $data = array( + 'hook' => $action->get_hook(), + 'status' => ( $action->is_finished() ? self::STATUS_COMPLETE : self::STATUS_PENDING ), + 'scheduled_date_gmt' => $this->get_scheduled_date_string( $action, $date ), + 'scheduled_date_local' => $this->get_scheduled_date_string_local( $action, $date ), + 'schedule' => serialize( $action->get_schedule() ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize + 'group_id' => current( $this->get_group_ids( $action->get_group() ) ), + 'priority' => $action->get_priority(), + ); + + $args = wp_json_encode( $action->get_args() ); + if ( strlen( $args ) <= static::$max_index_length ) { + $data['args'] = $args; + } else { + $data['args'] = $this->hash_args( $args ); + $data['extended_args'] = $args; + } + + $insert_sql = $this->build_insert_sql( $data, $unique ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- $insert_sql should be already prepared. + $wpdb->query( $insert_sql ); + $action_id = $wpdb->insert_id; + + if ( is_wp_error( $action_id ) ) { + throw new \RuntimeException( $action_id->get_error_message() ); + } elseif ( empty( $action_id ) ) { + if ( $unique ) { + return 0; + } + throw new \RuntimeException( $wpdb->last_error ? $wpdb->last_error : __( 'Database error.', 'action-scheduler' ) ); + } + + do_action( 'action_scheduler_stored_action', $action_id ); + + return $action_id; + } catch ( \Exception $e ) { + /* translators: %s: error message */ + throw new \RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 ); + } + } + + /** + * Helper function to build insert query. + * + * @param array $data Row data for action. + * @param bool $unique Whether the action should be unique. + * + * @return string Insert query. + */ + private function build_insert_sql( array $data, $unique ) { + global $wpdb; + + $columns = array_keys( $data ); + $values = array_values( $data ); + $placeholders = array_map( array( $this, 'get_placeholder_for_column' ), $columns ); + + $table_name = ! empty( $wpdb->actionscheduler_actions ) ? $wpdb->actionscheduler_actions : $wpdb->prefix . 'actionscheduler_actions'; + + $column_sql = '`' . implode( '`, `', $columns ) . '`'; + $placeholder_sql = implode( ', ', $placeholders ); + $where_clause = $this->build_where_clause_for_insert( $data, $table_name, $unique ); + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare -- $column_sql and $where_clause are already prepared. $placeholder_sql is hardcoded. + $insert_query = $wpdb->prepare( + " +INSERT INTO $table_name ( $column_sql ) +SELECT $placeholder_sql FROM DUAL +WHERE ( $where_clause ) IS NULL", + $values + ); + // phpcs:enable + + return $insert_query; + } + + /** + * Helper method to build where clause for action insert statement. + * + * @param array $data Row data for action. + * @param string $table_name Action table name. + * @param bool $unique Where action should be unique. + * + * @return string Where clause to be used with insert. + */ + private function build_where_clause_for_insert( $data, $table_name, $unique ) { + global $wpdb; + + if ( ! $unique ) { + return 'SELECT NULL FROM DUAL'; + } + + $pending_statuses = array( + ActionScheduler_Store::STATUS_PENDING, + ActionScheduler_Store::STATUS_RUNNING, + ); + $pending_status_placeholders = implode( ', ', array_fill( 0, count( $pending_statuses ), '%s' ) ); + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- $pending_status_placeholders is hardcoded. + $where_clause = $wpdb->prepare( + " +SELECT action_id FROM $table_name +WHERE status IN ( $pending_status_placeholders ) +AND hook = %s +AND `group_id` = %d +", + array_merge( + $pending_statuses, + array( + $data['hook'], + $data['group_id'], + ) + ) + ); + // phpcs:enable + + return "$where_clause" . ' LIMIT 1'; + } + + /** + * Helper method to get $wpdb->prepare placeholder for a given column name. + * + * @param string $column_name Name of column in actions table. + * + * @return string Placeholder to use for given column. + */ + private function get_placeholder_for_column( $column_name ) { + $string_columns = array( + 'hook', + 'status', + 'scheduled_date_gmt', + 'scheduled_date_local', + 'args', + 'schedule', + 'last_attempt_gmt', + 'last_attempt_local', + 'extended_args', + ); + + return in_array( $column_name, $string_columns, true ) ? '%s' : '%d'; + } + + /** + * Generate a hash from json_encoded $args using MD5 as this isn't for security. + * + * @param string $args JSON encoded action args. + * @return string + */ + protected function hash_args( $args ) { + return md5( $args ); + } + + /** + * Get action args query param value from action args. + * + * @param array $args Action args. + * @return string + */ + protected function get_args_for_query( $args ) { + $encoded = wp_json_encode( $args ); + if ( strlen( $encoded ) <= static::$max_index_length ) { + return $encoded; + } + return $this->hash_args( $encoded ); + } + /** + * Get a group's ID based on its name/slug. + * + * @param string|array $slugs The string name of a group, or names for several groups. + * @param bool $create_if_not_exists Whether to create the group if it does not already exist. Default, true - create the group. + * + * @return array The group IDs, if they exist or were successfully created. May be empty. + */ + protected function get_group_ids( $slugs, $create_if_not_exists = true ) { + $slugs = (array) $slugs; + $group_ids = array(); + + if ( empty( $slugs ) ) { + return array(); + } + + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + foreach ( $slugs as $slug ) { + $group_id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT group_id FROM {$wpdb->actionscheduler_groups} WHERE slug=%s", $slug ) ); + + if ( empty( $group_id ) && $create_if_not_exists ) { + $group_id = $this->create_group( $slug ); + } + + if ( $group_id ) { + $group_ids[] = $group_id; + } + } + + return $group_ids; + } + + /** + * Create an action group. + * + * @param string $slug Group slug. + * + * @return int Group ID. + */ + protected function create_group( $slug ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $wpdb->insert( $wpdb->actionscheduler_groups, array( 'slug' => $slug ) ); + + return (int) $wpdb->insert_id; + } + + /** + * Retrieve an action. + * + * @param int $action_id Action ID. + * + * @return ActionScheduler_Action + */ + public function fetch_action( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $data = $wpdb->get_row( + $wpdb->prepare( + "SELECT a.*, g.slug AS `group` FROM {$wpdb->actionscheduler_actions} a LEFT JOIN {$wpdb->actionscheduler_groups} g ON a.group_id=g.group_id WHERE a.action_id=%d", + $action_id + ) + ); + + if ( empty( $data ) ) { + return $this->get_null_action(); + } + + if ( ! empty( $data->extended_args ) ) { + $data->args = $data->extended_args; + unset( $data->extended_args ); + } + + // Convert NULL dates to zero dates. + $date_fields = array( + 'scheduled_date_gmt', + 'scheduled_date_local', + 'last_attempt_gmt', + 'last_attempt_gmt', + ); + foreach ( $date_fields as $date_field ) { + if ( is_null( $data->$date_field ) ) { + $data->$date_field = ActionScheduler_StoreSchema::DEFAULT_DATE; + } + } + + try { + $action = $this->make_action_from_db_record( $data ); + } catch ( ActionScheduler_InvalidActionException $exception ) { + do_action( 'action_scheduler_failed_fetch_action', $action_id, $exception ); + return $this->get_null_action(); + } + + return $action; + } + + /** + * Create a null action. + * + * @return ActionScheduler_NullAction + */ + protected function get_null_action() { + return new ActionScheduler_NullAction(); + } + + /** + * Create an action from a database record. + * + * @param object $data Action database record. + * + * @return ActionScheduler_Action|ActionScheduler_CanceledAction|ActionScheduler_FinishedAction + */ + protected function make_action_from_db_record( $data ) { + + $hook = $data->hook; + $args = json_decode( $data->args, true ); + $schedule = unserialize( $data->schedule ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize + + $this->validate_args( $args, $data->action_id ); + $this->validate_schedule( $schedule, $data->action_id ); + + if ( empty( $schedule ) ) { + $schedule = new ActionScheduler_NullSchedule(); + } + $group = $data->group ? $data->group : ''; + + return ActionScheduler::factory()->get_stored_action( $data->status, $data->hook, $args, $schedule, $group, $data->priority ); + } + + /** + * Returns the SQL statement to query (or count) actions. + * + * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status. + * + * @param array $query Filtering options. + * @param string $select_or_count Whether the SQL should select and return the IDs or just the row count. + * + * @return string SQL statement already properly escaped. + * @throws \InvalidArgumentException If the query is invalid. + * @throws \RuntimeException When "unknown partial args matching value". + */ + protected function get_query_actions_sql( array $query, $select_or_count = 'select' ) { + + if ( ! in_array( $select_or_count, array( 'select', 'count' ), true ) ) { + throw new InvalidArgumentException( __( 'Invalid value for select or count parameter. Cannot query actions.', 'action-scheduler' ) ); + } + + $query = wp_parse_args( + $query, + array( + 'hook' => '', + 'args' => null, + 'partial_args_matching' => 'off', // can be 'like' or 'json'. + 'date' => null, + 'date_compare' => '<=', + 'modified' => null, + 'modified_compare' => '<=', + 'group' => '', + 'status' => '', + 'claimed' => null, + 'per_page' => 5, + 'offset' => 0, + 'orderby' => 'date', + 'order' => 'ASC', + ) + ); + + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $db_server_info = is_callable( array( $wpdb, 'db_server_info' ) ) ? $wpdb->db_server_info() : $wpdb->db_version(); + if ( false !== strpos( $db_server_info, 'MariaDB' ) ) { + $supports_json = version_compare( + PHP_VERSION_ID >= 80016 ? $wpdb->db_version() : preg_replace( '/[^0-9.].*/', '', str_replace( '5.5.5-', '', $db_server_info ) ), + '10.2', + '>=' + ); + } else { + $supports_json = version_compare( $wpdb->db_version(), '5.7', '>=' ); + } + + $sql = ( 'count' === $select_or_count ) ? 'SELECT count(a.action_id)' : 'SELECT a.action_id'; + $sql .= " FROM {$wpdb->actionscheduler_actions} a"; + $sql_params = array(); + + if ( ! empty( $query['group'] ) || 'group' === $query['orderby'] ) { + $sql .= " LEFT JOIN {$wpdb->actionscheduler_groups} g ON g.group_id=a.group_id"; + } + + $sql .= ' WHERE 1=1'; + + if ( ! empty( $query['group'] ) ) { + $sql .= ' AND g.slug=%s'; + $sql_params[] = $query['group']; + } + + if ( ! empty( $query['hook'] ) ) { + $sql .= ' AND a.hook=%s'; + $sql_params[] = $query['hook']; + } + + if ( ! is_null( $query['args'] ) ) { + switch ( $query['partial_args_matching'] ) { + case 'json': + if ( ! $supports_json ) { + throw new \RuntimeException( __( 'JSON partial matching not supported in your environment. Please check your MySQL/MariaDB version.', 'action-scheduler' ) ); + } + $supported_types = array( + 'integer' => '%d', + 'boolean' => '%s', + 'double' => '%f', + 'string' => '%s', + ); + foreach ( $query['args'] as $key => $value ) { + $value_type = gettype( $value ); + if ( 'boolean' === $value_type ) { + $value = $value ? 'true' : 'false'; + } + $placeholder = isset( $supported_types[ $value_type ] ) ? $supported_types[ $value_type ] : false; + if ( ! $placeholder ) { + throw new \RuntimeException( + sprintf( + /* translators: %s: provided value type */ + __( 'The value type for the JSON partial matching is not supported. Must be either integer, boolean, double or string. %s type provided.', 'action-scheduler' ), + $value_type + ) + ); + } + $sql .= ' AND JSON_EXTRACT(a.args, %s)=' . $placeholder; + $sql_params[] = '$.' . $key; + $sql_params[] = $value; + } + break; + case 'like': + foreach ( $query['args'] as $key => $value ) { + $sql .= ' AND a.args LIKE %s'; + $json_partial = $wpdb->esc_like( trim( wp_json_encode( array( $key => $value ) ), '{}' ) ); + $sql_params[] = "%{$json_partial}%"; + } + break; + case 'off': + $sql .= ' AND a.args=%s'; + $sql_params[] = $this->get_args_for_query( $query['args'] ); + break; + default: + throw new \RuntimeException( __( 'Unknown partial args matching value.', 'action-scheduler' ) ); + } + } + + if ( $query['status'] ) { + $statuses = (array) $query['status']; + $placeholders = array_fill( 0, count( $statuses ), '%s' ); + $sql .= ' AND a.status IN (' . join( ', ', $placeholders ) . ')'; + $sql_params = array_merge( $sql_params, array_values( $statuses ) ); + } + + if ( $query['date'] instanceof \DateTime ) { + $date = clone $query['date']; + $date->setTimezone( new \DateTimeZone( 'UTC' ) ); + $date_string = $date->format( 'Y-m-d H:i:s' ); + $comparator = $this->validate_sql_comparator( $query['date_compare'] ); + $sql .= " AND a.scheduled_date_gmt $comparator %s"; + $sql_params[] = $date_string; + } + + if ( $query['modified'] instanceof \DateTime ) { + $modified = clone $query['modified']; + $modified->setTimezone( new \DateTimeZone( 'UTC' ) ); + $date_string = $modified->format( 'Y-m-d H:i:s' ); + $comparator = $this->validate_sql_comparator( $query['modified_compare'] ); + $sql .= " AND a.last_attempt_gmt $comparator %s"; + $sql_params[] = $date_string; + } + + if ( true === $query['claimed'] ) { + $sql .= ' AND a.claim_id != 0'; + } elseif ( false === $query['claimed'] ) { + $sql .= ' AND a.claim_id = 0'; + } elseif ( ! is_null( $query['claimed'] ) ) { + $sql .= ' AND a.claim_id = %d'; + $sql_params[] = $query['claimed']; + } + + if ( ! empty( $query['search'] ) ) { + $sql .= ' AND (a.hook LIKE %s OR (a.extended_args IS NULL AND a.args LIKE %s) OR a.extended_args LIKE %s'; + for ( $i = 0; $i < 3; $i++ ) { + $sql_params[] = sprintf( '%%%s%%', $query['search'] ); + } + + $search_claim_id = (int) $query['search']; + if ( $search_claim_id ) { + $sql .= ' OR a.claim_id = %d'; + $sql_params[] = $search_claim_id; + } + + $sql .= ')'; + } + + if ( 'select' === $select_or_count ) { + if ( 'ASC' === strtoupper( $query['order'] ) ) { + $order = 'ASC'; + } else { + $order = 'DESC'; + } + switch ( $query['orderby'] ) { + case 'hook': + $sql .= " ORDER BY a.hook $order"; + break; + case 'group': + $sql .= " ORDER BY g.slug $order"; + break; + case 'modified': + $sql .= " ORDER BY a.last_attempt_gmt $order"; + break; + case 'none': + break; + case 'action_id': + $sql .= " ORDER BY a.action_id $order"; + break; + case 'date': + default: + $sql .= " ORDER BY a.scheduled_date_gmt $order"; + break; + } + + if ( $query['per_page'] > 0 ) { + $sql .= ' LIMIT %d, %d'; + $sql_params[] = $query['offset']; + $sql_params[] = $query['per_page']; + } + } + + if ( ! empty( $sql_params ) ) { + $sql = $wpdb->prepare( $sql, $sql_params ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + + return $sql; + } + + /** + * Query for action count or list of action IDs. + * + * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status. + * + * @see ActionScheduler_Store::query_actions for $query arg usage. + * + * @param array $query Query filtering options. + * @param string $query_type Whether to select or count the results. Defaults to select. + * + * @return string|array|null The IDs of actions matching the query. Null on failure. + */ + public function query_actions( $query = array(), $query_type = 'select' ) { + /** + * Global. + * + * @var wpdb $wpdb + */ + global $wpdb; + + $sql = $this->get_query_actions_sql( $query, $query_type ); + + return ( 'count' === $query_type ) ? $wpdb->get_var( $sql ) : $wpdb->get_col( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoSql, WordPress.DB.DirectDatabaseQuery.NoCaching + } + + /** + * Get a count of all actions in the store, grouped by status. + * + * @return array Set of 'status' => int $count pairs for statuses with 1 or more actions of that status. + */ + public function action_counts() { + global $wpdb; + + $sql = "SELECT a.status, count(a.status) as 'count'"; + $sql .= " FROM {$wpdb->actionscheduler_actions} a"; + $sql .= ' GROUP BY a.status'; + + $actions_count_by_status = array(); + $action_stati_and_labels = $this->get_status_labels(); + + foreach ( $wpdb->get_results( $sql ) as $action_data ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + // Ignore any actions with invalid status. + if ( array_key_exists( $action_data->status, $action_stati_and_labels ) ) { + $actions_count_by_status[ $action_data->status ] = $action_data->count; + } + } + + return $actions_count_by_status; + } + + /** + * Cancel an action. + * + * @param int $action_id Action ID. + * + * @return void + * @throws \InvalidArgumentException If the action update failed. + */ + public function cancel_action( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $updated = $wpdb->update( + $wpdb->actionscheduler_actions, + array( 'status' => self::STATUS_CANCELED ), + array( 'action_id' => $action_id ), + array( '%s' ), + array( '%d' ) + ); + if ( false === $updated ) { + /* translators: %s: action ID */ + throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to cancel this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + do_action( 'action_scheduler_canceled_action', $action_id ); + } + + /** + * Cancel pending actions by hook. + * + * @since 3.0.0 + * + * @param string $hook Hook name. + * + * @return void + */ + public function cancel_actions_by_hook( $hook ) { + $this->bulk_cancel_actions( array( 'hook' => $hook ) ); + } + + /** + * Cancel pending actions by group. + * + * @param string $group Group slug. + * + * @return void + */ + public function cancel_actions_by_group( $group ) { + $this->bulk_cancel_actions( array( 'group' => $group ) ); + } + + /** + * Bulk cancel actions. + * + * @since 3.0.0 + * + * @param array $query_args Query parameters. + */ + protected function bulk_cancel_actions( $query_args ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + if ( ! is_array( $query_args ) ) { + return; + } + + // Don't cancel actions that are already canceled. + if ( isset( $query_args['status'] ) && self::STATUS_CANCELED === $query_args['status'] ) { + return; + } + + $action_ids = true; + $query_args = wp_parse_args( + $query_args, + array( + 'per_page' => 1000, + 'status' => self::STATUS_PENDING, + 'orderby' => 'none', + ) + ); + + while ( $action_ids ) { + $action_ids = $this->query_actions( $query_args ); + if ( empty( $action_ids ) ) { + break; + } + + $format = array_fill( 0, count( $action_ids ), '%d' ); + $query_in = '(' . implode( ',', $format ) . ')'; + $parameters = $action_ids; + array_unshift( $parameters, self::STATUS_CANCELED ); + + $wpdb->query( + $wpdb->prepare( + "UPDATE {$wpdb->actionscheduler_actions} SET status = %s WHERE action_id IN {$query_in}", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $parameters + ) + ); + + do_action( 'action_scheduler_bulk_cancel_actions', $action_ids ); + } + } + + /** + * Delete an action. + * + * @param int $action_id Action ID. + * @throws \InvalidArgumentException If the action deletion failed. + */ + public function delete_action( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $deleted = $wpdb->delete( $wpdb->actionscheduler_actions, array( 'action_id' => $action_id ), array( '%d' ) ); + if ( empty( $deleted ) ) { + /* translators: %s is the action ID */ + throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to delete this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + do_action( 'action_scheduler_deleted_action', $action_id ); + } + + /** + * Get the schedule date for an action. + * + * @param string $action_id Action ID. + * + * @return \DateTime The local date the action is scheduled to run, or the date that it ran. + */ + public function get_date( $action_id ) { + $date = $this->get_date_gmt( $action_id ); + ActionScheduler_TimezoneHelper::set_local_timezone( $date ); + return $date; + } + + /** + * Get the GMT schedule date for an action. + * + * @param int $action_id Action ID. + * + * @throws \InvalidArgumentException If action cannot be identified. + * @return \DateTime The GMT date the action is scheduled to run, or the date that it ran. + */ + protected function get_date_gmt( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $record = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d", $action_id ) ); + if ( empty( $record ) ) { + /* translators: %s is the action ID */ + throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to determine the date of this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + if ( self::STATUS_PENDING === $record->status ) { + return as_get_datetime_object( $record->scheduled_date_gmt ); + } else { + return as_get_datetime_object( $record->last_attempt_gmt ); + } + } + + /** + * Stake a claim on actions. + * + * @param int $max_actions Maximum number of action to include in claim. + * @param DateTime|null $before_date Jobs must be schedule before this date. Defaults to now. + * @param array $hooks Hooks to filter for. + * @param string $group Group to filter for. + * + * @return ActionScheduler_ActionClaim + */ + public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) { + $claim_id = $this->generate_claim_id(); + + $this->claim_before_date = $before_date; + $this->claim_actions( $claim_id, $max_actions, $before_date, $hooks, $group ); + $action_ids = $this->find_actions_by_claim_id( $claim_id ); + $this->claim_before_date = null; + + return new ActionScheduler_ActionClaim( $claim_id, $action_ids ); + } + + /** + * Generate a new action claim. + * + * @return int Claim ID. + */ + protected function generate_claim_id() { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $now = as_get_datetime_object(); + $wpdb->insert( $wpdb->actionscheduler_claims, array( 'date_created_gmt' => $now->format( 'Y-m-d H:i:s' ) ) ); + + return $wpdb->insert_id; + } + + /** + * Set a claim filter. + * + * @param string $filter_name Claim filter name. + * @param mixed $filter_values Values to filter. + * @return void + */ + public function set_claim_filter( $filter_name, $filter_values ) { + if ( isset( $this->claim_filters[ $filter_name ] ) ) { + $this->claim_filters[ $filter_name ] = $filter_values; + } + } + + /** + * Get the claim filter value. + * + * @param string $filter_name Claim filter name. + * @return mixed + */ + public function get_claim_filter( $filter_name ) { + if ( isset( $this->claim_filters[ $filter_name ] ) ) { + return $this->claim_filters[ $filter_name ]; + } + + return ''; + } + + /** + * Mark actions claimed. + * + * @param string $claim_id Claim Id. + * @param int $limit Number of action to include in claim. + * @param DateTime|null $before_date Should use UTC timezone. + * @param array $hooks Hooks to filter for. + * @param string $group Group to filter for. + * + * @return int The number of actions that were claimed. + * @throws \InvalidArgumentException Throws InvalidArgumentException if group doesn't exist. + * @throws \RuntimeException Throws RuntimeException if unable to claim action. + */ + protected function claim_actions( $claim_id, $limit, ?DateTime $before_date = null, $hooks = array(), $group = '' ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + $now = as_get_datetime_object(); + $date = is_null( $before_date ) ? $now : clone $before_date; + + // Set claim filters. + if ( ! empty( $hooks ) ) { + $this->set_claim_filter( 'hooks', $hooks ); + } else { + $hooks = $this->get_claim_filter( 'hooks' ); + } + if ( ! empty( $group ) ) { + $this->set_claim_filter( 'group', $group ); + } else { + $group = $this->get_claim_filter( 'group' ); + } + + $where = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s'; + $where_params = array( + $date->format( 'Y-m-d H:i:s' ), + self::STATUS_PENDING, + ); + + if ( ! empty( $hooks ) ) { + $placeholders = array_fill( 0, count( $hooks ), '%s' ); + $where .= ' AND hook IN (' . join( ', ', $placeholders ) . ')'; + $where_params = array_merge( $where_params, array_values( $hooks ) ); + } + + $group_operator = 'IN'; + if ( empty( $group ) ) { + $group = $this->get_claim_filter( 'exclude-groups' ); + $group_operator = 'NOT IN'; + } + + if ( ! empty( $group ) ) { + $group_ids = $this->get_group_ids( $group, false ); + + // throw exception if no matching group(s) found, this matches ActionScheduler_wpPostStore's behaviour. + if ( empty( $group_ids ) ) { + throw new InvalidArgumentException( + sprintf( + /* translators: %s: group name(s) */ + _n( + 'The group "%s" does not exist.', + 'The groups "%s" do not exist.', + is_array( $group ) ? count( $group ) : 1, + 'action-scheduler' + ), + $group + ) + ); + } + + $id_list = implode( ',', array_map( 'intval', $group_ids ) ); + $where .= " AND group_id {$group_operator} ( $id_list )"; + } + + /** + * Sets the order-by clause used in the action claim query. + * + * @param string $order_by_sql + * @param string $claim_id Claim Id. + * @param array $hooks Hooks to filter for. + * + * @since 3.8.3 Made $claim_id and $hooks available. + * @since 3.4.0 + */ + $order = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks ); + $skip_locked = $this->db_supports_skip_locked() ? ' SKIP LOCKED' : ''; + + // Selecting the action_ids that we plan to claim, while skipping any locked rows to avoid deadlocking. + $select_sql = $wpdb->prepare( "SELECT action_id from {$wpdb->actionscheduler_actions} {$where} {$order} LIMIT %d FOR UPDATE{$skip_locked}", array_merge( $where_params, array( $limit ) ) ); + + // Now place it into an UPDATE statement by joining the result sets, allowing for the SKIP LOCKED behavior to take effect. + $update_sql = "UPDATE {$wpdb->actionscheduler_actions} t1 JOIN ( $select_sql ) t2 ON t1.action_id = t2.action_id SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s"; + $update_params = array( + $claim_id, + $now->format( 'Y-m-d H:i:s' ), + current_time( 'mysql' ), + ); + + $rows_affected = $wpdb->query( $wpdb->prepare( $update_sql, $update_params ) ); + if ( false === $rows_affected ) { + $error = empty( $wpdb->last_error ) + ? _x( 'unknown', 'database error', 'action-scheduler' ) + : $wpdb->last_error; + throw new \RuntimeException( + sprintf( + /* translators: %s database error. */ + __( 'Unable to claim actions. Database error: %s.', 'action-scheduler' ), + $error + ) + ); + } + + return (int) $rows_affected; + } + + /** + * Determines whether the database supports using SKIP LOCKED. This logic mimicks the $wpdb::has_cap() logic. + * + * SKIP_LOCKED support was added to MariaDB in 10.6.0 and to MySQL in 8.0.1 + * + * @return bool + */ + private function db_supports_skip_locked() { + global $wpdb; + $db_version = $wpdb->db_version(); + $db_server_info = $wpdb->db_server_info(); + $is_mariadb = ( false !== strpos( $db_server_info, 'MariaDB' ) ); + + if ( $is_mariadb && + '5.5.5' === $db_version && + PHP_VERSION_ID < 80016 // PHP 8.0.15 or older. + ) { + /* + * Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions. + */ + $db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info ); + $db_version = preg_replace( '/[^0-9.].*/', '', $db_server_info ); + } + + $is_supported = ( $is_mariadb && version_compare( $db_version, '10.6.0', '>=' ) ) || + ( ! $is_mariadb && version_compare( $db_version, '8.0.1', '>=' ) ); + + /** + * Filter whether the database supports the SKIP LOCKED modifier for queries. + * + * @param bool $is_supported Whether SKIP LOCKED is supported. + * + * @since 3.9.3 + */ + return apply_filters( 'action_scheduler_db_supports_skip_locked', $is_supported ); + } + + /** + * Get the number of active claims. + * + * @return int + */ + public function get_claim_count() { + global $wpdb; + + $sql = "SELECT COUNT(DISTINCT claim_id) FROM {$wpdb->actionscheduler_actions} WHERE claim_id != 0 AND status IN ( %s, %s)"; + $sql = $wpdb->prepare( $sql, array( self::STATUS_PENDING, self::STATUS_RUNNING ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + return (int) $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + + /** + * Return an action's claim ID, as stored in the claim_id column. + * + * @param string $action_id Action ID. + * @return mixed + */ + public function get_claim_id( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $sql = "SELECT claim_id FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d"; + $sql = $wpdb->prepare( $sql, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + return (int) $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + + /** + * Retrieve the action IDs of action in a claim. + * + * @param int $claim_id Claim ID. + * @return int[] + */ + public function find_actions_by_claim_id( $claim_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $action_ids = array(); + $before_date = isset( $this->claim_before_date ) ? $this->claim_before_date : as_get_datetime_object(); + $cut_off = $before_date->format( 'Y-m-d H:i:s' ); + + $sql = $wpdb->prepare( + "SELECT action_id, scheduled_date_gmt FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC", + $claim_id + ); + + // Verify that the scheduled date for each action is within the expected bounds (in some unusual + // cases, we cannot depend on MySQL to honor all of the WHERE conditions we specify). + foreach ( $wpdb->get_results( $sql ) as $claimed_action ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + if ( $claimed_action->scheduled_date_gmt <= $cut_off ) { + $action_ids[] = absint( $claimed_action->action_id ); + } + } + + return $action_ids; + } + + /** + * Release pending actions from a claim and delete the claim. + * + * @param ActionScheduler_ActionClaim $claim Claim object. + * @throws \RuntimeException When unable to release actions from claim. + */ + public function release_claim( ActionScheduler_ActionClaim $claim ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + if ( 0 === intval( $claim->get_id() ) ) { + // Verify that the claim_id is valid before attempting to release it. + return; + } + + /** + * Deadlock warning: This function modifies actions to release them from claims that have been processed. Earlier, we used to it in a atomic query, i.e. we would update all actions belonging to a particular claim_id with claim_id = 0. + * While this was functionally correct, it would cause deadlock, since this update query will hold a lock on the claim_id_.. index on the action table. + * This allowed the possibility of a race condition, where the claimer query is also running at the same time, then the claimer query will also try to acquire a lock on the claim_id_.. index, and in this case if claim release query has already progressed to the point of acquiring the lock, but have not updated yet, it would cause a deadlock. + * + * We resolve this by getting all the actions_id that we want to release claim from in a separate query, and then releasing the claim on each of them. This way, our lock is acquired on the action_id index instead of the claim_id index. Note that the lock on claim_id will still be acquired, but it will only when we actually make the update, rather than when we select the actions. + * + * We only release pending actions in order for them to be claimed by another process. + */ + $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d AND status = %s", $claim->get_id(), self::STATUS_PENDING ) ); + + $row_updates = 0; + if ( count( $action_ids ) > 0 ) { + $action_id_string = implode( ',', array_map( 'absint', $action_ids ) ); + $row_updates = $wpdb->query( "UPDATE {$wpdb->actionscheduler_actions} SET claim_id = 0 WHERE action_id IN ({$action_id_string})" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } + + $wpdb->delete( $wpdb->actionscheduler_claims, array( 'claim_id' => $claim->get_id() ), array( '%d' ) ); + + if ( $row_updates < count( $action_ids ) ) { + throw new RuntimeException( + sprintf( + // translators: %d is an id. + __( 'Unable to release actions from claim id %d.', 'action-scheduler' ), + $claim->get_id() + ) + ); + } + } + + /** + * Remove the claim from an action. + * + * @param int $action_id Action ID. + * + * @return void + */ + public function unclaim_action( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $wpdb->update( + $wpdb->actionscheduler_actions, + array( 'claim_id' => 0 ), + array( 'action_id' => $action_id ), + array( '%s' ), + array( '%d' ) + ); + } + + /** + * Mark an action as failed. + * + * @param int $action_id Action ID. + * @throws \InvalidArgumentException Throw an exception if action was not updated. + */ + public function mark_failure( $action_id ) { + /** + * Global. + + * @var \wpdb $wpdb + */ + global $wpdb; + + $updated = $wpdb->update( + $wpdb->actionscheduler_actions, + array( 'status' => self::STATUS_FAILED ), + array( 'action_id' => $action_id ), + array( '%s' ), + array( '%d' ) + ); + if ( empty( $updated ) ) { + /* translators: %s is the action ID */ + throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having failed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + } + + /** + * Add execution message to action log. + * + * @throws Exception If the action status cannot be updated to self::STATUS_RUNNING ('in-progress'). + * + * @param int $action_id Action ID. + * + * @return void + */ + public function log_execution( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $sql = "UPDATE {$wpdb->actionscheduler_actions} SET attempts = attempts+1, status=%s, last_attempt_gmt = %s, last_attempt_local = %s WHERE action_id = %d"; + $sql = $wpdb->prepare( $sql, self::STATUS_RUNNING, current_time( 'mysql', true ), current_time( 'mysql' ), $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + $status_updated = $wpdb->query( $sql ); + + if ( ! $status_updated ) { + throw new Exception( + sprintf( + /* translators: 1: action ID. 2: status slug. */ + __( 'Unable to update the status of action %1$d to %2$s.', 'action-scheduler' ), + $action_id, + self::STATUS_RUNNING + ) + ); + } + } + + /** + * Mark an action as complete. + * + * @param int $action_id Action ID. + * + * @return void + * @throws \InvalidArgumentException Throw an exception if action was not updated. + */ + public function mark_complete( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $updated = $wpdb->update( + $wpdb->actionscheduler_actions, + array( + 'status' => self::STATUS_COMPLETE, + 'last_attempt_gmt' => current_time( 'mysql', true ), + 'last_attempt_local' => current_time( 'mysql' ), + ), + array( 'action_id' => $action_id ), + array( '%s' ), + array( '%d' ) + ); + if ( empty( $updated ) ) { + /* translators: %s is the action ID */ + throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having completed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + + /** + * Fires after a scheduled action has been completed. + * + * @since 3.4.2 + * + * @param int $action_id Action ID. + */ + do_action( 'action_scheduler_completed_action', $action_id ); + } + + /** + * Get an action's status. + * + * @param int $action_id Action ID. + * + * @return string + * @throws \InvalidArgumentException Throw an exception if not status was found for action_id. + * @throws \RuntimeException Throw an exception if action status could not be retrieved. + */ + public function get_status( $action_id ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $sql = "SELECT status FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d"; + $sql = $wpdb->prepare( $sql, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + $status = $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + + if ( is_null( $status ) ) { + throw new \InvalidArgumentException( __( 'Invalid action ID. No status found.', 'action-scheduler' ) ); + } elseif ( empty( $status ) ) { + throw new \RuntimeException( __( 'Unknown status found for action.', 'action-scheduler' ) ); + } else { + return $status; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php new file mode 100644 index 0000000..40520cc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php @@ -0,0 +1,460 @@ +demarkation_id = (int) get_option( self::DEMARKATION_OPTION, 0 ); + if ( empty( $config ) ) { + $config = Controller::instance()->get_migration_config_object(); + } + $this->primary_store = $config->get_destination_store(); + $this->secondary_store = $config->get_source_store(); + $this->migration_runner = new Runner( $config ); + } + + /** + * Initialize the table data store tables. + * + * @codeCoverageIgnore + */ + public function init() { + add_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10, 2 ); + $this->primary_store->init(); + $this->secondary_store->init(); + remove_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10 ); + } + + /** + * When the actions table is created, set its autoincrement + * value to be one higher than the posts table to ensure that + * there are no ID collisions. + * + * @param string $table_name Table name. + * @param string $table_suffix Suffix of table name. + * + * @return void + * @codeCoverageIgnore + */ + public function set_autoincrement( $table_name, $table_suffix ) { + if ( ActionScheduler_StoreSchema::ACTIONS_TABLE === $table_suffix ) { + if ( empty( $this->demarkation_id ) ) { + $this->demarkation_id = $this->set_demarkation_id(); + } + + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + /** + * A default date of '0000-00-00 00:00:00' is invalid in MySQL 5.7 when configured with + * sql_mode including both STRICT_TRANS_TABLES and NO_ZERO_DATE. + */ + $default_date = new DateTime( 'tomorrow' ); + $null_action = new ActionScheduler_NullAction(); + $date_gmt = $this->get_scheduled_date_string( $null_action, $default_date ); + $date_local = $this->get_scheduled_date_string_local( $null_action, $default_date ); + + $row_count = $wpdb->insert( + $wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE}, + array( + 'action_id' => $this->demarkation_id, + 'hook' => '', + 'status' => '', + 'scheduled_date_gmt' => $date_gmt, + 'scheduled_date_local' => $date_local, + 'last_attempt_gmt' => $date_gmt, + 'last_attempt_local' => $date_local, + ) + ); + if ( $row_count > 0 ) { + $wpdb->delete( + $wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE}, + array( 'action_id' => $this->demarkation_id ) + ); + } + } + } + + /** + * Store the demarkation id in WP options. + * + * @param int $id The ID to set as the demarkation point between the two stores + * Leave null to use the next ID from the WP posts table. + * + * @return int The new ID. + * + * @codeCoverageIgnore + */ + private function set_demarkation_id( $id = null ) { + if ( empty( $id ) ) { + /** + * Global. + * + * @var \wpdb $wpdb + */ + global $wpdb; + + $id = (int) $wpdb->get_var( "SELECT MAX(ID) FROM $wpdb->posts" ); + $id++; + } + update_option( self::DEMARKATION_OPTION, $id ); + + return $id; + } + + /** + * Find the first matching action from the secondary store. + * If it exists, migrate it to the primary store immediately. + * After it migrates, the secondary store will logically contain + * the next matching action, so return the result thence. + * + * @param string $hook Action's hook. + * @param array $params Action's arguments. + * + * @return string + */ + public function find_action( $hook, $params = array() ) { + $found_unmigrated_action = $this->secondary_store->find_action( $hook, $params ); + if ( ! empty( $found_unmigrated_action ) ) { + $this->migrate( array( $found_unmigrated_action ) ); + } + + return $this->primary_store->find_action( $hook, $params ); + } + + /** + * Find actions matching the query in the secondary source first. + * If any are found, migrate them immediately. Then the secondary + * store will contain the canonical results. + * + * @param array $query Query arguments. + * @param string $query_type Whether to select or count the results. Default, select. + * + * @return int[] + */ + public function query_actions( $query = array(), $query_type = 'select' ) { + $found_unmigrated_actions = $this->secondary_store->query_actions( $query, 'select' ); + if ( ! empty( $found_unmigrated_actions ) ) { + $this->migrate( $found_unmigrated_actions ); + } + + return $this->primary_store->query_actions( $query, $query_type ); + } + + /** + * Get a count of all actions in the store, grouped by status + * + * @return array Set of 'status' => int $count pairs for statuses with 1 or more actions of that status. + */ + public function action_counts() { + $unmigrated_actions_count = $this->secondary_store->action_counts(); + $migrated_actions_count = $this->primary_store->action_counts(); + $actions_count_by_status = array(); + + foreach ( $this->get_status_labels() as $status_key => $status_label ) { + + $count = 0; + + if ( isset( $unmigrated_actions_count[ $status_key ] ) ) { + $count += $unmigrated_actions_count[ $status_key ]; + } + + if ( isset( $migrated_actions_count[ $status_key ] ) ) { + $count += $migrated_actions_count[ $status_key ]; + } + + $actions_count_by_status[ $status_key ] = $count; + } + + $actions_count_by_status = array_filter( $actions_count_by_status ); + + return $actions_count_by_status; + } + + /** + * If any actions would have been claimed by the secondary store, + * migrate them immediately, then ask the primary store for the + * canonical claim. + * + * @param int $max_actions Maximum number of actions to claim. + * @param null|DateTime $before_date Latest timestamp of actions to claim. + * @param string[] $hooks Hook of actions to claim. + * @param string $group Group of actions to claim. + * + * @return ActionScheduler_ActionClaim + */ + public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) { + $claim = $this->secondary_store->stake_claim( $max_actions, $before_date, $hooks, $group ); + + $claimed_actions = $claim->get_actions(); + if ( ! empty( $claimed_actions ) ) { + $this->migrate( $claimed_actions ); + } + + $this->secondary_store->release_claim( $claim ); + + return $this->primary_store->stake_claim( $max_actions, $before_date, $hooks, $group ); + } + + /** + * Migrate a list of actions to the table data store. + * + * @param array $action_ids List of action IDs. + */ + private function migrate( $action_ids ) { + $this->migration_runner->migrate_actions( $action_ids ); + } + + /** + * Save an action to the primary store. + * + * @param ActionScheduler_Action $action Action object to be saved. + * @param DateTime|null $date Optional. Schedule date. Default null. + * + * @return int The action ID + */ + public function save_action( ActionScheduler_Action $action, ?DateTime $date = null ) { + return $this->primary_store->save_action( $action, $date ); + } + + /** + * Retrieve an existing action whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function fetch_action( $action_id ) { + $store = $this->get_store_from_action_id( $action_id, true ); + if ( $store ) { + return $store->fetch_action( $action_id ); + } else { + return new ActionScheduler_NullAction(); + } + } + + /** + * Cancel an existing action whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function cancel_action( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + $store->cancel_action( $action_id ); + } + } + + /** + * Delete an existing action whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function delete_action( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + $store->delete_action( $action_id ); + } + } + + /** + * Get the schedule date an existing action whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function get_date( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + return $store->get_date( $action_id ); + } else { + return null; + } + } + + /** + * Mark an existing action as failed whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function mark_failure( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + $store->mark_failure( $action_id ); + } + } + + /** + * Log the execution of an existing action whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function log_execution( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + $store->log_execution( $action_id ); + } + } + + /** + * Mark an existing action complete whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function mark_complete( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + $store->mark_complete( $action_id ); + } + } + + /** + * Get an existing action status whether migrated or not. + * + * @param int $action_id Action ID. + */ + public function get_status( $action_id ) { + $store = $this->get_store_from_action_id( $action_id ); + if ( $store ) { + return $store->get_status( $action_id ); + } + return null; + } + + /** + * Return which store an action is stored in. + * + * @param int $action_id ID of the action. + * @param bool $primary_first Optional flag indicating search the primary store first. + * @return ActionScheduler_Store + */ + protected function get_store_from_action_id( $action_id, $primary_first = false ) { + if ( $primary_first ) { + $stores = array( + $this->primary_store, + $this->secondary_store, + ); + } elseif ( $action_id < $this->demarkation_id ) { + $stores = array( + $this->secondary_store, + $this->primary_store, + ); + } else { + $stores = array( + $this->primary_store, + ); + } + + foreach ( $stores as $store ) { + $action = $store->fetch_action( $action_id ); + if ( ! is_a( $action, 'ActionScheduler_NullAction' ) ) { + return $store; + } + } + return null; + } + + /** + * * * * * * * * * * * * * * * * * * * * * * * * * * * + * All claim-related functions should operate solely + * on the primary store. + * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + + /** + * Get the claim count from the table data store. + */ + public function get_claim_count() { + return $this->primary_store->get_claim_count(); + } + + /** + * Retrieve the claim ID for an action from the table data store. + * + * @param int $action_id Action ID. + */ + public function get_claim_id( $action_id ) { + return $this->primary_store->get_claim_id( $action_id ); + } + + /** + * Release a claim in the table data store on any pending actions. + * + * @param ActionScheduler_ActionClaim $claim Claim object. + */ + public function release_claim( ActionScheduler_ActionClaim $claim ) { + $this->primary_store->release_claim( $claim ); + } + + /** + * Release claims on an action in the table data store. + * + * @param int $action_id Action ID. + */ + public function unclaim_action( $action_id ) { + $this->primary_store->unclaim_action( $action_id ); + } + + /** + * Retrieve a list of action IDs by claim. + * + * @param int $claim_id Claim ID. + */ + public function find_actions_by_claim_id( $claim_id ) { + return $this->primary_store->find_actions_by_claim_id( $claim_id ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php new file mode 100644 index 0000000..a9d84d3 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php @@ -0,0 +1,282 @@ +create_wp_comment( $action_id, $message, $date ); + return $comment_id; + } + + /** + * Create comment. + * + * @param int $action_id Action ID. + * @param string $message Action log's message. + * @param DateTime $date Action log entry's timestamp. + */ + protected function create_wp_comment( $action_id, $message, DateTime $date ) { + + $comment_date_gmt = $date->format( 'Y-m-d H:i:s' ); + ActionScheduler_TimezoneHelper::set_local_timezone( $date ); + $comment_data = array( + 'comment_post_ID' => $action_id, + 'comment_date' => $date->format( 'Y-m-d H:i:s' ), + 'comment_date_gmt' => $comment_date_gmt, + 'comment_author' => self::AGENT, + 'comment_content' => $message, + 'comment_agent' => self::AGENT, + 'comment_type' => self::TYPE, + ); + + return wp_insert_comment( $comment_data ); + } + + /** + * Get single log entry for action. + * + * @param string $entry_id Entry ID. + * + * @return ActionScheduler_LogEntry + */ + public function get_entry( $entry_id ) { + $comment = $this->get_comment( $entry_id ); + + if ( empty( $comment ) || self::TYPE !== $comment->comment_type ) { + return new ActionScheduler_NullLogEntry(); + } + + $date = as_get_datetime_object( $comment->comment_date_gmt ); + ActionScheduler_TimezoneHelper::set_local_timezone( $date ); + return new ActionScheduler_LogEntry( $comment->comment_post_ID, $comment->comment_content, $date ); + } + + /** + * Get action's logs. + * + * @param string $action_id Action ID. + * + * @return ActionScheduler_LogEntry[] + */ + public function get_logs( $action_id ) { + $status = 'all'; + $logs = array(); + + if ( get_post_status( $action_id ) === 'trash' ) { + $status = 'post-trashed'; + } + + $comments = get_comments( + array( + 'post_id' => $action_id, + 'orderby' => 'comment_date_gmt', + 'order' => 'ASC', + 'type' => self::TYPE, + 'status' => $status, + ) + ); + + foreach ( $comments as $c ) { + $entry = $this->get_entry( $c ); + + if ( ! empty( $entry ) ) { + $logs[] = $entry; + } + } + + return $logs; + } + + /** + * Get comment. + * + * @param int $comment_id Comment ID. + */ + protected function get_comment( $comment_id ) { + return get_comment( $comment_id ); + } + + /** + * Filter comment queries. + * + * @param WP_Comment_Query $query Comment query object. + */ + public function filter_comment_queries( $query ) { + foreach ( array( 'ID', 'parent', 'post_author', 'post_name', 'post_parent', 'type', 'post_type', 'post_id', 'post_ID' ) as $key ) { + if ( ! empty( $query->query_vars[ $key ] ) ) { + return; // don't slow down queries that wouldn't include action_log comments anyway. + } + } + $query->query_vars['action_log_filter'] = true; + add_filter( 'comments_clauses', array( $this, 'filter_comment_query_clauses' ), 10, 2 ); + } + + /** + * Filter comment queries. + * + * @param array $clauses Query's clauses. + * @param WP_Comment_Query $query Query object. + * + * @return array + */ + public function filter_comment_query_clauses( $clauses, $query ) { + if ( ! empty( $query->query_vars['action_log_filter'] ) ) { + $clauses['where'] .= $this->get_where_clause(); + } + return $clauses; + } + + /** + * Make sure Action Scheduler logs are excluded from comment feeds, which use WP_Query, not + * the WP_Comment_Query class handled by @see self::filter_comment_queries(). + * + * @param string $where Query's `where` clause. + * @param WP_Query $query Query object. + * + * @return string + */ + public function filter_comment_feed( $where, $query ) { + if ( is_comment_feed() ) { + $where .= $this->get_where_clause(); + } + return $where; + } + + /** + * Return a SQL clause to exclude Action Scheduler comments. + * + * @return string + */ + protected function get_where_clause() { + global $wpdb; + return sprintf( " AND {$wpdb->comments}.comment_type != '%s'", self::TYPE ); + } + + /** + * Remove action log entries from wp_count_comments() + * + * @param array $stats Comment count. + * @param int $post_id Post ID. + * + * @return object + */ + public function filter_comment_count( $stats, $post_id ) { + global $wpdb; + + if ( 0 === $post_id ) { + $stats = $this->get_comment_count(); + } + + return $stats; + } + + /** + * Retrieve the comment counts from our cache, or the database if the cached version isn't set. + * + * @return object + */ + protected function get_comment_count() { + global $wpdb; + + $stats = get_transient( 'as_comment_count' ); + + if ( ! $stats ) { + $stats = array(); + $count = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} WHERE comment_type NOT IN('order_note','action_log') GROUP BY comment_approved", ARRAY_A ); + $total = 0; + $stats = array(); + $approved = array( + '0' => 'moderated', + '1' => 'approved', + 'spam' => 'spam', + 'trash' => 'trash', + 'post-trashed' => 'post-trashed', + ); + + foreach ( (array) $count as $row ) { + // Don't count post-trashed toward totals. + if ( 'post-trashed' !== $row['comment_approved'] && 'trash' !== $row['comment_approved'] ) { + $total += $row['num_comments']; + } + if ( isset( $approved[ $row['comment_approved'] ] ) ) { + $stats[ $approved[ $row['comment_approved'] ] ] = $row['num_comments']; + } + } + + $stats['total_comments'] = $total; + $stats['all'] = $total; + + foreach ( $approved as $key ) { + if ( empty( $stats[ $key ] ) ) { + $stats[ $key ] = 0; + } + } + + $stats = (object) $stats; + set_transient( 'as_comment_count', $stats ); + } + + return $stats; + } + + /** + * Delete comment count cache whenever there is new comment or the status of a comment changes. Cache + * will be regenerated next time ActionScheduler_wpCommentLogger::filter_comment_count() is called. + */ + public function delete_comment_count_cache() { + delete_transient( 'as_comment_count' ); + } + + /** + * Initialize. + * + * @codeCoverageIgnore + */ + public function init() { + add_action( 'action_scheduler_before_process_queue', array( $this, 'disable_comment_counting' ), 10, 0 ); + add_action( 'action_scheduler_after_process_queue', array( $this, 'enable_comment_counting' ), 10, 0 ); + + parent::init(); + + add_action( 'pre_get_comments', array( $this, 'filter_comment_queries' ), 10, 1 ); + add_action( 'wp_count_comments', array( $this, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs. + add_action( 'comment_feed_where', array( $this, 'filter_comment_feed' ), 10, 2 ); + + // Delete comments count cache whenever there is a new comment or a comment status changes. + add_action( 'wp_insert_comment', array( $this, 'delete_comment_count_cache' ) ); + add_action( 'wp_set_comment_status', array( $this, 'delete_comment_count_cache' ) ); + } + + /** + * Defer comment counting. + */ + public function disable_comment_counting() { + wp_defer_comment_counting( true ); + } + + /** + * Enable comment counting. + */ + public function enable_comment_counting() { + wp_defer_comment_counting( false ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php new file mode 100644 index 0000000..8f6375a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php @@ -0,0 +1,1105 @@ +validate_action( $action ); + $post_array = $this->create_post_array( $action, $scheduled_date ); + $post_id = $this->save_post_array( $post_array ); + $this->save_post_schedule( $post_id, $action->get_schedule() ); + $this->save_action_group( $post_id, $action->get_group() ); + do_action( 'action_scheduler_stored_action', $post_id ); + return $post_id; + } catch ( Exception $e ) { + /* translators: %s: action error message */ + throw new RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 ); + } + } + + /** + * Create post array. + * + * @param ActionScheduler_Action $action Scheduled Action. + * @param DateTime|null $scheduled_date Scheduled Date. + * + * @return array Returns an array of post data. + */ + protected function create_post_array( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) { + $post = array( + 'post_type' => self::POST_TYPE, + 'post_title' => $action->get_hook(), + 'post_content' => wp_json_encode( $action->get_args() ), + 'post_status' => ( $action->is_finished() ? 'publish' : 'pending' ), + 'post_date_gmt' => $this->get_scheduled_date_string( $action, $scheduled_date ), + 'post_date' => $this->get_scheduled_date_string_local( $action, $scheduled_date ), + ); + return $post; + } + + /** + * Save post array. + * + * @param array $post_array Post array. + * @return int Returns the post ID. + * @throws RuntimeException Throws an exception if the action could not be saved. + */ + protected function save_post_array( $post_array ) { + add_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10, 1 ); + add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 ); + + $has_kses = false !== has_filter( 'content_save_pre', 'wp_filter_post_kses' ); + + if ( $has_kses ) { + // Prevent KSES from corrupting JSON in post_content. + kses_remove_filters(); + } + + $post_id = wp_insert_post( $post_array ); + + if ( $has_kses ) { + kses_init_filters(); + } + + remove_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10 ); + remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 ); + + if ( is_wp_error( $post_id ) || empty( $post_id ) ) { + throw new RuntimeException( __( 'Unable to save action.', 'action-scheduler' ) ); + } + return $post_id; + } + + /** + * Filter insert post data. + * + * @param array $postdata Post data to filter. + * + * @return array + */ + public function filter_insert_post_data( $postdata ) { + if ( self::POST_TYPE === $postdata['post_type'] ) { + $postdata['post_author'] = 0; + if ( 'future' === $postdata['post_status'] ) { + $postdata['post_status'] = 'publish'; + } + } + return $postdata; + } + + /** + * Create a (probably unique) post name for scheduled actions in a more performant manner than wp_unique_post_slug(). + * + * When an action's post status is transitioned to something other than 'draft', 'pending' or 'auto-draft, like 'publish' + * or 'failed' or 'trash', WordPress will find a unique slug (stored in post_name column) using the wp_unique_post_slug() + * function. This is done to ensure URL uniqueness. The approach taken by wp_unique_post_slug() is to iterate over existing + * post_name values that match, and append a number 1 greater than the largest. This makes sense when manually creating a + * post from the Edit Post screen. It becomes a bottleneck when automatically processing thousands of actions, with a + * database containing thousands of related post_name values. + * + * WordPress 5.1 introduces the 'pre_wp_unique_post_slug' filter for plugins to address this issue. + * + * We can short-circuit WordPress's wp_unique_post_slug() approach using the 'pre_wp_unique_post_slug' filter. This + * method is available to be used as a callback on that filter. It provides a more scalable approach to generating a + * post_name/slug that is probably unique. Because Action Scheduler never actually uses the post_name field, or an + * action's slug, being probably unique is good enough. + * + * For more backstory on this issue, see: + * - https://github.com/woocommerce/action-scheduler/issues/44 and + * - https://core.trac.wordpress.org/ticket/21112 + * + * @param string $override_slug Short-circuit return value. + * @param string $slug The desired slug (post_name). + * @param int $post_ID Post ID. + * @param string $post_status The post status. + * @param string $post_type Post type. + * @return string + */ + public function set_unique_post_slug( $override_slug, $slug, $post_ID, $post_status, $post_type ) { + if ( self::POST_TYPE === $post_type ) { + $override_slug = uniqid( self::POST_TYPE . '-', true ) . '-' . wp_generate_password( 32, false ); + } + return $override_slug; + } + + /** + * Save post schedule. + * + * @param int $post_id Post ID of the scheduled action. + * @param string $schedule Schedule to save. + * + * @return void + */ + protected function save_post_schedule( $post_id, $schedule ) { + update_post_meta( $post_id, self::SCHEDULE_META_KEY, $schedule ); + } + + /** + * Save action group. + * + * @param int $post_id Post ID. + * @param string $group Group to save. + * @return void + */ + protected function save_action_group( $post_id, $group ) { + if ( empty( $group ) ) { + wp_set_object_terms( $post_id, array(), self::GROUP_TAXONOMY, false ); + } else { + wp_set_object_terms( $post_id, array( $group ), self::GROUP_TAXONOMY, false ); + } + } + + /** + * Fetch actions. + * + * @param int $action_id Action ID. + * @return object + */ + public function fetch_action( $action_id ) { + $post = $this->get_post( $action_id ); + if ( empty( $post ) || self::POST_TYPE !== $post->post_type ) { + return $this->get_null_action(); + } + + try { + $action = $this->make_action_from_post( $post ); + } catch ( ActionScheduler_InvalidActionException $exception ) { + do_action( 'action_scheduler_failed_fetch_action', $post->ID, $exception ); + return $this->get_null_action(); + } + + return $action; + } + + /** + * Get post. + * + * @param string $action_id - Action ID. + * @return WP_Post|null + */ + protected function get_post( $action_id ) { + if ( empty( $action_id ) ) { + return null; + } + return get_post( $action_id ); + } + + /** + * Get NULL action. + * + * @return ActionScheduler_NullAction + */ + protected function get_null_action() { + return new ActionScheduler_NullAction(); + } + + /** + * Make action from post. + * + * @param WP_Post $post Post object. + * @return WP_Post + */ + protected function make_action_from_post( $post ) { + $hook = $post->post_title; + + $args = json_decode( $post->post_content, true ); + $this->validate_args( $args, $post->ID ); + + $schedule = get_post_meta( $post->ID, self::SCHEDULE_META_KEY, true ); + $this->validate_schedule( $schedule, $post->ID ); + + $group = wp_get_object_terms( $post->ID, self::GROUP_TAXONOMY, array( 'fields' => 'names' ) ); + $group = empty( $group ) ? '' : reset( $group ); + + return ActionScheduler::factory()->get_stored_action( $this->get_action_status_by_post_status( $post->post_status ), $hook, $args, $schedule, $group ); + } + + /** + * Get action status by post status. + * + * @param string $post_status Post status. + * + * @throws InvalidArgumentException Throw InvalidArgumentException if $post_status not in known status fields returned by $this->get_status_labels(). + * @return string + */ + protected function get_action_status_by_post_status( $post_status ) { + + switch ( $post_status ) { + case 'publish': + $action_status = self::STATUS_COMPLETE; + break; + case 'trash': + $action_status = self::STATUS_CANCELED; + break; + default: + if ( ! array_key_exists( $post_status, $this->get_status_labels() ) ) { + throw new InvalidArgumentException( sprintf( 'Invalid post status: "%s". No matching action status available.', $post_status ) ); + } + $action_status = $post_status; + break; + } + + return $action_status; + } + + /** + * Get post status by action status. + * + * @param string $action_status Action status. + * + * @throws InvalidArgumentException Throws InvalidArgumentException if $post_status not in known status fields returned by $this->get_status_labels(). + * @return string + */ + protected function get_post_status_by_action_status( $action_status ) { + + switch ( $action_status ) { + case self::STATUS_COMPLETE: + $post_status = 'publish'; + break; + case self::STATUS_CANCELED: + $post_status = 'trash'; + break; + default: + if ( ! array_key_exists( $action_status, $this->get_status_labels() ) ) { + throw new InvalidArgumentException( sprintf( 'Invalid action status: "%s".', $action_status ) ); + } + $post_status = $action_status; + break; + } + + return $post_status; + } + + /** + * Returns the SQL statement to query (or count) actions. + * + * @param array $query - Filtering options. + * @param string $select_or_count - Whether the SQL should select and return the IDs or just the row count. + * + * @throws InvalidArgumentException - Throw InvalidArgumentException if $select_or_count not count or select. + * @return string SQL statement. The returned SQL is already properly escaped. + */ + protected function get_query_actions_sql( array $query, $select_or_count = 'select' ) { + + if ( ! in_array( $select_or_count, array( 'select', 'count' ), true ) ) { + throw new InvalidArgumentException( __( 'Invalid schedule. Cannot save action.', 'action-scheduler' ) ); + } + + $query = wp_parse_args( + $query, + array( + 'hook' => '', + 'args' => null, + 'date' => null, + 'date_compare' => '<=', + 'modified' => null, + 'modified_compare' => '<=', + 'group' => '', + 'status' => '', + 'claimed' => null, + 'per_page' => 5, + 'offset' => 0, + 'orderby' => 'date', + 'order' => 'ASC', + 'search' => '', + ) + ); + + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + $sql = ( 'count' === $select_or_count ) ? 'SELECT count(p.ID)' : 'SELECT p.ID '; + $sql .= "FROM {$wpdb->posts} p"; + $sql_params = array(); + if ( empty( $query['group'] ) && 'group' === $query['orderby'] ) { + $sql .= " LEFT JOIN {$wpdb->term_relationships} tr ON tr.object_id=p.ID"; + $sql .= " LEFT JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id=tt.term_taxonomy_id"; + $sql .= " LEFT JOIN {$wpdb->terms} t ON tt.term_id=t.term_id"; + } elseif ( ! empty( $query['group'] ) ) { + $sql .= " INNER JOIN {$wpdb->term_relationships} tr ON tr.object_id=p.ID"; + $sql .= " INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id=tt.term_taxonomy_id"; + $sql .= " INNER JOIN {$wpdb->terms} t ON tt.term_id=t.term_id"; + $sql .= ' AND t.slug=%s'; + $sql_params[] = $query['group']; + } + $sql .= ' WHERE post_type=%s'; + $sql_params[] = self::POST_TYPE; + if ( $query['hook'] ) { + $sql .= ' AND p.post_title=%s'; + $sql_params[] = $query['hook']; + } + if ( ! is_null( $query['args'] ) ) { + $sql .= ' AND p.post_content=%s'; + $sql_params[] = wp_json_encode( $query['args'] ); + } + + if ( $query['status'] ) { + $post_statuses = array_map( array( $this, 'get_post_status_by_action_status' ), (array) $query['status'] ); + $placeholders = array_fill( 0, count( $post_statuses ), '%s' ); + $sql .= ' AND p.post_status IN (' . join( ', ', $placeholders ) . ')'; + $sql_params = array_merge( $sql_params, array_values( $post_statuses ) ); + } + + if ( $query['date'] instanceof DateTime ) { + $date = clone $query['date']; + $date->setTimezone( new DateTimeZone( 'UTC' ) ); + $date_string = $date->format( 'Y-m-d H:i:s' ); + $comparator = $this->validate_sql_comparator( $query['date_compare'] ); + $sql .= " AND p.post_date_gmt $comparator %s"; + $sql_params[] = $date_string; + } + + if ( $query['modified'] instanceof DateTime ) { + $modified = clone $query['modified']; + $modified->setTimezone( new DateTimeZone( 'UTC' ) ); + $date_string = $modified->format( 'Y-m-d H:i:s' ); + $comparator = $this->validate_sql_comparator( $query['modified_compare'] ); + $sql .= " AND p.post_modified_gmt $comparator %s"; + $sql_params[] = $date_string; + } + + if ( true === $query['claimed'] ) { + $sql .= " AND p.post_password != ''"; + } elseif ( false === $query['claimed'] ) { + $sql .= " AND p.post_password = ''"; + } elseif ( ! is_null( $query['claimed'] ) ) { + $sql .= ' AND p.post_password = %s'; + $sql_params[] = $query['claimed']; + } + + if ( ! empty( $query['search'] ) ) { + $sql .= ' AND (p.post_title LIKE %s OR p.post_content LIKE %s OR p.post_password LIKE %s)'; + for ( $i = 0; $i < 3; $i++ ) { + $sql_params[] = sprintf( '%%%s%%', $query['search'] ); + } + } + + if ( 'select' === $select_or_count ) { + switch ( $query['orderby'] ) { + case 'hook': + $orderby = 'p.post_title'; + break; + case 'group': + $orderby = 't.name'; + break; + case 'status': + $orderby = 'p.post_status'; + break; + case 'modified': + $orderby = 'p.post_modified'; + break; + case 'claim_id': + $orderby = 'p.post_password'; + break; + case 'schedule': + case 'date': + default: + $orderby = 'p.post_date_gmt'; + break; + } + if ( 'ASC' === strtoupper( $query['order'] ) ) { + $order = 'ASC'; + } else { + $order = 'DESC'; + } + $sql .= " ORDER BY $orderby $order"; + if ( $query['per_page'] > 0 ) { + $sql .= ' LIMIT %d, %d'; + $sql_params[] = $query['offset']; + $sql_params[] = $query['per_page']; + } + } + + return $wpdb->prepare( $sql, $sql_params ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + + /** + * Query for action count or list of action IDs. + * + * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status. + * + * @see ActionScheduler_Store::query_actions for $query arg usage. + * + * @param array $query Query filtering options. + * @param string $query_type Whether to select or count the results. Defaults to select. + * + * @return string|array|null The IDs of actions matching the query. Null on failure. + */ + public function query_actions( $query = array(), $query_type = 'select' ) { + /** + * Global $wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + $sql = $this->get_query_actions_sql( $query, $query_type ); + + return ( 'count' === $query_type ) ? $wpdb->get_var( $sql ) : $wpdb->get_col( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared + } + + /** + * Get a count of all actions in the store, grouped by status + * + * @return array + */ + public function action_counts() { + + $action_counts_by_status = array(); + $action_stati_and_labels = $this->get_status_labels(); + $posts_count_by_status = (array) wp_count_posts( self::POST_TYPE, 'readable' ); + + foreach ( $posts_count_by_status as $post_status_name => $count ) { + + try { + $action_status_name = $this->get_action_status_by_post_status( $post_status_name ); + } catch ( Exception $e ) { + // Ignore any post statuses that aren't for actions. + continue; + } + if ( array_key_exists( $action_status_name, $action_stati_and_labels ) ) { + $action_counts_by_status[ $action_status_name ] = $count; + } + } + + return $action_counts_by_status; + } + + /** + * Cancel action. + * + * @param int $action_id Action ID. + * + * @throws InvalidArgumentException If $action_id is not identified. + */ + public function cancel_action( $action_id ) { + $post = get_post( $action_id ); + if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) { + /* translators: %s is the action ID */ + throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to cancel this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + do_action( 'action_scheduler_canceled_action', $action_id ); + add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 ); + wp_trash_post( $action_id ); + remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 ); + } + + /** + * Delete action. + * + * @param int $action_id Action ID. + * @return void + * @throws InvalidArgumentException If action is not identified. + */ + public function delete_action( $action_id ) { + $post = get_post( $action_id ); + if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) { + /* translators: %s is the action ID */ + throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to delete this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + do_action( 'action_scheduler_deleted_action', $action_id ); + + wp_delete_post( $action_id, true ); + } + + /** + * Get date for claim id. + * + * @param int $action_id Action ID. + * @return ActionScheduler_DateTime The date the action is schedule to run, or the date that it ran. + */ + public function get_date( $action_id ) { + $next = $this->get_date_gmt( $action_id ); + return ActionScheduler_TimezoneHelper::set_local_timezone( $next ); + } + + /** + * Get Date GMT. + * + * @param int $action_id Action ID. + * + * @throws InvalidArgumentException If $action_id is not identified. + * @return ActionScheduler_DateTime The date the action is schedule to run, or the date that it ran. + */ + public function get_date_gmt( $action_id ) { + $post = get_post( $action_id ); + if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) { + /* translators: %s is the action ID */ + throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to determine the date of this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + if ( 'publish' === $post->post_status ) { + return as_get_datetime_object( $post->post_modified_gmt ); + } else { + return as_get_datetime_object( $post->post_date_gmt ); + } + } + + /** + * Stake claim. + * + * @param int $max_actions Maximum number of actions. + * @param DateTime|null $before_date Jobs must be schedule before this date. Defaults to now. + * @param array $hooks Claim only actions with a hook or hooks. + * @param string $group Claim only actions in the given group. + * + * @return ActionScheduler_ActionClaim + * @throws RuntimeException When there is an error staking a claim. + * @throws InvalidArgumentException When the given group is not valid. + */ + public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) { + $this->claim_before_date = $before_date; + $claim_id = $this->generate_claim_id(); + $this->claim_actions( $claim_id, $max_actions, $before_date, $hooks, $group ); + $action_ids = $this->find_actions_by_claim_id( $claim_id ); + $this->claim_before_date = null; + + return new ActionScheduler_ActionClaim( $claim_id, $action_ids ); + } + + /** + * Get claim count. + * + * @return int + */ + public function get_claim_count() { + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT(DISTINCT post_password) FROM {$wpdb->posts} WHERE post_password != '' AND post_type = %s AND post_status IN ('in-progress','pending')", + array( self::POST_TYPE ) + ) + ); + } + + /** + * Generate claim id. + * + * @return string + */ + protected function generate_claim_id() { + $claim_id = md5( microtime( true ) . wp_rand( 0, 1000 ) ); + return substr( $claim_id, 0, 20 ); // to fit in db field with 20 char limit. + } + + /** + * Claim actions. + * + * @param string $claim_id Claim ID. + * @param int $limit Limit. + * @param DateTime|null $before_date Should use UTC timezone. + * @param array $hooks Claim only actions with a hook or hooks. + * @param string $group Claim only actions in the given group. + * + * @return int The number of actions that were claimed. + * @throws RuntimeException When there is a database error. + */ + protected function claim_actions( $claim_id, $limit, ?DateTime $before_date = null, $hooks = array(), $group = '' ) { + // Set up initial variables. + $date = null === $before_date ? as_get_datetime_object() : clone $before_date; + $limit_ids = ! empty( $group ); + $ids = $limit_ids ? $this->get_actions_by_group( $group, $limit, $date ) : array(); + + // If limiting by IDs and no posts found, then return early since we have nothing to update. + if ( $limit_ids && 0 === count( $ids ) ) { + return 0; + } + + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + /* + * Build up custom query to update the affected posts. Parameters are built as a separate array + * to make it easier to identify where they are in the query. + * + * We can't use $wpdb->update() here because of the "ID IN ..." clause. + */ + $update = "UPDATE {$wpdb->posts} SET post_password = %s, post_modified_gmt = %s, post_modified = %s"; + $params = array( + $claim_id, + current_time( 'mysql', true ), + current_time( 'mysql' ), + ); + + // Build initial WHERE clause. + $where = "WHERE post_type = %s AND post_status = %s AND post_password = ''"; + $params[] = self::POST_TYPE; + $params[] = ActionScheduler_Store::STATUS_PENDING; + + if ( ! empty( $hooks ) ) { + $placeholders = array_fill( 0, count( $hooks ), '%s' ); + $where .= ' AND post_title IN (' . join( ', ', $placeholders ) . ')'; + $params = array_merge( $params, array_values( $hooks ) ); + } + + /* + * Add the IDs to the WHERE clause. IDs not escaped because they came directly from a prior DB query. + * + * If we're not limiting by IDs, then include the post_date_gmt clause. + */ + if ( $limit_ids ) { + $where .= ' AND ID IN (' . join( ',', $ids ) . ')'; + } else { + $where .= ' AND post_date_gmt <= %s'; + $params[] = $date->format( 'Y-m-d H:i:s' ); + } + + // Add the ORDER BY clause and,ms limit. + $order = 'ORDER BY menu_order ASC, post_date_gmt ASC, ID ASC LIMIT %d'; + $params[] = $limit; + + // Run the query and gather results. + $rows_affected = $wpdb->query( $wpdb->prepare( "{$update} {$where} {$order}", $params ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare + + if ( false === $rows_affected ) { + throw new RuntimeException( __( 'Unable to claim actions. Database error.', 'action-scheduler' ) ); + } + + return (int) $rows_affected; + } + + /** + * Get IDs of actions within a certain group and up to a certain date/time. + * + * @param string $group The group to use in finding actions. + * @param int $limit The number of actions to retrieve. + * @param DateTime $date DateTime object representing cutoff time for actions. Actions retrieved will be + * up to and including this DateTime. + * + * @return array IDs of actions in the appropriate group and before the appropriate time. + * @throws InvalidArgumentException When the group does not exist. + */ + protected function get_actions_by_group( $group, $limit, DateTime $date ) { + // Ensure the group exists before continuing. + if ( ! term_exists( $group, self::GROUP_TAXONOMY ) ) { + /* translators: %s is the group name */ + throw new InvalidArgumentException( sprintf( __( 'The group "%s" does not exist.', 'action-scheduler' ), $group ) ); + } + + // Set up a query for post IDs to use later. + $query = new WP_Query(); + $query_args = array( + 'fields' => 'ids', + 'post_type' => self::POST_TYPE, + 'post_status' => ActionScheduler_Store::STATUS_PENDING, + 'has_password' => false, + 'posts_per_page' => $limit * 3, + 'suppress_filters' => true, // phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.SuppressFilters_suppress_filters + 'no_found_rows' => true, + 'orderby' => array( + 'menu_order' => 'ASC', + 'date' => 'ASC', + 'ID' => 'ASC', + ), + 'date_query' => array( + 'column' => 'post_date_gmt', + 'before' => $date->format( 'Y-m-d H:i' ), + 'inclusive' => true, + ), + 'tax_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery + array( + 'taxonomy' => self::GROUP_TAXONOMY, + 'field' => 'slug', + 'terms' => $group, + 'include_children' => false, + ), + ), + ); + + return $query->query( $query_args ); + } + + /** + * Find actions by claim ID. + * + * @param string $claim_id Claim ID. + * @return array + */ + public function find_actions_by_claim_id( $claim_id ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + $action_ids = array(); + $before_date = isset( $this->claim_before_date ) ? $this->claim_before_date : as_get_datetime_object(); + $cut_off = $before_date->format( 'Y-m-d H:i:s' ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $results = $wpdb->get_results( + $wpdb->prepare( + "SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s", + array( + self::POST_TYPE, + $claim_id, + ) + ) + ); + + // Verify that the scheduled date for each action is within the expected bounds (in some unusual + // cases, we cannot depend on MySQL to honor all of the WHERE conditions we specify). + foreach ( $results as $claimed_action ) { + if ( $claimed_action->post_date_gmt <= $cut_off ) { + $action_ids[] = absint( $claimed_action->ID ); + } + } + + return $action_ids; + } + + /** + * Release pending actions from a claim. + * + * @param ActionScheduler_ActionClaim $claim Claim object to release. + * @return void + * @throws RuntimeException When the claim is not unlocked. + */ + public function release_claim( ActionScheduler_ActionClaim $claim ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + $claim_id = $claim->get_id(); + if ( trim( $claim_id ) === '' ) { + // Verify that the claim_id is valid before attempting to release it. + return; + } + + // Only attempt to release pending actions to be claimed again. Running and complete actions are no longer relevant outside of admin/analytics. + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $action_ids = $wpdb->get_col( + $wpdb->prepare( + "SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s AND post_status = %s", + self::POST_TYPE, + $claim_id, + self::STATUS_PENDING + ) + ); + + if ( empty( $action_ids ) ) { + return; // nothing to do. + } + $action_id_string = implode( ',', array_map( 'intval', $action_ids ) ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $result = $wpdb->query( + $wpdb->prepare( + "UPDATE {$wpdb->posts} SET post_password = '' WHERE ID IN ($action_id_string) AND post_password = %s", //phpcs:ignore + array( + $claim->get_id(), + ) + ) + ); + if ( false === $result ) { + /* translators: %s: claim ID */ + throw new RuntimeException( sprintf( __( 'Unable to unlock claim %s. Database error.', 'action-scheduler' ), $claim->get_id() ) ); + } + } + + /** + * Unclaim action. + * + * @param string $action_id Action ID. + * @throws RuntimeException When unable to unlock claim on action ID. + */ + public function unclaim_action( $action_id ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $result = $wpdb->query( + $wpdb->prepare( + "UPDATE {$wpdb->posts} SET post_password = '' WHERE ID = %d AND post_type = %s", + $action_id, + self::POST_TYPE + ) + ); + if ( false === $result ) { + /* translators: %s: action ID */ + throw new RuntimeException( sprintf( __( 'Unable to unlock claim on action %s. Database error.', 'action-scheduler' ), $action_id ) ); + } + } + + /** + * Mark failure on action. + * + * @param int $action_id Action ID. + * + * @return void + * @throws RuntimeException When unable to mark failure on action ID. + */ + public function mark_failure( $action_id ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $result = $wpdb->query( + $wpdb->prepare( "UPDATE {$wpdb->posts} SET post_status = %s WHERE ID = %d AND post_type = %s", self::STATUS_FAILED, $action_id, self::POST_TYPE ) + ); + if ( false === $result ) { + /* translators: %s: action ID */ + throw new RuntimeException( sprintf( __( 'Unable to mark failure on action %s. Database error.', 'action-scheduler' ), $action_id ) ); + } + } + + /** + * Return an action's claim ID, as stored in the post password column + * + * @param int $action_id Action ID. + * @return mixed + */ + public function get_claim_id( $action_id ) { + return $this->get_post_column( $action_id, 'post_password' ); + } + + /** + * Return an action's status, as stored in the post status column + * + * @param int $action_id Action ID. + * + * @return mixed + * @throws InvalidArgumentException When the action ID is invalid. + */ + public function get_status( $action_id ) { + $status = $this->get_post_column( $action_id, 'post_status' ); + + if ( null === $status ) { + throw new InvalidArgumentException( __( 'Invalid action ID. No status found.', 'action-scheduler' ) ); + } + + return $this->get_action_status_by_post_status( $status ); + } + + /** + * Get post column + * + * @param string $action_id Action ID. + * @param string $column_name Column Name. + * + * @return string|null + */ + private function get_post_column( $action_id, $column_name ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_var( + $wpdb->prepare( + "SELECT {$column_name} FROM {$wpdb->posts} WHERE ID=%d AND post_type=%s", // phpcs:ignore + $action_id, + self::POST_TYPE + ) + ); + } + + /** + * Log Execution. + * + * @throws Exception If the action status cannot be updated to self::STATUS_RUNNING ('in-progress'). + * + * @param string $action_id Action ID. + */ + public function log_execution( $action_id ) { + /** + * Global wpdb object. + * + * @var wpdb $wpdb + */ + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $status_updated = $wpdb->query( + $wpdb->prepare( + "UPDATE {$wpdb->posts} SET menu_order = menu_order+1, post_status=%s, post_modified_gmt = %s, post_modified = %s WHERE ID = %d AND post_type = %s", + self::STATUS_RUNNING, + current_time( 'mysql', true ), + current_time( 'mysql' ), + $action_id, + self::POST_TYPE + ) + ); + + if ( ! $status_updated ) { + throw new Exception( + sprintf( + /* translators: 1: action ID. 2: status slug. */ + __( 'Unable to update the status of action %1$d to %2$s.', 'action-scheduler' ), + $action_id, + self::STATUS_RUNNING + ) + ); + } + } + + /** + * Record that an action was completed. + * + * @param string $action_id ID of the completed action. + * + * @throws InvalidArgumentException When the action ID is invalid. + * @throws RuntimeException When there was an error executing the action. + */ + public function mark_complete( $action_id ) { + $post = get_post( $action_id ); + if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) { + /* translators: %s is the action ID */ + throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having completed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) ); + } + add_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10, 1 ); + add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 ); + $result = wp_update_post( + array( + 'ID' => $action_id, + 'post_status' => 'publish', + ), + true + ); + remove_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10 ); + remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 ); + if ( is_wp_error( $result ) ) { + throw new RuntimeException( $result->get_error_message() ); + } + + /** + * Fires after a scheduled action has been completed. + * + * @since 3.4.2 + * + * @param int $action_id Action ID. + */ + do_action( 'action_scheduler_completed_action', $action_id ); + } + + /** + * Mark action as migrated when there is an error deleting the action. + * + * @param int $action_id Action ID. + */ + public function mark_migrated( $action_id ) { + wp_update_post( + array( + 'ID' => $action_id, + 'post_status' => 'migrated', + ) + ); + } + + /** + * Determine whether the post store can be migrated. + * + * @param [type] $setting - Setting value. + * @return bool + */ + public function migration_dependencies_met( $setting ) { + global $wpdb; + + $dependencies_met = get_transient( self::DEPENDENCIES_MET ); + if ( empty( $dependencies_met ) ) { + $maximum_args_length = apply_filters( 'action_scheduler_maximum_args_length', 191 ); + $found_action = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND CHAR_LENGTH(post_content) > %d LIMIT 1", + $maximum_args_length, + self::POST_TYPE + ) + ); + $dependencies_met = $found_action ? 'no' : 'yes'; + set_transient( self::DEPENDENCIES_MET, $dependencies_met, DAY_IN_SECONDS ); + } + + return 'yes' === $dependencies_met ? $setting : false; + } + + /** + * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4. + * + * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However, + * as we prepare to move to custom tables, and can use an indexed VARCHAR column instead, we want to warn + * developers of this impending requirement. + * + * @param ActionScheduler_Action $action Action object. + */ + protected function validate_action( ActionScheduler_Action $action ) { + try { + parent::validate_action( $action ); + } catch ( Exception $e ) { + /* translators: %s is the error message */ + $message = sprintf( __( '%s Support for strings longer than this will be removed in a future version.', 'action-scheduler' ), $e->getMessage() ); + _doing_it_wrong( 'ActionScheduler_Action::$args', esc_html( $message ), '2.1.0' ); + } + } + + /** + * (@codeCoverageIgnore) + */ + public function init() { + add_filter( 'action_scheduler_migration_dependencies_met', array( $this, 'migration_dependencies_met' ) ); + + $post_type_registrar = new ActionScheduler_wpPostStore_PostTypeRegistrar(); + $post_type_registrar->register(); + + $post_status_registrar = new ActionScheduler_wpPostStore_PostStatusRegistrar(); + $post_status_registrar->register(); + + $taxonomy_registrar = new ActionScheduler_wpPostStore_TaxonomyRegistrar(); + $taxonomy_registrar->register(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php new file mode 100644 index 0000000..5f1f1fc --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php @@ -0,0 +1,63 @@ +post_status_args(), $this->post_status_running_labels() ) ); + register_post_status( ActionScheduler_Store::STATUS_FAILED, array_merge( $this->post_status_args(), $this->post_status_failed_labels() ) ); + } + + /** + * Build the args array for the post type definition + * + * @return array + */ + protected function post_status_args() { + $args = array( + 'public' => false, + 'exclude_from_search' => false, + 'show_in_admin_all_list' => true, + 'show_in_admin_status_list' => true, + ); + + return apply_filters( 'action_scheduler_post_status_args', $args ); + } + + /** + * Build the args array for the post type definition + * + * @return array + */ + protected function post_status_failed_labels() { + $labels = array( + 'label' => _x( 'Failed', 'post', 'action-scheduler' ), + /* translators: %s: count */ + 'label_count' => _n_noop( 'Failed (%s)', 'Failed (%s)', 'action-scheduler' ), + ); + + return apply_filters( 'action_scheduler_post_status_failed_labels', $labels ); + } + + /** + * Build the args array for the post type definition + * + * @return array + */ + protected function post_status_running_labels() { + $labels = array( + 'label' => _x( 'In-Progress', 'post', 'action-scheduler' ), + /* translators: %s: count */ + 'label_count' => _n_noop( 'In-Progress (%s)', 'In-Progress (%s)', 'action-scheduler' ), + ); + + return apply_filters( 'action_scheduler_post_status_running_labels', $labels ); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php new file mode 100644 index 0000000..5252294 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php @@ -0,0 +1,53 @@ +post_type_args() ); + } + + /** + * Build the args array for the post type definition + * + * @return array + */ + protected function post_type_args() { + $args = array( + 'label' => __( 'Scheduled Actions', 'action-scheduler' ), + 'description' => __( 'Scheduled actions are hooks triggered on a certain date and time.', 'action-scheduler' ), + 'public' => false, + 'map_meta_cap' => true, + 'hierarchical' => false, + 'supports' => array( 'title', 'editor', 'comments' ), + 'rewrite' => false, + 'query_var' => false, + 'can_export' => true, + 'ep_mask' => EP_NONE, + 'labels' => array( + 'name' => __( 'Scheduled Actions', 'action-scheduler' ), + 'singular_name' => __( 'Scheduled Action', 'action-scheduler' ), + 'menu_name' => _x( 'Scheduled Actions', 'Admin menu name', 'action-scheduler' ), + 'add_new' => __( 'Add', 'action-scheduler' ), + 'add_new_item' => __( 'Add New Scheduled Action', 'action-scheduler' ), + 'edit' => __( 'Edit', 'action-scheduler' ), + 'edit_item' => __( 'Edit Scheduled Action', 'action-scheduler' ), + 'new_item' => __( 'New Scheduled Action', 'action-scheduler' ), + 'view' => __( 'View Action', 'action-scheduler' ), + 'view_item' => __( 'View Action', 'action-scheduler' ), + 'search_items' => __( 'Search Scheduled Actions', 'action-scheduler' ), + 'not_found' => __( 'No actions found', 'action-scheduler' ), + 'not_found_in_trash' => __( 'No actions found in trash', 'action-scheduler' ), + ), + ); + + $args = apply_filters( 'action_scheduler_post_type_args', $args ); + return $args; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php new file mode 100644 index 0000000..e100fc9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php @@ -0,0 +1,33 @@ +taxonomy_args() ); + } + + /** + * Get taxonomy arguments. + */ + protected function taxonomy_args() { + $args = array( + 'label' => __( 'Action Group', 'action-scheduler' ), + 'public' => false, + 'hierarchical' => false, + 'show_admin_column' => true, + 'query_var' => false, + 'rewrite' => false, + ); + + $args = apply_filters( 'action_scheduler_taxonomy_args', $args ); + return $args; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.php new file mode 100644 index 0000000..f0e04fe --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.php @@ -0,0 +1,126 @@ +source = $source_store; + $this->destination = $destination_store; + $this->log_migrator = $log_migrator; + } + + /** + * Migrate an action. + * + * @param int $source_action_id Action ID. + * + * @return int 0|new action ID + * @throws \RuntimeException When unable to delete action from the source store. + */ + public function migrate( $source_action_id ) { + try { + $action = $this->source->fetch_action( $source_action_id ); + $status = $this->source->get_status( $source_action_id ); + } catch ( \Exception $e ) { + $action = null; + $status = ''; + } + + if ( is_null( $action ) || empty( $status ) || ! $action->get_schedule()->get_date() ) { + // null action or empty status means the fetch operation failed or the action didn't exist. + // null schedule means it's missing vital data. + // delete it and move on. + try { + $this->source->delete_action( $source_action_id ); + } catch ( \Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch + // nothing to do, it didn't exist in the first place. + } + do_action( 'action_scheduler/no_action_to_migrate', $source_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + + return 0; + } + + try { + + // Make sure the last attempt date is set correctly for completed and failed actions. + $last_attempt_date = ( \ActionScheduler_Store::STATUS_PENDING !== $status ) ? $this->source->get_date( $source_action_id ) : null; + + $destination_action_id = $this->destination->save_action( $action, null, $last_attempt_date ); + } catch ( \Exception $e ) { + do_action( 'action_scheduler/migrate_action_failed', $source_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + + return 0; // could not save the action in the new store. + } + + try { + switch ( $status ) { + case \ActionScheduler_Store::STATUS_FAILED: + $this->destination->mark_failure( $destination_action_id ); + break; + case \ActionScheduler_Store::STATUS_CANCELED: + $this->destination->cancel_action( $destination_action_id ); + break; + } + + $this->log_migrator->migrate( $source_action_id, $destination_action_id ); + $this->source->delete_action( $source_action_id ); + + $test_action = $this->source->fetch_action( $source_action_id ); + if ( ! is_a( $test_action, 'ActionScheduler_NullAction' ) ) { + // translators: %s is an action ID. + throw new \RuntimeException( sprintf( __( 'Unable to remove source migrated action %s', 'action-scheduler' ), $source_action_id ) ); + } + do_action( 'action_scheduler/migrated_action', $source_action_id, $destination_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + + return $destination_action_id; + } catch ( \Exception $e ) { + // could not delete from the old store. + $this->source->mark_migrated( $source_action_id ); + + // phpcs:disable WordPress.NamingConventions.ValidHookName.UseUnderscores + do_action( 'action_scheduler/migrate_action_incomplete', $source_action_id, $destination_action_id, $this->source, $this->destination ); + do_action( 'action_scheduler/migrated_action', $source_action_id, $destination_action_id, $this->source, $this->destination ); + // phpcs:enable + + return $destination_action_id; + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php new file mode 100644 index 0000000..66ab997 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php @@ -0,0 +1,52 @@ + $this->get_scheduled_date_string( $action, $last_attempt_date ), + 'last_attempt_local' => $this->get_scheduled_date_string_local( $action, $last_attempt_date ), + ); + + $wpdb->update( $wpdb->actionscheduler_actions, $data, array( 'action_id' => $action_id ), array( '%s', '%s' ), array( '%d' ) ); + } + + return $action_id; + } catch ( \Exception $e ) { + // translators: %s is an error message. + throw new \RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.php new file mode 100644 index 0000000..20aa3d0 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.php @@ -0,0 +1,95 @@ +store = $source_store; + } + + /** + * Retrieve a list of actions. + * + * @param int $count The number of actions to retrieve. + * + * @return int[] A list of action IDs + */ + public function fetch( $count = 10 ) { + foreach ( $this->get_query_strategies( $count ) as $query ) { + $action_ids = $this->store->query_actions( $query ); + if ( ! empty( $action_ids ) ) { + return $action_ids; + } + } + + return array(); + } + + /** + * Generate a list of prioritized of action search parameters. + * + * @param int $count Number of actions to find. + * + * @return array + */ + private function get_query_strategies( $count ) { + $now = as_get_datetime_object(); + $args = array( + 'date' => $now, + 'per_page' => $count, + 'offset' => 0, + 'orderby' => 'date', + 'order' => 'ASC', + ); + + $priorities = array( + Store::STATUS_PENDING, + Store::STATUS_FAILED, + Store::STATUS_CANCELED, + Store::STATUS_COMPLETE, + Store::STATUS_RUNNING, + '', // any other unanticipated status. + ); + + foreach ( $priorities as $status ) { + yield wp_parse_args( + array( + 'status' => $status, + 'date_compare' => '<=', + ), + $args + ); + + yield wp_parse_args( + array( + 'status' => $status, + 'date_compare' => '>=', + ), + $args + ); + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Config.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Config.php new file mode 100644 index 0000000..f16b4c1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Config.php @@ -0,0 +1,196 @@ +source_store ) ) { + throw new \RuntimeException( __( 'Source store must be configured before running a migration', 'action-scheduler' ) ); + } + + return $this->source_store; + } + + /** + * Set the configured source store. + * + * @param ActionScheduler_Store $store Source store object. + */ + public function set_source_store( Store $store ) { + $this->source_store = $store; + } + + /** + * Get the configured source logger. + * + * @return ActionScheduler_Logger + * @throws \RuntimeException When source logger is not configured. + */ + public function get_source_logger() { + if ( empty( $this->source_logger ) ) { + throw new \RuntimeException( __( 'Source logger must be configured before running a migration', 'action-scheduler' ) ); + } + + return $this->source_logger; + } + + /** + * Set the configured source logger. + * + * @param ActionScheduler_Logger $logger Logger object. + */ + public function set_source_logger( Logger $logger ) { + $this->source_logger = $logger; + } + + /** + * Get the configured destination store. + * + * @return ActionScheduler_Store + * @throws \RuntimeException When destination store is not configured. + */ + public function get_destination_store() { + if ( empty( $this->destination_store ) ) { + throw new \RuntimeException( __( 'Destination store must be configured before running a migration', 'action-scheduler' ) ); + } + + return $this->destination_store; + } + + /** + * Set the configured destination store. + * + * @param ActionScheduler_Store $store Action store object. + */ + public function set_destination_store( Store $store ) { + $this->destination_store = $store; + } + + /** + * Get the configured destination logger. + * + * @return ActionScheduler_Logger + * @throws \RuntimeException When destination logger is not configured. + */ + public function get_destination_logger() { + if ( empty( $this->destination_logger ) ) { + throw new \RuntimeException( __( 'Destination logger must be configured before running a migration', 'action-scheduler' ) ); + } + + return $this->destination_logger; + } + + /** + * Set the configured destination logger. + * + * @param ActionScheduler_Logger $logger Logger object. + */ + public function set_destination_logger( Logger $logger ) { + $this->destination_logger = $logger; + } + + /** + * Get flag indicating whether it's a dry run. + * + * @return bool + */ + public function get_dry_run() { + return $this->dry_run; + } + + /** + * Set flag indicating whether it's a dry run. + * + * @param bool $dry_run Dry run toggle. + */ + public function set_dry_run( $dry_run ) { + $this->dry_run = (bool) $dry_run; + } + + /** + * Get progress bar object. + * + * @return ActionScheduler\WPCLI\ProgressBar + */ + public function get_progress_bar() { + return $this->progress_bar; + } + + /** + * Set progress bar object. + * + * @param ActionScheduler\WPCLI\ProgressBar $progress_bar Progress bar object. + */ + public function set_progress_bar( ProgressBar $progress_bar ) { + $this->progress_bar = $progress_bar; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Controller.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Controller.php new file mode 100644 index 0000000..7c3df60 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Controller.php @@ -0,0 +1,245 @@ +migration_scheduler = $migration_scheduler; + $this->store_classname = ''; + } + + /** + * Set the action store class name. + * + * @param string $class Classname of the store class. + * + * @return string + */ + public function get_store_class( $class ) { + if ( \ActionScheduler_DataController::is_migration_complete() ) { + return \ActionScheduler_DataController::DATASTORE_CLASS; + } elseif ( \ActionScheduler_Store::DEFAULT_CLASS !== $class ) { + $this->store_classname = $class; + return $class; + } else { + return 'ActionScheduler_HybridStore'; + } + } + + /** + * Set the action logger class name. + * + * @param string $class Classname of the logger class. + * + * @return string + */ + public function get_logger_class( $class ) { + \ActionScheduler_Store::instance(); + + if ( $this->has_custom_datastore() ) { + $this->logger_classname = $class; + return $class; + } else { + return \ActionScheduler_DataController::LOGGER_CLASS; + } + } + + /** + * Get flag indicating whether a custom datastore is in use. + * + * @return bool + */ + public function has_custom_datastore() { + return (bool) $this->store_classname; + } + + /** + * Set up the background migration process. + * + * @return void + */ + public function schedule_migration() { + $logging_tables = new ActionScheduler_LoggerSchema(); + $store_tables = new ActionScheduler_StoreSchema(); + + /* + * In some unusual cases, the expected tables may not have been created. In such cases + * we do not schedule a migration as doing so will lead to fatal error conditions. + * + * In such cases the user will likely visit the Tools > Scheduled Actions screen to + * investigate, and will see appropriate messaging (this step also triggers an attempt + * to rebuild any missing tables). + * + * @see https://github.com/woocommerce/action-scheduler/issues/653 + */ + if ( + ActionScheduler_DataController::is_migration_complete() + || $this->migration_scheduler->is_migration_scheduled() + || ! $store_tables->tables_exist() + || ! $logging_tables->tables_exist() + ) { + return; + } + + $this->migration_scheduler->schedule_migration(); + } + + /** + * Get the default migration config object + * + * @return ActionScheduler\Migration\Config + */ + public function get_migration_config_object() { + static $config = null; + + if ( ! $config ) { + $source_store = $this->store_classname ? new $this->store_classname() : new \ActionScheduler_wpPostStore(); + $source_logger = $this->logger_classname ? new $this->logger_classname() : new \ActionScheduler_wpCommentLogger(); + + $config = new Config(); + $config->set_source_store( $source_store ); + $config->set_source_logger( $source_logger ); + $config->set_destination_store( new \ActionScheduler_DBStoreMigrator() ); + $config->set_destination_logger( new \ActionScheduler_DBLogger() ); + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + $config->set_progress_bar( new ProgressBar( '', 0 ) ); + } + } + + return apply_filters( 'action_scheduler/migration_config', $config ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Hook dashboard migration notice. + */ + public function hook_admin_notices() { + if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) { + return; + } + add_action( 'admin_notices', array( $this, 'display_migration_notice' ), 10, 0 ); + } + + /** + * Show a dashboard notice that migration is in progress. + */ + public function display_migration_notice() { + printf( '

    %s

    ', esc_html__( 'Action Scheduler migration in progress. The list of scheduled actions may be incomplete.', 'action-scheduler' ) ); + } + + /** + * Add store classes. Hook migration. + */ + private function hook() { + add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 ); + add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 ); + add_action( 'init', array( $this, 'maybe_hook_migration' ) ); + add_action( 'wp_loaded', array( $this, 'schedule_migration' ) ); + + // Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen. + add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 ); + add_action( 'load-woocommerce_page_wc-status', array( $this, 'hook_admin_notices' ), 10, 0 ); + } + + /** + * Possibly hook the migration scheduler action. + */ + public function maybe_hook_migration() { + if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) { + return; + } + + $this->migration_scheduler->hook(); + } + + /** + * Allow datastores to enable migration to AS tables. + */ + public function allow_migration() { + if ( ! \ActionScheduler_DataController::dependencies_met() ) { + return false; + } + + if ( null === $this->migrate_custom_store ) { + $this->migrate_custom_store = apply_filters( 'action_scheduler_migrate_data_store', false ); + } + + return ( ! $this->has_custom_datastore() ) || $this->migrate_custom_store; + } + + /** + * Proceed with the migration if the dependencies have been met. + */ + public static function init() { + if ( \ActionScheduler_DataController::dependencies_met() ) { + self::instance()->hook(); + } + } + + /** + * Singleton factory. + */ + public static function instance() { + if ( ! isset( self::$instance ) ) { + self::$instance = new static( new Scheduler() ); + } + + return self::$instance; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.php new file mode 100644 index 0000000..ab7d670 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.php @@ -0,0 +1,28 @@ +source = $source_logger; + $this->destination = $destination_logger; + } + + /** + * Migrate an action log. + * + * @param int $source_action_id Source logger object. + * @param int $destination_action_id Destination logger object. + */ + public function migrate( $source_action_id, $destination_action_id ) { + $logs = $this->source->get_logs( $source_action_id ); + + foreach ( $logs as $log ) { + if ( absint( $log->get_action_id() ) === absint( $source_action_id ) ) { + $this->destination->log( $destination_action_id, $log->get_message(), $log->get_date() ); + } + } + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Runner.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Runner.php new file mode 100644 index 0000000..85c7e04 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Runner.php @@ -0,0 +1,171 @@ +source_store = $config->get_source_store(); + $this->destination_store = $config->get_destination_store(); + $this->source_logger = $config->get_source_logger(); + $this->destination_logger = $config->get_destination_logger(); + + $this->batch_fetcher = new BatchFetcher( $this->source_store ); + if ( $config->get_dry_run() ) { + $this->log_migrator = new DryRun_LogMigrator( $this->source_logger, $this->destination_logger ); + $this->action_migrator = new DryRun_ActionMigrator( $this->source_store, $this->destination_store, $this->log_migrator ); + } else { + $this->log_migrator = new LogMigrator( $this->source_logger, $this->destination_logger ); + $this->action_migrator = new ActionMigrator( $this->source_store, $this->destination_store, $this->log_migrator ); + } + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + $this->progress_bar = $config->get_progress_bar(); + } + } + + /** + * Run migration batch. + * + * @param int $batch_size Optional batch size. Default 10. + * + * @return int Size of batch processed. + */ + public function run( $batch_size = 10 ) { + $batch = $this->batch_fetcher->fetch( $batch_size ); + $batch_size = count( $batch ); + + if ( ! $batch_size ) { + return 0; + } + + if ( $this->progress_bar ) { + /* translators: %d: amount of actions */ + $this->progress_bar->set_message( sprintf( _n( 'Migrating %d action', 'Migrating %d actions', $batch_size, 'action-scheduler' ), $batch_size ) ); + $this->progress_bar->set_count( $batch_size ); + } + + $this->migrate_actions( $batch ); + + return $batch_size; + } + + /** + * Migration a batch of actions. + * + * @param array $action_ids List of action IDs to migrate. + */ + public function migrate_actions( array $action_ids ) { + do_action( 'action_scheduler/migration_batch_starting', $action_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + + \ActionScheduler::logger()->unhook_stored_action(); + $this->destination_logger->unhook_stored_action(); + + foreach ( $action_ids as $source_action_id ) { + $destination_action_id = $this->action_migrator->migrate( $source_action_id ); + if ( $destination_action_id ) { + $this->destination_logger->log( + $destination_action_id, + sprintf( + /* translators: 1: source action ID 2: source store class 3: destination action ID 4: destination store class */ + __( 'Migrated action with ID %1$d in %2$s to ID %3$d in %4$s', 'action-scheduler' ), + $source_action_id, + get_class( $this->source_store ), + $destination_action_id, + get_class( $this->destination_store ) + ) + ); + } + + if ( $this->progress_bar ) { + $this->progress_bar->tick(); + } + } + + if ( $this->progress_bar ) { + $this->progress_bar->finish(); + } + + \ActionScheduler::logger()->hook_stored_action(); + + do_action( 'action_scheduler/migration_batch_complete', $action_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Initialize destination store and logger. + */ + public function init_destination() { + $this->destination_store->init(); + $this->destination_logger->init(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Scheduler.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Scheduler.php new file mode 100644 index 0000000..d6c320d --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/migration/Scheduler.php @@ -0,0 +1,128 @@ +get_migration_runner(); + $count = $migration_runner->run( $this->get_batch_size() ); + + if ( 0 === $count ) { + $this->mark_complete(); + } else { + $this->schedule_migration( time() + $this->get_schedule_interval() ); + } + } + + /** + * Mark the migration complete. + */ + public function mark_complete() { + $this->unschedule_migration(); + + \ActionScheduler_DataController::mark_migration_complete(); + do_action( 'action_scheduler/migration_complete' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Get a flag indicating whether the migration is scheduled. + * + * @return bool Whether there is a pending action in the store to handle the migration + */ + public function is_migration_scheduled() { + $next = as_next_scheduled_action( self::HOOK ); + + return ! empty( $next ); + } + + /** + * Schedule the migration. + * + * @param int $when Optional timestamp to run the next migration batch. Defaults to now. + * + * @return string The action ID + */ + public function schedule_migration( $when = 0 ) { + $next = as_next_scheduled_action( self::HOOK ); + + if ( ! empty( $next ) ) { + return $next; + } + + if ( empty( $when ) ) { + $when = time() + MINUTE_IN_SECONDS; + } + + return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP ); + } + + /** + * Remove the scheduled migration action. + */ + public function unschedule_migration() { + as_unschedule_action( self::HOOK, null, self::GROUP ); + } + + /** + * Get migration batch schedule interval. + * + * @return int Seconds between migration runs. Defaults to 0 seconds to allow chaining migration via Async Runners. + */ + private function get_schedule_interval() { + return (int) apply_filters( 'action_scheduler/migration_interval', 0 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Get migration batch size. + * + * @return int Number of actions to migrate in each batch. Defaults to 250. + */ + private function get_batch_size() { + return (int) apply_filters( 'action_scheduler/migration_batch_size', 250 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + } + + /** + * Get migration runner object. + * + * @return Runner + */ + private function get_migration_runner() { + $config = Controller::instance()->get_migration_config_object(); + + return new Runner( $config ); + } + +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php new file mode 100644 index 0000000..4f90c83 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php @@ -0,0 +1,63 @@ +__wakeup() for details. + * + * @var null + */ + private $timestamp = null; + + /** + * Calculate when the next instance of this schedule would run based on a given date & time. + * + * @param DateTime $after Timestamp. + * + * @return DateTime|null + */ + public function calculate_next( DateTime $after ) { + return null; + } + + /** + * Cancelled actions should never have a next schedule, even if get_next() + * is called with $after < $this->scheduled_date. + * + * @param DateTime $after Timestamp. + * @return DateTime|null + */ + public function get_next( DateTime $after ) { + return null; + } + + /** + * Action is not recurring. + * + * @return bool + */ + public function is_recurring() { + return false; + } + + /** + * Unserialize recurring schedules serialized/stored prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, schedules used different property names to refer + * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0 + * aligned properties and property names for better inheritance. To maintain backward + * compatibility with schedules serialized and stored prior to 3.0, we need to correctly + * map the old property names with matching visibility. + */ + public function __wakeup() { + if ( ! is_null( $this->timestamp ) ) { + $this->scheduled_timestamp = $this->timestamp; + unset( $this->timestamp ); + } + parent::__wakeup(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php new file mode 100644 index 0000000..6ac43c9 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php @@ -0,0 +1,111 @@ +__wakeup() for details. + * + * @var null + */ + private $start_timestamp = null; + + /** + * Deprecated property @see $this->__wakeup() for details. + * + * @var null + */ + private $cron = null; + + /** + * Wrapper for parent constructor to accept a cron expression string and map it to a CronExpression for this + * objects $recurrence property. + * + * @param DateTime $start The date & time to run the action at or after. If $start aligns with the CronSchedule passed via $recurrence, it will be used. If it does not align, the first matching date after it will be used. + * @param CronExpression|string $recurrence The CronExpression used to calculate the schedule's next instance. + * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance. + */ + public function __construct( DateTime $start, $recurrence, ?DateTime $first = null ) { + if ( ! is_a( $recurrence, 'CronExpression' ) ) { + $recurrence = CronExpression::factory( $recurrence ); + } + + // For backward compatibility, we need to make sure the date is set to the first matching cron date, not whatever date is passed in. Importantly, by passing true as the 3rd param, if $start matches the cron expression, then it will be used. This was previously handled in the now deprecated next() method. + $date = $recurrence->getNextRunDate( $start, 0, true ); + + // parent::__construct() will set this to $date by default, but that may be different to $start now. + $first = empty( $first ) ? $start : $first; + + parent::__construct( $date, $recurrence, $first ); + } + + /** + * Calculate when an instance of this schedule would start based on a given + * date & time using its the CronExpression. + * + * @param DateTime $after Timestamp. + * @return DateTime + */ + protected function calculate_next( DateTime $after ) { + return $this->recurrence->getNextRunDate( $after, 0, false ); + } + + /** + * Get the schedule's recurrence. + * + * @return string + */ + public function get_recurrence() { + return strval( $this->recurrence ); + } + + /** + * Serialize cron schedules with data required prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, recurring schedules used different property names to + * refer to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0 + * aligned properties and property names for better inheritance. To guard against the + * possibility of infinite loops if downgrading to Action Scheduler < 3.0.0, we need to + * also store the data with the old property names so if it's unserialized in AS < 3.0, + * the schedule doesn't end up with a null recurrence. + * + * @return array + */ + public function __sleep() { + + $sleep_params = parent::__sleep(); + + $this->start_timestamp = $this->scheduled_timestamp; + $this->cron = $this->recurrence; + + return array_merge( + $sleep_params, + array( + 'start_timestamp', + 'cron', + ) + ); + } + + /** + * Unserialize cron schedules serialized/stored prior to AS 3.0.0 + * + * For more background, @see ActionScheduler_Abstract_RecurringSchedule::__wakeup(). + */ + public function __wakeup() { + if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->start_timestamp ) ) { + $this->scheduled_timestamp = $this->start_timestamp; + unset( $this->start_timestamp ); + } + + if ( is_null( $this->recurrence ) && ! is_null( $this->cron ) ) { + $this->recurrence = $this->cron; + unset( $this->cron ); + } + parent::__wakeup(); + } +} + diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php new file mode 100644 index 0000000..228ef4c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php @@ -0,0 +1,90 @@ +__wakeup() for details. + * + * @var null + */ + private $start_timestamp = null; + + /** + * Deprecated property @see $this->__wakeup() for details. + * + * @var null + */ + private $interval_in_seconds = null; + + /** + * Calculate when this schedule should start after a given date & time using + * the number of seconds between recurrences. + * + * @param DateTime $after Timestamp. + * @return DateTime + */ + protected function calculate_next( DateTime $after ) { + $after->modify( '+' . (int) $this->get_recurrence() . ' seconds' ); + return $after; + } + + /** + * Schedule interval in seconds. + * + * @return int + */ + public function interval_in_seconds() { + _deprecated_function( __METHOD__, '3.0.0', '(int)ActionScheduler_Abstract_RecurringSchedule::get_recurrence()' ); + return (int) $this->get_recurrence(); + } + + /** + * Serialize interval schedules with data required prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, recurring schedules used different property names to + * refer to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0 + * aligned properties and property names for better inheritance. To guard against the + * possibility of infinite loops if downgrading to Action Scheduler < 3.0.0, we need to + * also store the data with the old property names so if it's unserialized in AS < 3.0, + * the schedule doesn't end up with a null/false/0 recurrence. + * + * @return array + */ + public function __sleep() { + + $sleep_params = parent::__sleep(); + + $this->start_timestamp = $this->scheduled_timestamp; + $this->interval_in_seconds = $this->recurrence; + + return array_merge( + $sleep_params, + array( + 'start_timestamp', + 'interval_in_seconds', + ) + ); + } + + /** + * Unserialize interval schedules serialized/stored prior to AS 3.0.0 + * + * For more background, @see ActionScheduler_Abstract_RecurringSchedule::__wakeup(). + */ + public function __wakeup() { + if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->start_timestamp ) ) { + $this->scheduled_timestamp = $this->start_timestamp; + unset( $this->start_timestamp ); + } + + if ( is_null( $this->recurrence ) && ! is_null( $this->interval_in_seconds ) ) { + $this->recurrence = $this->interval_in_seconds; + unset( $this->interval_in_seconds ); + } + parent::__wakeup(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php new file mode 100644 index 0000000..77c7c4e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php @@ -0,0 +1,39 @@ +scheduled_date = null; + } + + /** + * This schedule has no scheduled DateTime, so we need to override the parent __sleep(). + * + * @return array + */ + public function __sleep() { + return array(); + } + + /** + * Wakeup. + */ + public function __wakeup() { + $this->scheduled_date = null; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.php new file mode 100644 index 0000000..e3803e1 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.php @@ -0,0 +1,22 @@ +__wakeup() for details. + * + * @var null|DateTime + */ + private $timestamp = null; + + /** + * Calculate when this schedule should start after a given date & time using + * the number of seconds between recurrences. + * + * @param DateTime $after Timestamp. + * + * @return DateTime|null + */ + public function calculate_next( DateTime $after ) { + return null; + } + + /** + * Schedule is not recurring. + * + * @return bool + */ + public function is_recurring() { + return false; + } + + /** + * Serialize schedule with data required prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, schedules used different property names to refer + * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0 + * aligned properties and property names for better inheritance. To guard against the + * scheduled date for single actions always being seen as "now" if downgrading to + * Action Scheduler < 3.0.0, we need to also store the data with the old property names + * so if it's unserialized in AS < 3.0, the schedule doesn't end up with a null recurrence. + * + * @return array + */ + public function __sleep() { + + $sleep_params = parent::__sleep(); + + $this->timestamp = $this->scheduled_timestamp; + + return array_merge( + $sleep_params, + array( + 'timestamp', + ) + ); + } + + /** + * Unserialize recurring schedules serialized/stored prior to AS 3.0.0 + * + * Prior to Action Scheduler 3.0.0, schedules used different property names to refer + * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp + * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0 + * aligned properties and property names for better inheritance. To maintain backward + * compatibility with schedules serialized and stored prior to 3.0, we need to correctly + * map the old property names with matching visibility. + */ + public function __wakeup() { + + if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->timestamp ) ) { + $this->scheduled_timestamp = $this->timestamp; + unset( $this->timestamp ); + } + parent::__wakeup(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php new file mode 100644 index 0000000..27e1c7f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php @@ -0,0 +1,101 @@ +tables = array( + self::LOG_TABLE, + ); + } + + /** + * Performs additional setup work required to support this schema. + */ + public function init() { + add_action( 'action_scheduler_before_schema_update', array( $this, 'update_schema_3_0' ), 10, 2 ); + } + + /** + * Get table definition. + * + * @param string $table Table name. + */ + protected function get_table_definition( $table ) { + global $wpdb; + $table_name = $wpdb->$table; + $charset_collate = $wpdb->get_charset_collate(); + switch ( $table ) { + + case self::LOG_TABLE: + $default_date = ActionScheduler_StoreSchema::DEFAULT_DATE; + return "CREATE TABLE $table_name ( + log_id bigint(20) unsigned NOT NULL auto_increment, + action_id bigint(20) unsigned NOT NULL, + message text NOT NULL, + log_date_gmt datetime NULL default '{$default_date}', + log_date_local datetime NULL default '{$default_date}', + PRIMARY KEY (log_id), + KEY action_id (action_id), + KEY log_date_gmt (log_date_gmt) + ) $charset_collate"; + + default: + return ''; + } + } + + /** + * Update the logs table schema, allowing datetime fields to be NULL. + * + * This is needed because the NOT NULL constraint causes a conflict with some versions of MySQL + * configured with sql_mode=NO_ZERO_DATE, which can for instance lead to tables not being created. + * + * Most other schema updates happen via ActionScheduler_Abstract_Schema::update_table(), however + * that method relies on dbDelta() and this change is not possible when using that function. + * + * @param string $table Name of table being updated. + * @param string $db_version The existing schema version of the table. + */ + public function update_schema_3_0( $table, $db_version ) { + global $wpdb; + + if ( 'actionscheduler_logs' !== $table || version_compare( $db_version, '3', '>=' ) ) { + return; + } + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $table_name = $wpdb->prefix . 'actionscheduler_logs'; + $table_list = $wpdb->get_col( "SHOW TABLES LIKE '{$table_name}'" ); + $default_date = ActionScheduler_StoreSchema::DEFAULT_DATE; + + if ( ! empty( $table_list ) ) { + $query = " + ALTER TABLE {$table_name} + MODIFY COLUMN log_date_gmt datetime NULL default '{$default_date}', + MODIFY COLUMN log_date_local datetime NULL default '{$default_date}' + "; + $wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php new file mode 100644 index 0000000..e1d073f --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php @@ -0,0 +1,145 @@ +tables = array( + self::ACTIONS_TABLE, + self::CLAIMS_TABLE, + self::GROUPS_TABLE, + ); + } + + /** + * Performs additional setup work required to support this schema. + */ + public function init() { + add_action( 'action_scheduler_before_schema_update', array( $this, 'update_schema_5_0' ), 10, 2 ); + } + + /** + * Get table definition. + * + * @param string $table Table name. + */ + protected function get_table_definition( $table ) { + global $wpdb; + $table_name = $wpdb->$table; + $charset_collate = $wpdb->get_charset_collate(); + $default_date = self::DEFAULT_DATE; + // phpcs:ignore Squiz.PHP.CommentedOutCode + $max_index_length = 191; // @see wp_get_db_schema() + + $hook_status_scheduled_date_gmt_max_index_length = $max_index_length - 20 - 8; // - status, - scheduled_date_gmt + + switch ( $table ) { + + case self::ACTIONS_TABLE: + return "CREATE TABLE {$table_name} ( + action_id bigint(20) unsigned NOT NULL auto_increment, + hook varchar(191) NOT NULL, + status varchar(20) NOT NULL, + scheduled_date_gmt datetime NULL default '{$default_date}', + scheduled_date_local datetime NULL default '{$default_date}', + priority tinyint unsigned NOT NULL default '10', + args varchar($max_index_length), + schedule longtext, + group_id bigint(20) unsigned NOT NULL default '0', + attempts int(11) NOT NULL default '0', + last_attempt_gmt datetime NULL default '{$default_date}', + last_attempt_local datetime NULL default '{$default_date}', + claim_id bigint(20) unsigned NOT NULL default '0', + extended_args varchar(8000) DEFAULT NULL, + PRIMARY KEY (action_id), + KEY hook_status_scheduled_date_gmt (hook($hook_status_scheduled_date_gmt_max_index_length), status, scheduled_date_gmt), + KEY status_scheduled_date_gmt (status, scheduled_date_gmt), + KEY scheduled_date_gmt (scheduled_date_gmt), + KEY args (args($max_index_length)), + KEY group_id (group_id), + KEY last_attempt_gmt (last_attempt_gmt), + KEY `claim_id_status_priority_scheduled_date_gmt` (`claim_id`,`status`,`priority`,`scheduled_date_gmt`), + KEY `status_last_attempt_gmt` (`status`,`last_attempt_gmt`), + KEY `status_claim_id` (`status`,`claim_id`) + ) $charset_collate"; + + case self::CLAIMS_TABLE: + return "CREATE TABLE {$table_name} ( + claim_id bigint(20) unsigned NOT NULL auto_increment, + date_created_gmt datetime NULL default '{$default_date}', + PRIMARY KEY (claim_id), + KEY date_created_gmt (date_created_gmt) + ) $charset_collate"; + + case self::GROUPS_TABLE: + return "CREATE TABLE {$table_name} ( + group_id bigint(20) unsigned NOT NULL auto_increment, + slug varchar(255) NOT NULL, + PRIMARY KEY (group_id), + KEY slug (slug($max_index_length)) + ) $charset_collate"; + + default: + return ''; + } + } + + /** + * Update the actions table schema, allowing datetime fields to be NULL. + * + * This is needed because the NOT NULL constraint causes a conflict with some versions of MySQL + * configured with sql_mode=NO_ZERO_DATE, which can for instance lead to tables not being created. + * + * Most other schema updates happen via ActionScheduler_Abstract_Schema::update_table(), however + * that method relies on dbDelta() and this change is not possible when using that function. + * + * @param string $table Name of table being updated. + * @param string $db_version The existing schema version of the table. + */ + public function update_schema_5_0( $table, $db_version ) { + global $wpdb; + + if ( 'actionscheduler_actions' !== $table || version_compare( $db_version, '5', '>=' ) ) { + return; + } + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $table_name = $wpdb->prefix . 'actionscheduler_actions'; + $table_list = $wpdb->get_col( "SHOW TABLES LIKE '{$table_name}'" ); + $default_date = self::DEFAULT_DATE; + + if ( ! empty( $table_list ) ) { + $query = " + ALTER TABLE {$table_name} + MODIFY COLUMN scheduled_date_gmt datetime NULL default '{$default_date}', + MODIFY COLUMN scheduled_date_local datetime NULL default '{$default_date}', + MODIFY COLUMN last_attempt_gmt datetime NULL default '{$default_date}', + MODIFY COLUMN last_attempt_local datetime NULL default '{$default_date}' + "; + $wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared + } + // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php new file mode 100644 index 0000000..e24ddca --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php @@ -0,0 +1,27 @@ +get_date(); + $replacement_method = 'get_date()'; + } else { + $return_value = $this->get_next( $after ); + $replacement_method = 'get_next( $after )'; + } + + _deprecated_function( __METHOD__, '3.0.0', __CLASS__ . '::' . $replacement_method ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + + return $return_value; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php new file mode 100644 index 0000000..02dc8b7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php @@ -0,0 +1,50 @@ +mark_failure( $action_id ); + } + + /** + * Add base hooks + * + * @since 2.2.6 + */ + protected static function hook() { + _deprecated_function( __METHOD__, '3.0.0' ); + } + + /** + * Remove base hooks + * + * @since 2.2.6 + */ + protected static function unhook() { + _deprecated_function( __METHOD__, '3.0.0' ); + } + + /** + * Get the site's local time. + * + * @deprecated 2.1.0 + * @return DateTimeZone + */ + protected function get_local_timezone() { + _deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' ); + return ActionScheduler_TimezoneHelper::get_local_timezone(); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/functions.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/functions.php new file mode 100644 index 0000000..76ac019 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/deprecated/functions.php @@ -0,0 +1,129 @@ + '' - the name of the action that will be triggered + * 'args' => NULL - the args array that will be passed with the action + * 'date' => NULL - the scheduled date of the action. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone. + * 'date_compare' => '<=' - operator for testing "date". accepted values are '!=', '>', '>=', '<', '<=', '=' + * 'modified' => NULL - the date the action was last updated. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone. + * 'modified_compare' => '<=' - operator for testing "modified". accepted values are '!=', '>', '>=', '<', '<=', '=' + * 'group' => '' - the group the action belongs to + * 'status' => '' - ActionScheduler_Store::STATUS_COMPLETE or ActionScheduler_Store::STATUS_PENDING + * 'claimed' => NULL - TRUE to find claimed actions, FALSE to find unclaimed actions, a string to find a specific claim ID + * 'per_page' => 5 - Number of results to return + * 'offset' => 0 + * 'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', or 'date' + * 'order' => 'ASC'. + * @param string $return_format OBJECT, ARRAY_A, or ids. + * + * @deprecated 2.1.0 + * + * @return array + */ +function wc_get_scheduled_actions( $args = array(), $return_format = OBJECT ) { + _deprecated_function( __FUNCTION__, '2.1.0', 'as_get_scheduled_actions()' ); + return as_get_scheduled_actions( $args, $return_format ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/functions.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/functions.php new file mode 100644 index 0000000..d78c23a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/functions.php @@ -0,0 +1,513 @@ +create( + array( + 'type' => 'async', + 'hook' => $hook, + 'arguments' => $args, + 'group' => $group, + 'unique' => $unique, + 'priority' => $priority, + ) + ); +} + +/** + * Schedule an action to run one time + * + * @param int $timestamp When the job will run. + * @param string $hook The hook to trigger. + * @param array $args Arguments to pass when the hook triggers. + * @param string $group The group to assign this job to. + * @param bool $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters. + * @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255. + * + * @return int The action ID. Zero if there was an error scheduling the action. + */ +function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return 0; + } + + /** + * Provides an opportunity to short-circuit the default process for enqueuing single + * actions. + * + * Returning a value other than null from the filter will short-circuit the normal + * process. The expectation in such a scenario is that callbacks will return an integer + * representing the scheduled action ID (scheduled using some alternative process) or else + * zero. + * + * @param int|null $pre_option The value to return instead of the option value. + * @param int $timestamp When the action will run. + * @param string $hook Action hook. + * @param array $args Action arguments. + * @param string $group Action group. + * @param int $priorities Action priority. + * @param bool $unique Unique action. + */ + $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority, $unique ); + if ( null !== $pre ) { + return is_int( $pre ) ? $pre : 0; + } + + return ActionScheduler::factory()->create( + array( + 'type' => 'single', + 'hook' => $hook, + 'arguments' => $args, + 'when' => $timestamp, + 'group' => $group, + 'unique' => $unique, + 'priority' => $priority, + ) + ); +} + +/** + * Schedule a recurring action + * + * @param int $timestamp When the first instance of the job will run. + * @param int $interval_in_seconds How long to wait between runs. + * @param string $hook The hook to trigger. + * @param array $args Arguments to pass when the hook triggers. + * @param string $group The group to assign this job to. + * @param bool $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters. + * @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255. + * + * @return int The action ID. Zero if there was an error scheduling the action. + */ +function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return 0; + } + + $interval = (int) $interval_in_seconds; + + // We expect an integer and allow it to be passed using float and string types, but otherwise + // should reject unexpected values. + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison + if ( ! is_numeric( $interval_in_seconds ) || $interval_in_seconds != $interval ) { + _doing_it_wrong( + __METHOD__, + sprintf( + /* translators: 1: provided value 2: provided type. */ + esc_html__( 'An integer was expected but "%1$s" (%2$s) was received.', 'action-scheduler' ), + esc_html( $interval_in_seconds ), + esc_html( gettype( $interval_in_seconds ) ) + ), + '3.6.0' + ); + + return 0; + } + + /** + * Provides an opportunity to short-circuit the default process for enqueuing recurring + * actions. + * + * Returning a value other than null from the filter will short-circuit the normal + * process. The expectation in such a scenario is that callbacks will return an integer + * representing the scheduled action ID (scheduled using some alternative process) or else + * zero. + * + * @param int|null $pre_option The value to return instead of the option value. + * @param int $timestamp When the action will run. + * @param int $interval_in_seconds How long to wait between runs. + * @param string $hook Action hook. + * @param array $args Action arguments. + * @param string $group Action group. + * @param int $priority Action priority. + * @param bool $unique Unique action. + */ + $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority, $unique ); + if ( null !== $pre ) { + return is_int( $pre ) ? $pre : 0; + } + + return ActionScheduler::factory()->create( + array( + 'type' => 'recurring', + 'hook' => $hook, + 'arguments' => $args, + 'when' => $timestamp, + 'pattern' => $interval_in_seconds, + 'group' => $group, + 'unique' => $unique, + 'priority' => $priority, + ) + ); +} + +/** + * Schedule an action that recurs on a cron-like schedule. + * + * @param int $timestamp The first instance of the action will be scheduled + * to run at a time calculated after this timestamp matching the cron + * expression. This can be used to delay the first instance of the action. + * @param string $schedule A cron-link schedule string. + * @see http://en.wikipedia.org/wiki/Cron + * * * * * * * + * ┬ ┬ ┬ ┬ ┬ ┬ + * | | | | | | + * | | | | | + year [optional] + * | | | | +----- day of week (0 - 7) (Sunday=0 or 7) + * | | | +---------- month (1 - 12) + * | | +--------------- day of month (1 - 31) + * | +-------------------- hour (0 - 23) + * +------------------------- min (0 - 59) + * @param string $hook The hook to trigger. + * @param array $args Arguments to pass when the hook triggers. + * @param string $group The group to assign this job to. + * @param bool $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters. + * @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255. + * + * @return int The action ID. Zero if there was an error scheduling the action. + */ +function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return 0; + } + + /** + * Provides an opportunity to short-circuit the default process for enqueuing cron + * actions. + * + * Returning a value other than null from the filter will short-circuit the normal + * process. The expectation in such a scenario is that callbacks will return an integer + * representing the scheduled action ID (scheduled using some alternative process) or else + * zero. + * + * @param int|null $pre_option The value to return instead of the option value. + * @param int $timestamp When the action will run. + * @param string $schedule Cron-like schedule string. + * @param string $hook Action hook. + * @param array $args Action arguments. + * @param string $group Action group. + * @param int $priority Action priority. + * @param bool $unique Unique action. + */ + $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority, $unique ); + if ( null !== $pre ) { + return is_int( $pre ) ? $pre : 0; + } + + return ActionScheduler::factory()->create( + array( + 'type' => 'cron', + 'hook' => $hook, + 'arguments' => $args, + 'when' => $timestamp, + 'pattern' => $schedule, + 'group' => $group, + 'unique' => $unique, + 'priority' => $priority, + ) + ); +} + +/** + * Cancel the next occurrence of a scheduled action. + * + * While only the next instance of a recurring or cron action is unscheduled by this method, that will also prevent + * all future instances of that recurring or cron action from being run. Recurring and cron actions are scheduled in + * a sequence instead of all being scheduled at once. Each successive occurrence of a recurring action is scheduled + * only after the former action is run. If the next instance is never run, because it's unscheduled by this function, + * then the following instance will never be scheduled (or exist), which is effectively the same as being unscheduled + * by this method also. + * + * @param string $hook The hook that the job will trigger. + * @param array $args Args that would have been passed to the job. + * @param string $group The group the job is assigned to. + * + * @return int|null The scheduled action ID if a scheduled action was found, or null if no matching action found. + */ +function as_unschedule_action( $hook, $args = array(), $group = '' ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return 0; + } + $params = array( + 'hook' => $hook, + 'status' => ActionScheduler_Store::STATUS_PENDING, + 'orderby' => 'date', + 'order' => 'ASC', + 'group' => $group, + ); + if ( is_array( $args ) ) { + $params['args'] = $args; + } + + $action_id = ActionScheduler::store()->query_action( $params ); + + if ( $action_id ) { + try { + ActionScheduler::store()->cancel_action( $action_id ); + } catch ( Exception $exception ) { + ActionScheduler::logger()->log( + $action_id, + sprintf( + /* translators: %1$s is the name of the hook to be cancelled, %2$s is the exception message. */ + __( 'Caught exception while cancelling action "%1$s": %2$s', 'action-scheduler' ), + $hook, + $exception->getMessage() + ) + ); + + $action_id = null; + } + } + + return $action_id; +} + +/** + * Cancel all occurrences of a scheduled action. + * + * @param string $hook The hook that the job will trigger. + * @param array $args Args that would have been passed to the job. + * @param string $group The group the job is assigned to. + */ +function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return; + } + if ( empty( $args ) ) { + if ( ! empty( $hook ) && empty( $group ) ) { + ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook ); + return; + } + if ( ! empty( $group ) && empty( $hook ) ) { + ActionScheduler_Store::instance()->cancel_actions_by_group( $group ); + return; + } + } + do { + $unscheduled_action = as_unschedule_action( $hook, $args, $group ); + } while ( ! empty( $unscheduled_action ) ); +} + +/** + * Check if there is an existing action in the queue with a given hook, args and group combination. + * + * An action in the queue could be pending, in-progress or async. If the is pending for a time in + * future, its scheduled date will be returned as a timestamp. If it is currently being run, or an + * async action sitting in the queue waiting to be processed, in which case boolean true will be + * returned. Or there may be no async, in-progress or pending action for this hook, in which case, + * boolean false will be the return value. + * + * @param string $hook Name of the hook to search for. + * @param array $args Arguments of the action to be searched. + * @param string $group Group of the action to be searched. + * + * @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action. + */ +function as_next_scheduled_action( $hook, $args = null, $group = '' ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return false; + } + + $params = array( + 'hook' => $hook, + 'orderby' => 'date', + 'order' => 'ASC', + 'group' => $group, + ); + + if ( is_array( $args ) ) { + $params['args'] = $args; + } + + $params['status'] = ActionScheduler_Store::STATUS_RUNNING; + $action_id = ActionScheduler::store()->query_action( $params ); + if ( $action_id ) { + return true; + } + + $params['status'] = ActionScheduler_Store::STATUS_PENDING; + $action_id = ActionScheduler::store()->query_action( $params ); + if ( null === $action_id ) { + return false; + } + + $action = ActionScheduler::store()->fetch_action( $action_id ); + $scheduled_date = $action->get_schedule()->get_date(); + if ( $scheduled_date ) { + return (int) $scheduled_date->format( 'U' ); + } elseif ( null === $scheduled_date ) { // pending async action with NullSchedule. + return true; + } + + return false; +} + +/** + * Check if there is a scheduled action in the queue but more efficiently than as_next_scheduled_action(). + * + * It's recommended to use this function when you need to know whether a specific action is currently scheduled + * (pending or in-progress). + * + * @since 3.3.0 + * + * @param string $hook The hook of the action. + * @param array $args Args that have been passed to the action. Null will matches any args. + * @param string $group The group the job is assigned to. + * + * @return bool True if a matching action is pending or in-progress, false otherwise. + */ +function as_has_scheduled_action( $hook, $args = null, $group = '' ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return false; + } + + $query_args = array( + 'hook' => $hook, + 'status' => array( ActionScheduler_Store::STATUS_RUNNING, ActionScheduler_Store::STATUS_PENDING ), + 'group' => $group, + 'orderby' => 'none', + ); + + if ( null !== $args ) { + $query_args['args'] = $args; + } + + $action_id = ActionScheduler::store()->query_action( $query_args ); + + return null !== $action_id; +} + +/** + * Find scheduled actions + * + * @param array $args Possible arguments, with their default values. + * 'hook' => '' - the name of the action that will be triggered. + * 'args' => NULL - the args array that will be passed with the action. + * 'date' => NULL - the scheduled date of the action. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone. + * 'date_compare' => '<=' - operator for testing "date". accepted values are '!=', '>', '>=', '<', '<=', '='. + * 'modified' => NULL - the date the action was last updated. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone. + * 'modified_compare' => '<=' - operator for testing "modified". accepted values are '!=', '>', '>=', '<', '<=', '='. + * 'group' => '' - the group the action belongs to. + * 'status' => '' - ActionScheduler_Store::STATUS_COMPLETE or ActionScheduler_Store::STATUS_PENDING. + * 'claimed' => NULL - TRUE to find claimed actions, FALSE to find unclaimed actions, a string to find a specific claim ID. + * 'per_page' => 5 - Number of results to return. + * 'offset' => 0. + * 'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', 'date' or 'none'. + * 'order' => 'ASC'. + * + * @param string $return_format OBJECT, ARRAY_A, or ids. + * + * @return array + */ +function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) { + if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) { + return array(); + } + $store = ActionScheduler::store(); + foreach ( array( 'date', 'modified' ) as $key ) { + if ( isset( $args[ $key ] ) ) { + $args[ $key ] = as_get_datetime_object( $args[ $key ] ); + } + } + $ids = $store->query_actions( $args ); + + if ( 'ids' === $return_format || 'int' === $return_format ) { + return $ids; + } + + $actions = array(); + foreach ( $ids as $action_id ) { + $actions[ $action_id ] = $store->fetch_action( $action_id ); + } + + if ( ARRAY_A === $return_format ) { + foreach ( $actions as $action_id => $action_object ) { + $actions[ $action_id ] = get_object_vars( $action_object ); + } + } + + return $actions; +} + +/** + * Helper function to create an instance of DateTime based on a given + * string and timezone. By default, will return the current date/time + * in the UTC timezone. + * + * Needed because new DateTime() called without an explicit timezone + * will create a date/time in PHP's timezone, but we need to have + * assurance that a date/time uses the right timezone (which we almost + * always want to be UTC), which means we need to always include the + * timezone when instantiating datetimes rather than leaving it up to + * the PHP default. + * + * @param mixed $date_string A date/time string. Valid formats are explained in http://php.net/manual/en/datetime.formats.php. + * @param string $timezone A timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available http://php.net/manual/en/timezones.php. + * + * @return ActionScheduler_DateTime + */ +function as_get_datetime_object( $date_string = null, $timezone = 'UTC' ) { + if ( is_object( $date_string ) && $date_string instanceof DateTime ) { + $date = new ActionScheduler_DateTime( $date_string->format( 'Y-m-d H:i:s' ), new DateTimeZone( $timezone ) ); + } elseif ( is_numeric( $date_string ) ) { + $date = new ActionScheduler_DateTime( '@' . $date_string, new DateTimeZone( $timezone ) ); + } else { + $date = new ActionScheduler_DateTime( null === $date_string ? 'now' : $date_string, new DateTimeZone( $timezone ) ); + } + return $date; +} + +/** + * Check if a specific feature is supported by the current version of Action Scheduler. + * + * @since 3.9.3 + * + * @param string $feature The feature to check support for. + * + * @return bool True if the feature is supported, false otherwise. + */ +function as_supports( string $feature ): bool { + $supported_features = array( 'ensure_recurring_actions_hook' ); + + return in_array( $feature, $supported_features, true ); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/WP_Async_Request.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/WP_Async_Request.php new file mode 100644 index 0000000..a40c80a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/WP_Async_Request.php @@ -0,0 +1,188 @@ +identifier = $this->prefix . '_' . $this->action; + + add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) ); + add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) ); + } + + /** + * Set data used during the request + * + * @param array $data Data. + * + * @return $this + */ + public function data( $data ) { + $this->data = $data; + + return $this; + } + + /** + * Dispatch the async request + * + * @return array|WP_Error + */ + public function dispatch() { + $url = add_query_arg( $this->get_query_args(), $this->get_query_url() ); + $args = $this->get_post_args(); + + return wp_remote_post( esc_url_raw( $url ), $args ); + } + + /** + * Get query args + * + * @return array + */ + protected function get_query_args() { + if ( property_exists( $this, 'query_args' ) ) { + return $this->query_args; + } + + $args = array( + 'action' => $this->identifier, + 'nonce' => wp_create_nonce( $this->identifier ), + ); + + /** + * Filters the post arguments used during an async request. + * + * @param array $url + */ + return apply_filters( $this->identifier . '_query_args', $args ); + } + + /** + * Get query URL + * + * @return string + */ + protected function get_query_url() { + if ( property_exists( $this, 'query_url' ) ) { + return $this->query_url; + } + + $url = admin_url( 'admin-ajax.php' ); + + /** + * Filters the post arguments used during an async request. + * + * @param string $url + */ + return apply_filters( $this->identifier . '_query_url', $url ); + } + + /** + * Get post args + * + * @return array + */ + protected function get_post_args() { + if ( property_exists( $this, 'post_args' ) ) { + return $this->post_args; + } + + $args = array( + 'timeout' => 0.01, + 'blocking' => false, + 'body' => $this->data, + 'cookies' => $_COOKIE, + 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), + ); + + /** + * Filters the post arguments used during an async request. + * + * @param array $args + */ + return apply_filters( $this->identifier . '_post_args', $args ); + } + + /** + * Maybe handle + * + * Check for correct nonce and pass to handler. + */ + public function maybe_handle() { + // Don't lock up other requests while processing. + session_write_close(); + + check_ajax_referer( $this->identifier, 'nonce' ); + + $this->handle(); + + wp_die(); + } + + /** + * Handle + * + * Override this method to perform any actions required + * during the async request. + */ + abstract protected function handle(); + + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.php new file mode 100644 index 0000000..33040ed --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.php @@ -0,0 +1,318 @@ + + * @link http://en.wikipedia.org/wiki/Cron + */ +class CronExpression +{ + const MINUTE = 0; + const HOUR = 1; + const DAY = 2; + const MONTH = 3; + const WEEKDAY = 4; + const YEAR = 5; + + /** + * @var array CRON expression parts + */ + private $cronParts; + + /** + * @var CronExpression_FieldFactory CRON field factory + */ + private $fieldFactory; + + /** + * @var array Order in which to test of cron parts + */ + private static $order = array(self::YEAR, self::MONTH, self::DAY, self::WEEKDAY, self::HOUR, self::MINUTE); + + /** + * Factory method to create a new CronExpression. + * + * @param string $expression The CRON expression to create. There are + * several special predefined values which can be used to substitute the + * CRON expression: + * + * @yearly, @annually) - Run once a year, midnight, Jan. 1 - 0 0 1 1 * + * @monthly - Run once a month, midnight, first of month - 0 0 1 * * + * @weekly - Run once a week, midnight on Sun - 0 0 * * 0 + * @daily - Run once a day, midnight - 0 0 * * * + * @hourly - Run once an hour, first minute - 0 * * * * + * +*@param CronExpression_FieldFactory $fieldFactory (optional) Field factory to use + * + * @return CronExpression + */ + public static function factory($expression, ?CronExpression_FieldFactory $fieldFactory = null) + { + $mappings = array( + '@yearly' => '0 0 1 1 *', + '@annually' => '0 0 1 1 *', + '@monthly' => '0 0 1 * *', + '@weekly' => '0 0 * * 0', + '@daily' => '0 0 * * *', + '@hourly' => '0 * * * *' + ); + + if (isset($mappings[$expression])) { + $expression = $mappings[$expression]; + } + + return new self($expression, $fieldFactory ? $fieldFactory : new CronExpression_FieldFactory()); + } + + /** + * Parse a CRON expression + * + * @param string $expression CRON expression (e.g. '8 * * * *') + * @param CronExpression_FieldFactory $fieldFactory Factory to create cron fields + */ + public function __construct($expression, CronExpression_FieldFactory $fieldFactory) + { + $this->fieldFactory = $fieldFactory; + $this->setExpression($expression); + } + + /** + * Set or change the CRON expression + * + * @param string $value CRON expression (e.g. 8 * * * *) + * + * @return CronExpression + * @throws InvalidArgumentException if not a valid CRON expression + */ + public function setExpression($value) + { + $this->cronParts = preg_split('/\s/', $value, -1, PREG_SPLIT_NO_EMPTY); + if (count($this->cronParts) < 5) { + throw new InvalidArgumentException( + $value . ' is not a valid CRON expression' + ); + } + + foreach ($this->cronParts as $position => $part) { + $this->setPart($position, $part); + } + + return $this; + } + + /** + * Set part of the CRON expression + * + * @param int $position The position of the CRON expression to set + * @param string $value The value to set + * + * @return CronExpression + * @throws InvalidArgumentException if the value is not valid for the part + */ + public function setPart($position, $value) + { + if (!$this->fieldFactory->getField($position)->validate($value)) { + throw new InvalidArgumentException( + 'Invalid CRON field value ' . $value . ' as position ' . $position + ); + } + + $this->cronParts[$position] = $value; + + return $this; + } + + /** + * Get a next run date relative to the current date or a specific date + * + * @param string|DateTime $currentTime (optional) Relative calculation date + * @param int $nth (optional) Number of matches to skip before returning a + * matching next run date. 0, the default, will return the current + * date and time if the next run date falls on the current date and + * time. Setting this value to 1 will skip the first match and go to + * the second match. Setting this value to 2 will skip the first 2 + * matches and so on. + * @param bool $allowCurrentDate (optional) Set to TRUE to return the + * current date if it matches the cron expression + * + * @return DateTime + * @throws RuntimeException on too many iterations + */ + public function getNextRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false) + { + return $this->getRunDate($currentTime, $nth, false, $allowCurrentDate); + } + + /** + * Get a previous run date relative to the current date or a specific date + * + * @param string|DateTime $currentTime (optional) Relative calculation date + * @param int $nth (optional) Number of matches to skip before returning + * @param bool $allowCurrentDate (optional) Set to TRUE to return the + * current date if it matches the cron expression + * + * @return DateTime + * @throws RuntimeException on too many iterations + * @see CronExpression::getNextRunDate + */ + public function getPreviousRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false) + { + return $this->getRunDate($currentTime, $nth, true, $allowCurrentDate); + } + + /** + * Get multiple run dates starting at the current date or a specific date + * + * @param int $total Set the total number of dates to calculate + * @param string|DateTime $currentTime (optional) Relative calculation date + * @param bool $invert (optional) Set to TRUE to retrieve previous dates + * @param bool $allowCurrentDate (optional) Set to TRUE to return the + * current date if it matches the cron expression + * + * @return array Returns an array of run dates + */ + public function getMultipleRunDates($total, $currentTime = 'now', $invert = false, $allowCurrentDate = false) + { + $matches = array(); + for ($i = 0; $i < max(0, $total); $i++) { + $matches[] = $this->getRunDate($currentTime, $i, $invert, $allowCurrentDate); + } + + return $matches; + } + + /** + * Get all or part of the CRON expression + * + * @param string $part (optional) Specify the part to retrieve or NULL to + * get the full cron schedule string. + * + * @return string|null Returns the CRON expression, a part of the + * CRON expression, or NULL if the part was specified but not found + */ + public function getExpression($part = null) + { + if (null === $part) { + return implode(' ', $this->cronParts); + } elseif (array_key_exists($part, $this->cronParts)) { + return $this->cronParts[$part]; + } + + return null; + } + + /** + * Helper method to output the full expression. + * + * @return string Full CRON expression + */ + public function __toString() + { + return $this->getExpression(); + } + + /** + * Determine if the cron is due to run based on the current date or a + * specific date. This method assumes that the current number of + * seconds are irrelevant, and should be called once per minute. + * + * @param string|DateTime $currentTime (optional) Relative calculation date + * + * @return bool Returns TRUE if the cron is due to run or FALSE if not + */ + public function isDue($currentTime = 'now') + { + if ('now' === $currentTime) { + $currentDate = date('Y-m-d H:i'); + $currentTime = strtotime($currentDate); + } elseif ($currentTime instanceof DateTime) { + $currentDate = $currentTime->format('Y-m-d H:i'); + $currentTime = strtotime($currentDate); + } else { + $currentTime = new DateTime($currentTime); + $currentTime->setTime($currentTime->format('H'), $currentTime->format('i'), 0); + $currentDate = $currentTime->format('Y-m-d H:i'); + $currentTime = (int)($currentTime->getTimestamp()); + } + + return $this->getNextRunDate($currentDate, 0, true)->getTimestamp() == $currentTime; + } + + /** + * Get the next or previous run date of the expression relative to a date + * + * @param string|DateTime $currentTime (optional) Relative calculation date + * @param int $nth (optional) Number of matches to skip before returning + * @param bool $invert (optional) Set to TRUE to go backwards in time + * @param bool $allowCurrentDate (optional) Set to TRUE to return the + * current date if it matches the cron expression + * + * @return DateTime + * @throws RuntimeException on too many iterations + */ + protected function getRunDate($currentTime = null, $nth = 0, $invert = false, $allowCurrentDate = false) + { + if ($currentTime instanceof DateTime) { + $currentDate = $currentTime; + } else { + $currentDate = new DateTime($currentTime ? $currentTime : 'now'); + $currentDate->setTimezone(new DateTimeZone(date_default_timezone_get())); + } + + $currentDate->setTime($currentDate->format('H'), $currentDate->format('i'), 0); + $nextRun = clone $currentDate; + $nth = (int) $nth; + + // Set a hard limit to bail on an impossible date + for ($i = 0; $i < 1000; $i++) { + + foreach (self::$order as $position) { + $part = $this->getExpression($position); + if (null === $part) { + continue; + } + + $satisfied = false; + // Get the field object used to validate this part + $field = $this->fieldFactory->getField($position); + // Check if this is singular or a list + if (strpos($part, ',') === false) { + $satisfied = $field->isSatisfiedBy($nextRun, $part); + } else { + foreach (array_map('trim', explode(',', $part)) as $listPart) { + if ($field->isSatisfiedBy($nextRun, $listPart)) { + $satisfied = true; + break; + } + } + } + + // If the field is not satisfied, then start over + if (!$satisfied) { + $field->increment($nextRun, $invert); + continue 2; + } + } + + // Skip this match if needed + if ((!$allowCurrentDate && $nextRun == $currentDate) || --$nth > -1) { + $this->fieldFactory->getField(0)->increment($nextRun, $invert); + continue; + } + + return $nextRun; + } + + // @codeCoverageIgnoreStart + throw new RuntimeException('Impossible CRON expression'); + // @codeCoverageIgnoreEnd + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php new file mode 100644 index 0000000..f8d5c00 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php @@ -0,0 +1,100 @@ + + */ +abstract class CronExpression_AbstractField implements CronExpression_FieldInterface +{ + /** + * Check to see if a field is satisfied by a value + * + * @param string $dateValue Date value to check + * @param string $value Value to test + * + * @return bool + */ + public function isSatisfied($dateValue, $value) + { + if ($this->isIncrementsOfRanges($value)) { + return $this->isInIncrementsOfRanges($dateValue, $value); + } elseif ($this->isRange($value)) { + return $this->isInRange($dateValue, $value); + } + + return $value == '*' || $dateValue == $value; + } + + /** + * Check if a value is a range + * + * @param string $value Value to test + * + * @return bool + */ + public function isRange($value) + { + return strpos($value, '-') !== false; + } + + /** + * Check if a value is an increments of ranges + * + * @param string $value Value to test + * + * @return bool + */ + public function isIncrementsOfRanges($value) + { + return strpos($value, '/') !== false; + } + + /** + * Test if a value is within a range + * + * @param string $dateValue Set date value + * @param string $value Value to test + * + * @return bool + */ + public function isInRange($dateValue, $value) + { + $parts = array_map('trim', explode('-', $value, 2)); + + return $dateValue >= $parts[0] && $dateValue <= $parts[1]; + } + + /** + * Test if a value is within an increments of ranges (offset[-to]/step size) + * + * @param string $dateValue Set date value + * @param string $value Value to test + * + * @return bool + */ + public function isInIncrementsOfRanges($dateValue, $value) + { + $parts = array_map('trim', explode('/', $value, 2)); + $stepSize = isset($parts[1]) ? $parts[1] : 0; + if ($parts[0] == '*' || $parts[0] === '0') { + return (int) $dateValue % $stepSize == 0; + } + + $range = explode('-', $parts[0], 2); + $offset = $range[0]; + $to = isset($range[1]) ? $range[1] : $dateValue; + // Ensure that the date value is within the range + if ($dateValue < $offset || $dateValue > $to) { + return false; + } + + for ($i = $offset; $i <= $to; $i+= $stepSize) { + if ($i == $dateValue) { + return true; + } + } + + return false; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php new file mode 100644 index 0000000..40c1d6c --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php @@ -0,0 +1,110 @@ + + */ +class CronExpression_DayOfMonthField extends CronExpression_AbstractField +{ + /** + * Get the nearest day of the week for a given day in a month + * + * @param int $currentYear Current year + * @param int $currentMonth Current month + * @param int $targetDay Target day of the month + * + * @return DateTime Returns the nearest date + */ + private static function getNearestWeekday($currentYear, $currentMonth, $targetDay) + { + $tday = str_pad($targetDay, 2, '0', STR_PAD_LEFT); + $target = new DateTime("$currentYear-$currentMonth-$tday"); + $currentWeekday = (int) $target->format('N'); + + if ($currentWeekday < 6) { + return $target; + } + + $lastDayOfMonth = $target->format('t'); + + foreach (array(-1, 1, -2, 2) as $i) { + $adjusted = $targetDay + $i; + if ($adjusted > 0 && $adjusted <= $lastDayOfMonth) { + $target->setDate($currentYear, $currentMonth, $adjusted); + if ($target->format('N') < 6 && $target->format('m') == $currentMonth) { + return $target; + } + } + } + } + + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + // ? states that the field value is to be skipped + if ($value == '?') { + return true; + } + + $fieldValue = $date->format('d'); + + // Check to see if this is the last day of the month + if ($value == 'L') { + return $fieldValue == $date->format('t'); + } + + // Check to see if this is the nearest weekday to a particular value + if (strpos($value, 'W')) { + // Parse the target day + $targetDay = substr($value, 0, strpos($value, 'W')); + // Find out if the current day is the nearest day of the week + return $date->format('j') == self::getNearestWeekday( + $date->format('Y'), + $date->format('m'), + $targetDay + )->format('j'); + } + + return $this->isSatisfied($date->format('d'), $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + if ($invert) { + $date->modify('previous day'); + $date->setTime(23, 59); + } else { + $date->modify('next day'); + $date->setTime(0, 0); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-\?LW0-9A-Za-z]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php new file mode 100644 index 0000000..e9f68a7 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php @@ -0,0 +1,124 @@ + + */ +class CronExpression_DayOfWeekField extends CronExpression_AbstractField +{ + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + if ($value == '?') { + return true; + } + + // Convert text day of the week values to integers + $value = str_ireplace( + array('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'), + range(0, 6), + $value + ); + + $currentYear = $date->format('Y'); + $currentMonth = $date->format('m'); + $lastDayOfMonth = $date->format('t'); + + // Find out if this is the last specific weekday of the month + if (strpos($value, 'L')) { + $weekday = str_replace('7', '0', substr($value, 0, strpos($value, 'L'))); + $tdate = clone $date; + $tdate->setDate($currentYear, $currentMonth, $lastDayOfMonth); + while ($tdate->format('w') != $weekday) { + $tdate->setDate($currentYear, $currentMonth, --$lastDayOfMonth); + } + + return $date->format('j') == $lastDayOfMonth; + } + + // Handle # hash tokens + if (strpos($value, '#')) { + list($weekday, $nth) = explode('#', $value); + // Validate the hash fields + if ($weekday < 1 || $weekday > 5) { + throw new InvalidArgumentException("Weekday must be a value between 1 and 5. {$weekday} given"); + } + if ($nth > 5) { + throw new InvalidArgumentException('There are never more than 5 of a given weekday in a month'); + } + // The current weekday must match the targeted weekday to proceed + if ($date->format('N') != $weekday) { + return false; + } + + $tdate = clone $date; + $tdate->setDate($currentYear, $currentMonth, 1); + $dayCount = 0; + $currentDay = 1; + while ($currentDay < $lastDayOfMonth + 1) { + if ($tdate->format('N') == $weekday) { + if (++$dayCount >= $nth) { + break; + } + } + $tdate->setDate($currentYear, $currentMonth, ++$currentDay); + } + + return $date->format('j') == $currentDay; + } + + // Handle day of the week values + if (strpos($value, '-')) { + $parts = explode('-', $value); + if ($parts[0] == '7') { + $parts[0] = '0'; + } elseif ($parts[1] == '0') { + $parts[1] = '7'; + } + $value = implode('-', $parts); + } + + // Test to see which Sunday to use -- 0 == 7 == Sunday + $format = in_array(7, str_split($value)) ? 'N' : 'w'; + $fieldValue = $date->format($format); + + return $this->isSatisfied($fieldValue, $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + if ($invert) { + $date->modify('-1 day'); + $date->setTime(23, 59, 0); + } else { + $date->modify('+1 day'); + $date->setTime(0, 0, 0); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-0-9A-Z]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php new file mode 100644 index 0000000..556ba1a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php @@ -0,0 +1,55 @@ + + * @link http://en.wikipedia.org/wiki/Cron + */ +class CronExpression_FieldFactory +{ + /** + * @var array Cache of instantiated fields + */ + private $fields = array(); + + /** + * Get an instance of a field object for a cron expression position + * + * @param int $position CRON expression position value to retrieve + * + * @return CronExpression_FieldInterface + * @throws InvalidArgumentException if a position is not valid + */ + public function getField($position) + { + if (!isset($this->fields[$position])) { + switch ($position) { + case 0: + $this->fields[$position] = new CronExpression_MinutesField(); + break; + case 1: + $this->fields[$position] = new CronExpression_HoursField(); + break; + case 2: + $this->fields[$position] = new CronExpression_DayOfMonthField(); + break; + case 3: + $this->fields[$position] = new CronExpression_MonthField(); + break; + case 4: + $this->fields[$position] = new CronExpression_DayOfWeekField(); + break; + case 5: + $this->fields[$position] = new CronExpression_YearField(); + break; + default: + throw new InvalidArgumentException( + $position . ' is not a valid position' + ); + } + } + + return $this->fields[$position]; + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php new file mode 100644 index 0000000..5d5109b --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php @@ -0,0 +1,39 @@ + + */ +interface CronExpression_FieldInterface +{ + /** + * Check if the respective value of a DateTime field satisfies a CRON exp + * + * @param DateTime $date DateTime object to check + * @param string $value CRON expression to test against + * + * @return bool Returns TRUE if satisfied, FALSE otherwise + */ + public function isSatisfiedBy(DateTime $date, $value); + + /** + * When a CRON expression is not satisfied, this method is used to increment + * or decrement a DateTime object by the unit of the cron field + * + * @param DateTime $date DateTime object to change + * @param bool $invert (optional) Set to TRUE to decrement + * + * @return CronExpression_FieldInterface + */ + public function increment(DateTime $date, $invert = false); + + /** + * Validates a CRON expression for a given field + * + * @param string $value CRON expression value to validate + * + * @return bool Returns TRUE if valid, FALSE otherwise + */ + public function validate($value); +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.php new file mode 100644 index 0000000..088ca73 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.php @@ -0,0 +1,47 @@ + + */ +class CronExpression_HoursField extends CronExpression_AbstractField +{ + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + return $this->isSatisfied($date->format('H'), $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + // Change timezone to UTC temporarily. This will + // allow us to go back or forwards and hour even + // if DST will be changed between the hours. + $timezone = $date->getTimezone(); + $date->setTimezone(new DateTimeZone('UTC')); + if ($invert) { + $date->modify('-1 hour'); + $date->setTime($date->format('H'), 59); + } else { + $date->modify('+1 hour'); + $date->setTime($date->format('H'), 0); + } + $date->setTimezone($timezone); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-0-9]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php new file mode 100644 index 0000000..436acf2 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php @@ -0,0 +1,39 @@ + + */ +class CronExpression_MinutesField extends CronExpression_AbstractField +{ + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + return $this->isSatisfied($date->format('i'), $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + if ($invert) { + $date->modify('-1 minute'); + } else { + $date->modify('+1 minute'); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-0-9]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.php new file mode 100644 index 0000000..d3deb12 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.php @@ -0,0 +1,55 @@ + + */ +class CronExpression_MonthField extends CronExpression_AbstractField +{ + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + // Convert text month values to integers + $value = str_ireplace( + array( + 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', + 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' + ), + range(1, 12), + $value + ); + + return $this->isSatisfied($date->format('m'), $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + if ($invert) { + // $date->modify('last day of previous month'); // remove for php 5.2 compat + $date->modify('previous month'); + $date->modify($date->format('Y-m-t')); + $date->setTime(23, 59); + } else { + //$date->modify('first day of next month'); // remove for php 5.2 compat + $date->modify('next month'); + $date->modify($date->format('Y-m-01')); + $date->setTime(0, 0); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-0-9A-Z]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.php b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.php new file mode 100644 index 0000000..f11562e --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.php @@ -0,0 +1,43 @@ + + */ +class CronExpression_YearField extends CronExpression_AbstractField +{ + /** + * {@inheritdoc} + */ + public function isSatisfiedBy(DateTime $date, $value) + { + return $this->isSatisfied($date->format('Y'), $value); + } + + /** + * {@inheritdoc} + */ + public function increment(DateTime $date, $invert = false) + { + if ($invert) { + $date->modify('-1 year'); + $date->setDate($date->format('Y'), 12, 31); + $date->setTime(23, 59, 0); + } else { + $date->modify('+1 year'); + $date->setDate($date->format('Y'), 1, 1); + $date->setTime(0, 0, 0); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function validate($value) + { + return (bool) preg_match('/[\*,\/\-0-9]+/', $value); + } +} diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSE b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSE new file mode 100644 index 0000000..c6d88ac --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Michael Dowling and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/license.txt b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/license.txt new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/license.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/readme.txt b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/readme.txt new file mode 100644 index 0000000..8a6aa0a --- /dev/null +++ b/wp-content/plugins/simply-schedule-appointments/vendor/woocommerce/action-scheduler/readme.txt @@ -0,0 +1,244 @@ +=== Action Scheduler === +Contributors: Automattic, wpmuguru, claudiosanches, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, royho, barryhughes-1 +Tags: scheduler, cron +Stable tag: 3.9.3 +License: GPLv3 +Requires at least: 6.5 +Tested up to: 6.8 +Requires PHP: 7.2 + +Action Scheduler - Job Queue for WordPress + +== Description == + +Action Scheduler is a scalable, traceable job queue for background processing large sets of actions in WordPress. It's specially designed to be distributed in WordPress plugins. + +Action Scheduler works by triggering an action hook to run at some time in the future. Each hook can be scheduled with unique data, to allow callbacks to perform operations on that data. The hook can also be scheduled to run on one or more occasions. + +Think of it like an extension to `do_action()` which adds the ability to delay and repeat a hook. + +## Battle-Tested Background Processing + +Every month, Action Scheduler processes millions of payments for [Subscriptions](https://woocommerce.com/products/woocommerce-subscriptions/), webhooks for [WooCommerce](https://wordpress.org/plugins/woocommerce/), as well as emails and other events for a range of other plugins. + +It's been seen on live sites processing queues in excess of 50,000 jobs and doing resource intensive operations, like processing payments and creating orders, at a sustained rate of over 10,000 / hour without negatively impacting normal site operations. + +This is all on infrastructure and WordPress sites outside the control of the plugin author. + +If your plugin needs background processing, especially of large sets of tasks, Action Scheduler can help. + +## Learn More + +To learn more about how Action Scheduler works, and how to use it in your plugin, check out the docs on [ActionScheduler.org](https://actionscheduler.org). + +There you will find: + +* [Usage guide](https://actionscheduler.org/usage/): instructions on installing and using Action Scheduler +* [WP CLI guide](https://actionscheduler.org/wp-cli/): instructions on running Action Scheduler at scale via WP CLI +* [API Reference](https://actionscheduler.org/api/): complete reference guide for all API functions +* [Administration Guide](https://actionscheduler.org/admin/): guide to managing scheduled actions via the administration screen +* [Guide to Background Processing at Scale](https://actionscheduler.org/perf/): instructions for running Action Scheduler at scale via the default WP Cron queue runner + +## Credits + +Action Scheduler is developed and maintained by [Automattic](http://automattic.com/) with significant early development completed by [Flightless](https://flightless.us/). + +Collaboration is cool. We'd love to work with you to improve Action Scheduler. [Pull Requests](https://github.com/woocommerce/action-scheduler/pulls) welcome. + +== Changelog == + += 3.9.3 - 2025-07-15 = +* Add hook 'action_scheduler_ensure_recurring_actions' specifically for scheduling recurring actions. +* Assume an action is valid until proven otherwise. +* Implement SKIP LOCKED during action claiming. +* Import `get_flag_value()` from `WP_CLI\Utils` before using. +* Make `$unique` available to all pre-creation/short-circuit hooks. +* Make version/source information available via new class. +* Only release claims on pending actions. +* Tweak - WP 6.8 compatibility. +* Update minimum supported php and phpunit versions. +* Update readme.txt. +* WP CLI get action command: correct parentheses/nesting of conditional checks. + += 3.9.2 - 2025-02-03 = +* Fixed fatal errors by moving version info methods to a new class and deprecating conflicting ones in ActionScheduler_Versions + += 3.9.1 - 2025-01-21 = +* A number of new WP CLI commands have been added, making it easier to manage actions in the terminal and from scripts. +* New wp action-scheduler source command to help determine how Action Scheduler is being loaded. +* Additional information about the active instance of Action Scheduler is now available in the Help pull-down drawer. +* Make some other nullable parameters explicitly nullable. +* Set option value to `no` rather than deleting. + += 3.9.0 - 2024-11-14 = +* Minimum required version of PHP is now 7.1. +* Performance improvements for the `as_pending_actions_due()` function. +* Existing filter hook `action_scheduler_claim_actions_order_by` enhanced to provide callbacks with additional information. +* Improved compatibility with PHP 8.4, specifically by making implicitly nullable parameters explicitly nullable. +* A large number of coding standards-enhancements, to help reduce friction when submitting plugins to marketplaces and plugin directories. Special props @crstauf for this effort. +* Minor documentation tweaks and improvements. + += 3.8.2 - 2024-09-12 = +* Add missing parameter to the `pre_as_enqueue_async_action` hook. +* Bump minimum PHP version to 7.0. +* Bump minimum WordPress version to 6.4. +* Make the batch size adjustable during processing. + += 3.8.1 - 2024-06-20 = +* Fix typos. +* Improve the messaging in our unidentified action exceptions. + += 3.8.0 - 2024-05-22 = +* Documentation - Fixed typos in perf.md. +* Update - We now require WordPress 6.3 or higher. +* Update - We now require PHP 7.0 or higher. + += 3.7.4 - 2024-04-05 = +* Give a clear description of how the $unique parameter works. +* Preserve the tab field if set. +* Tweak - WP 6.5 compatibility. + += 3.7.3 - 2024-03-20 = +* Do not iterate over all of GET when building form in list table. +* Fix a few issues reported by PCP (Plugin Check Plugin). +* Try to save actions as unique even when the store doesn't support it. +* Tweak - WP 6.4 compatibility. +* Update "Tested up to" tag to WordPress 6.5. +* update version in package-lock.json. + += 3.7.2 - 2024-02-14 = +* No longer user variables in `_n()` translation function. + += 3.7.1 - 2023-12-13 = +* update semver to 5.7.2 because of a security vulnerability in 5.7.1. + += 3.7.0 - 2023-11-20 = +* Important: starting with this release, Action Scheduler follows an L-2 version policy (WordPress, and consequently PHP). +* Add extended indexes for hook_status_scheduled_date_gmt and status_scheduled_date_gmt. +* Catch and log exceptions thrown when actions can't be created, e.g. under a corrupt database schema. +* Tweak - WP 6.4 compatibility. +* Update unit tests for upcoming dependency version policy. +* make sure hook action_scheduler_failed_execution can access original exception object. +* mention dependency version policy in usage.md. + += 3.6.4 - 2023-10-11 = +* Performance improvements when bulk cancelling actions. +* Dev-related fixes. + += 3.6.3 - 2023-09-13 = +* Use `_doing_it_wrong` in initialization check. + += 3.6.2 - 2023-08-09 = +* Add guidance about passing arguments. +* Atomic option locking. +* Improve bulk delete handling. +* Include database error in the exception message. +* Tweak - WP 6.3 compatibility. + += 3.6.1 - 2023-06-14 = +* Document new optional `$priority` arg for various API functions. +* Document the new `--exclude-groups` WP CLI option. +* Document the new `action_scheduler_init` hook. +* Ensure actions within each claim are executed in the expected order. +* Fix incorrect text domain. +* Remove SHOW TABLES usage when checking if tables exist. + += 3.6.0 - 2023-05-10 = +* Add $unique parameter to function signatures. +* Add a cast-to-int for extra safety before forming new DateTime object. +* Add a hook allowing exceptions for consistently failing recurring actions. +* Add action priorities. +* Add init hook. +* Always raise the time limit. +* Bump minimatch from 3.0.4 to 3.0.8. +* Bump yaml from 2.2.1 to 2.2.2. +* Defensive coding relating to gaps in declared schedule types. +* Do not process an action if it cannot be set to `in-progress`. +* Filter view labels (status names) should be translatable | #919. +* Fix WPCLI progress messages. +* Improve data-store initialization flow. +* Improve error handling across all supported PHP versions. +* Improve logic for flushing the runtime cache. +* Support exclusion of multiple groups. +* Update lint-staged and Node/NPM requirements. +* add CLI clean command. +* add CLI exclude-group filter. +* exclude past-due from list table all filter count. +* throwing an exception if as_schedule_recurring_action interval param is not of type integer. + += 3.5.4 - 2023-01-17 = +* Add pre filters during action registration. +* Async scheduling. +* Calculate timeouts based on total actions. +* Correctly order the parameters for `ActionScheduler_ActionFactory`'s calls to `single_unique`. +* Fetch action in memory first before releasing claim to avoid deadlock. +* PHP 8.2: declare property to fix creation of dynamic property warning. +* PHP 8.2: fix "Using ${var} in strings is deprecated, use {$var} instead". +* Prevent `undefined variable` warning for `$num_pastdue_actions`. + += 3.5.3 - 2022-11-09 = +* Query actions with partial match. + += 3.5.2 - 2022-09-16 = +* Fix - erroneous 3.5.1 release. + += 3.5.1 - 2022-09-13 = +* Maintenance on A/S docs. +* fix: PHP 8.2 deprecated notice. + += 3.5.0 - 2022-08-25 = +* Add - The active view link within the "Tools > Scheduled Actions" screen is now clickable. +* Add - A warning when there are past-due actions. +* Enhancement - Added the ability to schedule unique actions via an atomic operation. +* Enhancement - Improvements to cache invalidation when processing batches (when running on WordPress 6.0+). +* Enhancement - If a recurring action is found to be consistently failing, it will stop being rescheduled. +* Enhancement - Adds a new "Past Due" view to the scheduled actions list table. + += 3.4.2 - 2022-06-08 = +* Fix - Change the include for better linting. +* Fix - update: Added Action scheduler completed action hook. + += 3.4.1 - 2022-05-24 = +* Fix - Change the include for better linting. +* Fix - Fix the documented return type. + += 3.4.0 - 2021-10-29 = +* Enhancement - Number of items per page can now be set for the Scheduled Actions view (props @ovidiul). #771 +* Fix - Do not lower the max_execution_time if it is already set to 0 (unlimited) (props @barryhughes). #755 +* Fix - Avoid triggering autoloaders during the version resolution process (props @olegabr). #731 & #776 +* Dev - ActionScheduler_wcSystemStatus PHPCS fixes (props @ovidiul). #761 +* Dev - ActionScheduler_DBLogger.php PHPCS fixes (props @ovidiul). #768 +* Dev - Fixed phpcs for ActionScheduler_Schedule_Deprecated (props @ovidiul). #762 +* Dev - Improve actions table indices (props @glagonikas). #774 & #777 +* Dev - PHPCS fixes for ActionScheduler_DBStore.php (props @ovidiul). #769 & #778 +* Dev - PHPCS Fixes for ActionScheduler_Abstract_ListTable (props @ovidiul). #763 & #779 +* Dev - Adds new filter action_scheduler_claim_actions_order_by to allow tuning of the claim query (props @glagonikas). #773 +* Dev - PHPCS fixes for ActionScheduler_WpPostStore class (props @ovidiul). #780 + += 3.3.0 - 2021-09-15 = +* Enhancement - Adds as_has_scheduled_action() to provide a performant way to test for existing actions. #645 +* Fix - Improves compatibility with environments where NO_ZERO_DATE is enabled. #519 +* Fix - Adds safety checks to guard against errors when our database tables cannot be created. #645 +* Dev - Now supports queries that use multiple statuses. #649 +* Dev - Minimum requirements for WordPress and PHP bumped (to 5.2 and 5.6 respectively). #723 + += 3.2.1 - 2021-06-21 = +* Fix - Add extra safety/account for different versions of AS and different loading patterns. #714 +* Fix - Handle hidden columns (Tools → Scheduled Actions) | #600. + += 3.2.0 - 2021-06-03 = +* Fix - Add "no ordering" option to as_next_scheduled_action(). +* Fix - Add secondary scheduled date checks when claiming actions (DBStore) | #634. +* Fix - Add secondary scheduled date checks when claiming actions (wpPostStore) | #634. +* Fix - Adds a new index to the action table, reducing the potential for deadlocks (props: @glagonikas). +* Fix - Fix unit tests infrastructure and adapt tests to PHP 8. +* Fix - Identify in-use data store. +* Fix - Improve test_migration_is_scheduled. +* Fix - PHP notice on list table. +* Fix - Speed up clean up and batch selects. +* Fix - Update pending dependencies. +* Fix - [PHP 8.0] Only pass action arg values through to do_action_ref_array(). +* Fix - [PHP 8] Set the PHP version to 7.1 in composer.json for PHP 8 compatibility. +* Fix - add is_initialized() to docs. +* Fix - fix file permissions. +* Fix - fixes #664 by replacing __ with esc_html__.